トップ 一覧 置換 検索 ヘルプ 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


{{category2 OS,Linux}}