状況は、iSCSI環境で、ディスクの削除・追加を実施した際に、同じデバイスファイルが使われる
ことがあるかと思いますが、その際に古いディスクの情報が残ってしまいます。
ということで、古いディスクの情報を削除し、再度あたらしくなった情報を読み込みます。
以下の例では、/dev/sdcデバイスファイルを1GBから10GBに変更したい際の例。
1.該当LUNのディスク情報の確認
# ls -l /dev/disk/by-path/ip-*lun-0
lrwxrwxrwx 1 root root 10 6月 10 06:33 2013 /dev/disk/by-path/ip-192.168.x.x:3260-iscsi-iqn.xxxxxxxxxx-lun-0 -> ../../sdc
# fdisk -l /dev/sdc
ディスク /dev/sdc: 1073 MB, 1073741824 バイト
ヘッド 34, セクタ 61, シリンダ 1011
Units = シリンダ数 of 2074 * 512 = 1061888 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x00000000
# echo 1 > /sys/block/sdc/device/delete
# ls -l /dev/disk/by-path/ip-*lun-0
ls: cannot access /dev/disk/by-path/ip-*lun-0: そのようなファイルやディレクトリはありません
何も表示されない。成功。
3.ディスクの再認識
まずはiSCSIのセッションを確認する(本当はすでに知っているはずですが・・)
# iscsiadm -m session
# iscsiadm -m session
tcp: [1] 192.168.x.x:3260,7 iqn.1992-04.com.xxx:xx.xxxxxx.xx
これでセッション5であることがわかる。
# ls -ld /sys/class/iscsi_host/host*/device/session1
drwxr-xr-x 6 root root 0 3月 26 19:47 2013 /sys/class/iscsi_host/host5/device/session1
# find /sys/class/iscsi_host/host5/device/scsi_host/host*/scan
/sys/class/iscsi_host/host5/device/scsi_host/host5/scan
このパス情報を使って、デバイスをスキャンする。
# echo "- - -" > /sys/class/iscsi_host/host5/device/scsi_host/host5/scan
そしてデバイスを確認してみると、、
# ls -l /dev/disk/by-path/ip-*lun-0
lrwxrwxrwx 1 root root 10 6月 11 06:33 2013 /dev/disk/by-path/ip-192.168.x.x:3260-iscsi-iqn.xxxxxxxxxx-lun-0 -> ../../sdc
できてました!日付も新しい。念のため
# fdisk -l /dev/sdc
ディスク /dev/sdc: 10.7 GB, 10737418240 バイト
ヘッド 64, セクタ 32, シリンダ 10240
Units = シリンダ数 of 2048 * 512 = 1048576 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x00000000
ディスク /dev/sdc は正常なパーティションテーブルを含んでいません
おおおおっ。10GBになってた。終了。
-----おまけ-----
上記のようなディスクがいっぱいあった場合を想定してちょっと工夫してみた。
対象LUNがわかっている前提になるが、
1.対象LUNの現状を確認する(以下の例はLUNが13,14,15の場合)
# for i in 13 14 15;do ls -l /dev/disk/by-path/ip-*lun-$i; done|awk -F "/" '{print "fdisk -l /dev/"$NF""}'|sh
-----おまけ-----
上記のようなディスクがいっぱいあった場合を想定してちょっと工夫してみた。
対象LUNがわかっている前提になるが、
1.対象LUNの現状を確認する(以下の例はLUNが13,14,15の場合)
# for i in 13 14 15;do ls -l /dev/disk/by-path/ip-*lun-$i; done|awk -F "/" '{print "fdisk -l /dev/"$NF""}'|sh
これで現在のデバイスが古い情報なのかどうか?が判断できる(容量から)。
2.対象LUNを削除する
# for i in 13 14 15;do ls -l /dev/disk/by-path/ip-*lun-$i; done|awk -F "/" '{print "echo 1 > /sys/block/"$NF"/device/delete"}'|sh
3.対象デバイスを再スキャンする
# find /sys/class/iscsi_host/host*/device/scsi_host/host*/scan|awk -F: '{print "echo \"- - -\" > "$0}'|sh
4.対象LUNを確認する
# for i in 13 14 15;do ls -l /dev/disk/by-path/ip-*lun-$i; done|awk -F "/" '{print "fdisk -l /dev/"$NF""}'|sh
これでちょっと楽になったかな(やり方が野暮ったい感じはするけども。。)。
0 件のコメント:
コメントを投稿