http://www.oss-d.net/iscsi http://www.mazn.net/blog/2009/03/20/199.html http://hp.vector.co.jp/authors/VA022911/tec/centos/iscsi.htm http://d.hatena.ne.jp/greenballs/20090202/1233533983 http://ameblo.jp/it-tutor/theme2-10016328276.html http://www.ranonet.com/linux/tips/016_iscsiinitiator.shtml http://tomo.ac/goodstream/iscsi/setup-centos5.html !!!Linux を iSCSI のターゲットにする(サーバ) !インストール yum install scsi-target-utils !iSCSIで公開する場所の準備 /dev/sdb1 などを直接公開しない場合は dd if=/dev/zero of=/iscsi/disk.img bs=100M count=0 seek=1 または dd if=/dev/zero of=/iscsi/disk.img bs=1M count=1024 などのようにディスクイメージを作成する !ターゲットデーモン開始 /etc/init.d/tgtd start !ターゲットの登録 tgtadm --lld iscsi --op new --mode target --tid 1 --targetname iscsi.test1 !ターゲットの表示 tgtadm --lld iscsi --op show --mode target !ターゲットにデバイスを設定 tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 --backing-store /iscsi/disk.img コマンド実行時に tgtadm: invalid request 等のエラーが出る場合は SELinux が影響している可能性あり。 その場合はSELinux を無効するとか、SELinux の設定を見直す。 !ターゲットのアクセス権限を設定 全ての接続を許可する場合 tgtadm --lld iscsi --op bind --mode target --tid 1 --initiator-address=ALL IPで制限する場合 tgtadm --lld iscsi --op bind --mode target --tid 1 --initiator-address=192.168.1.0/24 !設定ファイルで設定する場合 vi /etc/tgt/targets.conf で backing-store /mnt/iscsi/disk.img initiator-address ALL write-cache off などのように追加 !!!Linux から ターゲットを利用する(クライアント) !インストール yum install iscsi-initiator-utils !ターゲットを検索 iscsiadm --mode discovery --type sendtargets --portal 192.168.137.135 --portal の後のIPは、ターゲットのIP !登録ノード一覧表示 iscsiadm --mode node !ターゲットの詳細表示 iscsiadm --mode node -T ターゲット !ターゲットにログイン iscsiadm --mode node --login ターゲットを指定する場合 iscsiadm -m node -T iscsi.test -l !ログインノード一覧表示 iscsiadm --mode session !ターゲットからログアウト iscsiadm -m node -T iscsi.test -u !ログインしているiscsiのデバイス名を確認する http://lesstep.jp/wiki/index.php?%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3%E3%81%97%E3%81%A6%E3%81%84%E3%82%8Biscsi%E3%83%87%E3%82%A3%E3%82%B9%E3%82%AF%E3%81%AE%E3%83%87%E3%83%90%E3%82%A4%E3%82%B9%E5%90%8D%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95 # ls -l /dev/disk/by-path/ | grep iscsi lrwxrwxrwx 1 root root 9 7月 17 2010 ip-192.168.12.254:3260-iscsi-iqn.2004-08.jp.buffalo:TS-RIGL795-001D73260795:array1 -> ../../sdb lrwxrwxrwx 1 root root 10 7月 17 2010 ip-192.168.12.254:3260-iscsi-iqn.2004-08.jp.buffalo:TS-RIGL795-001D73260795:array1-part1 -> ../../sdb1 !デバイス確認 fdisk -l !パーティッション作成、マウント、フォーマット fdisk /dev/hdd p パーティション情報の表示 n 新たに領域を作成 w 書き込み mke2fs -j /dev/hdd1 mount /dev/hdd1 /mnt/iscsi とか。ext4の場合は mkfs.ext4 /dev/sdb1 とか。 !登録ノードの削除 (※discoveryによる一括登録を行った場合は、接続サーバの削除を行う) iscsiadm --mode node --op delete --targetname iscsi.test ターゲットとIPアドレス、ポートも指定して削除する場合 iscsiadm -m node -o delete iqn.2013-03.net.unix-power:samba2.sdb -p 192.168.12.21 !接続サーバの削除 iscsiadm --mode discovery --op delete --portal 192.168.1.34 !!!起動時にiSCSI上のLVMが認識させる http://d.hatena.ne.jp/naga_sawa/20120429/1335693402 *ロード順序が LVM -> iSCSI なので、起動時に iSCSI 上のボリュームがアクティブにならない。 *全デバイスが有効になってから vgchange -ay するスクリプトを組むのが逃げ道。 *RHEL6.3では改善するかも !!スクリプトを作成して対応する iscsi, iscsid が走ってから実際に iSCSI ボリュームが認識されるまでタイムラグがあるようなので、ウエイト(iscsi_ready_wait)を仕込んでるので適宜調整。 # vi /etc/init.d/iscsimount #!/bin/bash # # iscsimount mount LVM group on iSCSI partitions # # Author: naga_sawa # # chkconfig: 2345 98 03 # description: mount LVM group on iSCSI partitions # # processname: iscsimount # pidfile: /var/lock/subsys/iscsimount ### BEGIN INIT INFO # Provides: iscsimount # Required-Start: libvirtd # Required-Stop: libvirtd # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: mount LVM group on iSCSI partitions # Description: This is a script for mounting LVM group on iSCSI partitions # by /etc/fstabs ### END INIT INFO # Source function library. . /etc/rc.d/init.d/functions RETVAL=0 prog=iscsimount iscsi_ready_wait=5 start() { sleep $iscsi_ready_wait vgchange -ay mount -a touch /var/lock/subsys/iscsimount } stop() { rm -f /var/lock/subsys/iscsimount } case "$1" in start) echo -n $"Starting $prog: " start ;; stop) echo -n $"Stopping $prog: " stop RETVAL=$? ;; *) # do not advertise unreasonable commands that there is no reason # to use with this device echo $"Usage: $0 {start|stop}" exit 1 esac if [ $RETVAL = 0 ] ; then echo_success echo else echo_failure echo fi exit $RETVAL !!起動時にこのスクリプトが走るようにする # chmod 755 /etc/init.d/iscsimount # chkconfig --add iscsimount # chkconfig --list iscsimount iscsimount 0:off 1:off 2:on 3:on 4:on 5:on 6:off !!fstab にLVMボリュームを登録 下記のデバイス名を固定するスクリプトを仕込めば、デバイス名を固定できる。 でも、デバイス名を固定しなくても、UUIDが分かればマウントできる。 !/etc/fstab /dev/VolGroup等のデバイス名を指定する方法とUUIDを指定する方法がある。 # vi /etc/fstab /dev/VolGroup02/test /mnt/iscsi/virtimages1 ext4 _netdev 0 0 または UUID=100c65bb-71fd-484d-9b90-a013035d0abf /mnt/iscsi/virtimages1 ext4 _netdev 0 0 _netdev オプションは、ネットワークが開始されるまでマウントを待つという意味 !UUIDを調べるには blkid コマンドを使う # blkid /dev/vg_host/lv_root /dev/vg_host/lv_root: UUID="5febb0c7-7f32-4d32-8050-efcde3128538" TYPE="ext4" # blkid /dev/vg_host/lv_swap /dev/vg_host/lv_swap: UUID="fb403fa9-fbbf-491d-b198-63da8ad694ca" TYPE="swap" # blkid /dev/vg_host/lv_images /dev/vg_host/lv_images: UUID="100c65bb-71fd-484d-9b90-a013035d0abf" TYPE="ext4" または、LVM論理ボリュームが認識されている状態で # ll /dev/mapper/ 合計 0 crw-rw---- 1 root root 10, 58 4月 22 19:26 2012 control lrwxrwxrwx 1 root root 7 4月 22 19:26 2012 vg_host-lv_root -> ../dm-0 lrwxrwxrwx 1 root root 7 4月 22 19:26 2012 vg_host-lv_swap -> ../dm-1 lrwxrwxrwx 1 root root 7 4月 22 19:38 2012 vg_host-lv_images -> ../dm-2 これで、vg_xxx-lv_xxx と dm-x の対応がわかるので、目的の LogicalVolume がどの dm に対応してるか確認する。 次に UUID と dm-x の対応を調べる # ll /dev/disk/by-uuid/ 合計 0 lrwxrwxrwx 1 root root 10 4月 22 19:38 2012 100c65bb-71fd-484d-9b90-a013035d0abf -> ../../dm-2 lrwxrwxrwx 1 root root 10 4月 22 19:26 2012 438fc77d-a0a4-4738-8ee9-abc704ac16b3 -> ../../sda1 lrwxrwxrwx 1 root root 10 4月 22 19:26 2012 5febb0c7-7f32-4d32-8050-efcde3128538 -> ../../dm-0 lrwxrwxrwx 1 root root 10 4月 22 19:26 2012 fb403fa9-fbbf-491d-b198-63da8ad694ca -> ../../dm-1 vg_host の lv_images は dm-2 にマッピングされていて、UUID が 100c65bb-71fd-484d-9b90-a013035d0abf ということがわかる。 !!!udevを用いたiSCSIのデバイス名固定 http://mogtechblog.blogspot.jp/2011/03/centos5udeviscsi.html iSCSIのデバイス名が固定されないのでちょっと不便。 そんなときの対応。 !/etc/scsi_id.config ファイルを編集 options=-b の行がコメントアウトしてあることを確認し、以下の行を追加 options=-g !対象のiSCSIデバイス(/dev/sdX)のUUIDを調べる # scsi_id -g -s /block/sdX 3600a0b800013275100000015427b625e !/ect/udev/rules.d/20-iscsi.rulesの作成 KERNEL=="sd*", BUS=="scsi", PROGRAM="/lib/udev/scsi_id -g -s /block/%k", RESULT=="3600a0b800013275100000015427b625e", NAME{all_partitions}="mydevice" を記述する。 (1つしかパーティションを切ってなくても15個できるがキニシナイ) !!!トラブル対応 !!ブロック書込みエラー iSCSIにLVMを構築して運用中に、原因は不明だが、ブロック書込みエラー的なエラーが出ることがある。 とりあえず、一度アンマウントして、LVMを認識しなおせば復活できる。 #umount /mnt/hoge #vgchange -a n VolGroup1 #vgchange -a y VolGroup1 #mount /mnt/hoge {{category2 OS,Linux}}