トップ 差分 一覧 ソース 置換 検索 ヘルプ PDF RSS ログイン

Linuxで iSCSIを利用する

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


<target iscsi.test1>
 backing-store /mnt/iscsi/disk.img
 initiator-address ALL
 write-cache off
</target>

などのように追加


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


[カテゴリ: OS > Linux]

[通知用URL]



  • Hatenaブックマークに追加
  • livedoorクリップに追加
  • del.icio.usに追加
  • FC2ブックマークに追加

最終更新時間:2016年11月18日 23時14分25秒