udevを使用したディスクの固定化
「VMware におけるSCSIコントローラの認識順序」において、SCSI接続のディスクについてはudevを使用してもsdaやsdbに特定のディスクを強制的に結びつけることができない、としていたが実はできてしまった。ただし、運用上混乱を招く可能性があるためお勧めできるものではない。やはり、sdaやsdbは変化しうるものとして開き直り、別名をシンボリックリンクで定義するのがベストな運用であるように思う。それか前記事の通り、認識順をがっちり固めるか。
試行錯誤の過程でudevへの理解が深まったと思うので記録しておく。特に、udevへの理解が「デバイス名を変更できる機構」というかなり適当(というかそう説明したら間違いだ)なものであったが、以下のイメージが得られたことが収穫だと思う。
- /dev はOS(カーネル)の認識しているものを元に udev によって作られた「窓口」である。そのため名前はどうにでもできる部分である。
- udev が /dev をどう形作ろうとカーネル上の認識は変わらない。
- udev を最も身近に感じさせるネットワークアダプタのリネーム機能は実は udev の機能のなかでは異質である。
検証に使用する仮想マシンの構成
- SCSIコントローラ0
- ネットワークアダプタ
- ネットワークアダプタ1 (MAC=00:0c:29:d2:b6:83):eth0 であり、検証に使用する。
- ネットワークアダプタ2 (MAC=00:0c:29:d2:b6:8d):eth1 であり、検証に使用する。
udev の効果を検証するため、ディスクについては udev 設定後にディスク2を(0:3)に接続することで認識順を変更する想定である。ネットワークアダプタについては、vmxファイルのpciSlotNumberを入れ替えてネットワークアダプタの認識順を変更する。
構成確認用のコマンドの実行結果を抜粋する。
# ls -l /dev/sd* brw-rw----. 1 root disk 8, 0 Jan 19 10:42 /dev/sda brw-rw----. 1 root disk 8, 1 Jan 19 10:42 /dev/sda1 brw-rw----. 1 root disk 8, 2 Jan 19 10:42 /dev/sda2 brw-rw----. 1 root disk 8, 16 Jan 19 10:42 /dev/sdb brw-rw----. 1 root disk 8, 17 Jan 19 10:42 /dev/sdb1 brw-rw----. 1 root disk 8, 18 Jan 19 10:42 /dev/sdb2 brw-rw----. 1 root disk 8, 32 Jan 19 10:42 /dev/sdc brw-rw----. 1 root disk 8, 33 Jan 19 10:42 /dev/sdc1 brw-rw----. 1 root disk 8, 34 Jan 19 10:42 /dev/sdc2 brw-rw----. 1 root disk 8, 35 Jan 19 10:42 /dev/sdc3 # fdisk -l Disk /dev/sda: 42.9 GB, 42949672960 bytes 64 heads, 32 sectors/track, 40960 cylinders Disk identifier: 0x00034b9d Device Boot Start End Blocks Id System /dev/sda1 * 2 501 512000 83 Linux /dev/sda2 502 40960 41430016 8e Linux LVM Disk /dev/sdb: 1073 MB, 1073741824 bytes 34 heads, 61 sectors/track, 1011 cylinders Disk identifier: 0xe64d8f76 Device Boot Start End Blocks Id System /dev/sdb1 1 100 103669+ 83 Linux /dev/sdb2 101 200 103700 83 Linux Disk /dev/sdc: 2147 MB, 2147483648 bytes 67 heads, 62 sectors/track, 1009 cylinders Disk identifier: 0xe607e738 Device Boot Start End Blocks Id System /dev/sdc1 1 50 103819 83 Linux /dev/sdc2 51 100 103850 83 Linux /dev/sdc3 101 150 103850 83 Linux # ifconfig -a | grep HW eth0 Link encap:Ethernet HWaddr 00:0C:29:D2:B6:83 eth1 Link encap:Ethernet HWaddr 00:0C:29:D2:B6:8D # ls -l /sys/class/block | grep sd lrwxrwxrwx. 1 root root 0 Jan 19 10:41 sda -> ../../devices/pci0000:00/0000:00:15.0/0000:03:00.0/host2/target2:0:0/2:0:0:0/block/sda lrwxrwxrwx. 1 root root 0 Jan 19 10:41 sda1 -> ../../devices/pci0000:00/0000:00:15.0/0000:03:00.0/host2/target2:0:0/2:0:0:0/block/sda/sda1 lrwxrwxrwx. 1 root root 0 Jan 19 10:41 sda2 -> ../../devices/pci0000:00/0000:00:15.0/0000:03:00.0/host2/target2:0:0/2:0:0:0/block/sda/sda2 lrwxrwxrwx. 1 root root 0 Jan 19 10:41 sdb -> ../../devices/pci0000:00/0000:00:15.0/0000:03:00.0/host2/target2:0:1/2:0:1:0/block/sdb lrwxrwxrwx. 1 root root 0 Jan 19 10:41 sdb1 -> ../../devices/pci0000:00/0000:00:15.0/0000:03:00.0/host2/target2:0:1/2:0:1:0/block/sdb/sdb1 lrwxrwxrwx. 1 root root 0 Jan 19 10:41 sdb2 -> ../../devices/pci0000:00/0000:00:15.0/0000:03:00.0/host2/target2:0:1/2:0:1:0/block/sdb/sdb2 lrwxrwxrwx. 1 root root 0 Jan 19 10:41 sdc -> ../../devices/pci0000:00/0000:00:15.0/0000:03:00.0/host2/target2:0:2/2:0:2:0/block/sdc lrwxrwxrwx. 1 root root 0 Jan 19 10:41 sdc1 -> ../../devices/pci0000:00/0000:00:15.0/0000:03:00.0/host2/target2:0:2/2:0:2:0/block/sdc/sdc1 lrwxrwxrwx. 1 root root 0 Jan 19 10:41 sdc2 -> ../../devices/pci0000:00/0000:00:15.0/0000:03:00.0/host2/target2:0:2/2:0:2:0/block/sdc/sdc2 lrwxrwxrwx. 1 root root 0 Jan 19 10:41 sdc3 -> ../../devices/pci0000:00/0000:00:15.0/0000:03:00.0/host2/target2:0:2/2:0:2:0/block/sdc/sdc3 # ls -l /sys/class/net lrwxrwxrwx. 1 root root 0 Jan 19 10:42 eth0 -> ../../devices/pci0000:00/0000:00:16.0/0000:0b:00.0/net/eth0 lrwxrwxrwx. 1 root root 0 Jan 19 10:42 eth1 -> ../../devices/pci0000:00/0000:00:17.0/0000:13:00.0/net/eth1 lrwxrwxrwx. 1 root root 0 Jan 19 10:41 lo -> ../../devices/virtual/net/lo # cat /proc/partitions major minor #blocks name 8 0 41943040 sda 8 1 512000 sda1 8 2 41430016 sda2 8 16 1048576 sdb 8 17 103669 sdb1 8 18 103700 sdb2 8 32 2097152 sdc 8 33 103819 sdc1 8 34 103850 sdc2 8 35 103850 sdc3
ディスクを特定するための WWID
WWIDとは
特定のNICポートを特定するためにはMACアドレスを利用すればよい。ではディスクは?ディスクの場合は標準的な取得方法は決まっているが、何が取得できるかはそのディスクの実装に依存する、という理解に落ち着いた。
標準的な取得方法とは「scsi_id」コマンドによる取得であり、実装レベルでは SCSI INQUIRY 命令によるページ「0x83」または「0x80」の読み取りである。そこで各ディスクの実装者が返したいものを返す。ただしその目的からすればそれはユニークなものになっているべきである。それを「WWID(World Wide Identifier)」と総称している。つまり、ディスクを扱ううえではWWID=「scsi_id」の結果と考えればよい。
このWWIDであるが、ディスクの実装により以下のようにバラバラなものを返している。iSCSIの場合はターゲットを定義する側で自由に決められるため、最も安心で明確である。VMwareのVMDKの場合も設定ファイルに明示されるため安心である。ストレージ装置の場合や物理ディスクの場合にはベンダーごとにルールが違う可能性がある。そのため、scsi_idコマンドで何が得られているのか、それはユニークと言えるものなのか、構成変更があっても永続性があるのか、といったことは都度確認するべきだ。
VMwareの仮想ディスク(VMDK)のWWIDをOSに認識させる
vmdkファイル内の値を確認
VMDKを作成すると、vmdkファイル(.vmdk)が作成される。
このファイルの中身を表示すると以下のとおりである。
# Disk DescriptorFile version=1 encoding="UTF-8" CID=ab5eddd3 parentCID=ffffffff isNativeSnapshot="no" createType="vmfs" # Extent description RW 83886080 VMFS "vm04.garnet-flat.vmdk" # The Disk Data Base #DDB ddb.virtualHWVersion = "8" ddb.longContentID = "fd833e0a6a481e2ece459f15ab5eddd3" ddb.uuid = "60 00 C2 9d 74 9c ce f7-47 f3 31 72 3f b8 9e a5" ddb.geometry.cylinders = "5221" ddb.geometry.heads = "255" ddb.geometry.sectors = "63" ddb.adapterType = "lsilogic"
「ddb.uuid = "60 00 C2 9d 74 9c ce f7-47 f3 31 72 3f b8 9e a5"」部分がWWIDとして使用できる属性である。これは「Fibre Channel World Wide Names」にて示されている先頭4ビットが0110(6)の128ビット長のWWNである。これによれば、先頭4ビットは常に6であり、次の24ビットがベンダーを表すOUIである。上記のddb.uuidではOUIは000C29であり、これはまさに「VMwareのOUI」である。
先頭4ビットが0110の128ビット長のWWNでは残りの100ビットはベンダー次第で決めるものになっているため、(ここは単に想像だが)VMwareがVMDKを作成する時にこの100ビットをランダムに生成してユニーク性を確保していると考える。
NAA | Field2 | Field3 | Field4 |
---|---|---|---|
4 bits | 24 bits | 36 bits | 64 bits |
0110固定 | OUI | vendor sequence or serial number | vendor specific extension |
vmxファイルの disk.EnableUUID パラメータの有効化
vmdkファイル内のddb.uuidでWWIDとして使用できる値は生成されているが、そのままでは仮想マシンにそれを見せることができない。つまり、scsi_id が参照するページ「0x83」や「0x80」に何も定義されない状態になっている。
これを見せるか見せないかを制御するパラメータがvmxファイルの「disk.EnableUUID」であり、デフォルトでは false になっている。
デフォルトの false の状態で、OSのscsi_idコマンドの結果、および、scsi_idの結果得られるIDに基づきudevがデフォルトで生成する by-id のデバイスファイルの状態を確認する。scsi_id コマンドでは何も表示されないし、by-id では sda や sdb に対するものは作成されていない。
# scsi_id --whitelisted --replace-whitespace /dev/sda # scsi_id --whitelisted --replace-whitespace --page=0x83 /dev/sda # scsi_id --whitelisted --replace-whitespace --page=0x80 /dev/sda # ls -l /dev/disk/by-id total 0 lrwxrwxrwx 1 root root 10 Jan 26 07:10 dm-name-vg_hostname-lv_root -> ../../dm-0 lrwxrwxrwx 1 root root 10 Jan 26 07:10 dm-name-vg_hostname-lv_swap -> ../../dm-1 lrwxrwxrwx 1 root root 10 Jan 26 07:10 dm-uuid-LVM-a9TffNHp9lmmy0FDm7S0lb9T5e4poZruhYGCJ4EF3QBqWgv3AItSn0TqDHYOxGwU -> ../../dm-3 lrwxrwxrwx 1 root root 10 Jan 26 07:10 dm-uuid-LVM-jc3er1PPOn0cgOkZOsqlZ3vyAt1imqWB7g6eDXG2KMDw2l6TUlJTxCHjLBh7zT8m -> ../../dm-0 lrwxrwxrwx 1 root root 10 Jan 26 07:10 dm-uuid-LVM-jc3er1PPOn0cgOkZOsqlZ3vyAt1imqWBWZymGcujhaeM9W4LD4Z16F1nHk1xe5aQ -> ../../dm-1 lrwxrwxrwx 1 root root 10 Jan 26 07:10 dm-uuid-LVM-qpuhuOcPMaicwoqvcFpecHfJIDF8vSSbYae3yya5Kxx5SLlr4gkD8VlQcjaSByR9 -> ../../dm-2
true の状態で、再度同じ確認を行う。scsi_id の結果として「36000c29d749ccef747f331723fb89ea5」が表示された。先頭の 3 を無視するとddb.uuidの値そのものである。また、scsi_id により値が得られるようになったため、by-id で sda, sdb, sdc およびそれぞれのパーティションに対するデバイス名が作成されている(いずれも scsi_id を経由して得られる ddb.uuid の値に基づく名前である)。
# scsi_id --whitelisted --replace-whitespace /dev/sda 36000c29d749ccef747f331723fb89ea5 # scsi_id --whitelisted --replace-whitespace --page=0x83 /dev/sda 36000c29d749ccef747f331723fb89ea5 # scsi_id --whitelisted --replace-whitespace --page=0x80 /dev/sda SVMware_Virtual_disk_6000c29d749ccef747f331723fb89ea5 # ls -l /dev/disk/by-id total 0 lrwxrwxrwx 1 root root 10 Jan 26 07:30 dm-name-vg_hostname-lv_root -> ../../dm-0 lrwxrwxrwx 1 root root 10 Jan 26 07:30 dm-name-vg_hostname-lv_swap -> ../../dm-1 lrwxrwxrwx 1 root root 10 Jan 26 07:30 dm-uuid-LVM-a9TffNHp9lmmy0FDm7S0lb9T5e4poZruhYGCJ4EF3QBqWgv3AItSn0TqDHYOxGwU -> ../../dm-3 lrwxrwxrwx 1 root root 10 Jan 26 07:30 dm-uuid-LVM-jc3er1PPOn0cgOkZOsqlZ3vyAt1imqWB7g6eDXG2KMDw2l6TUlJTxCHjLBh7zT8m -> ../../dm-0 lrwxrwxrwx 1 root root 10 Jan 26 07:30 dm-uuid-LVM-jc3er1PPOn0cgOkZOsqlZ3vyAt1imqWBWZymGcujhaeM9W4LD4Z16F1nHk1xe5aQ -> ../../dm-1 lrwxrwxrwx 1 root root 10 Jan 26 07:30 dm-uuid-LVM-qpuhuOcPMaicwoqvcFpecHfJIDF8vSSbYae3yya5Kxx5SLlr4gkD8VlQcjaSByR9 -> ../../dm-2 lrwxrwxrwx 1 root root 9 Jan 26 07:30 scsi-36000c292de4fce03a7cee1cb456200ae -> ../../sdc lrwxrwxrwx 1 root root 10 Jan 26 07:30 scsi-36000c292de4fce03a7cee1cb456200ae-part1 -> ../../sdc1 lrwxrwxrwx 1 root root 10 Jan 26 07:30 scsi-36000c292de4fce03a7cee1cb456200ae-part2 -> ../../sdc2 lrwxrwxrwx 1 root root 10 Jan 26 07:30 scsi-36000c292de4fce03a7cee1cb456200ae-part3 -> ../../sdc3 lrwxrwxrwx 1 root root 9 Jan 26 07:30 scsi-36000c29aefc196086ce932ef4722a0af -> ../../sdb lrwxrwxrwx 1 root root 10 Jan 26 07:30 scsi-36000c29aefc196086ce932ef4722a0af-part1 -> ../../sdb1 lrwxrwxrwx 1 root root 10 Jan 26 07:30 scsi-36000c29aefc196086ce932ef4722a0af-part2 -> ../../sdb2 lrwxrwxrwx 1 root root 9 Jan 26 07:30 scsi-36000c29d749ccef747f331723fb89ea5 -> ../../sda lrwxrwxrwx 1 root root 10 Jan 26 07:30 scsi-36000c29d749ccef747f331723fb89ea5-part1 -> ../../sda1 lrwxrwxrwx 1 root root 10 Jan 26 07:30 scsi-36000c29d749ccef747f331723fb89ea5-part2 -> ../../sda2 lrwxrwxrwx 1 root root 9 Jan 26 07:30 wwn-0x6000c292de4fce03a7cee1cb456200ae -> ../../sdc lrwxrwxrwx 1 root root 10 Jan 26 07:30 wwn-0x6000c292de4fce03a7cee1cb456200ae-part1 -> ../../sdc1 lrwxrwxrwx 1 root root 10 Jan 26 07:30 wwn-0x6000c292de4fce03a7cee1cb456200ae-part2 -> ../../sdc2 lrwxrwxrwx 1 root root 10 Jan 26 07:30 wwn-0x6000c292de4fce03a7cee1cb456200ae-part3 -> ../../sdc3 lrwxrwxrwx 1 root root 9 Jan 26 07:30 wwn-0x6000c29aefc196086ce932ef4722a0af -> ../../sdb lrwxrwxrwx 1 root root 10 Jan 26 07:30 wwn-0x6000c29aefc196086ce932ef4722a0af-part1 -> ../../sdb1 lrwxrwxrwx 1 root root 10 Jan 26 07:30 wwn-0x6000c29aefc196086ce932ef4722a0af-part2 -> ../../sdb2 lrwxrwxrwx 1 root root 9 Jan 26 07:30 wwn-0x6000c29d749ccef747f331723fb89ea5 -> ../../sda lrwxrwxrwx 1 root root 10 Jan 26 07:30 wwn-0x6000c29d749ccef747f331723fb89ea5-part1 -> ../../sda1 lrwxrwxrwx 1 root root 10 Jan 26 07:30 wwn-0x6000c29d749ccef747f331723fb89ea5-part2 -> ../../sda2
udevのルール作成
scsi_id の結果は ENV{ID_SERIAL} に格納されるため、70-persistent-disk.rules を以下のとおりに作成する。
これまで確認して来た sda に加えて、sdb, sdc についても scsi_id を確認して udev のルールに定義する。
# cat /etc/udev/rules.d/70-persistent-disk.rules KERNEL=="sd*", BUS=="scsi", ENV{ID_SERIAL}=="36000c29d749ccef747f331723fb89ea5", NAME="sda%n" # system disk to /dev/sda KERNEL=="sd*", BUS=="scsi", ENV{ID_SERIAL}=="36000c29aefc196086ce932ef4722a0af", NAME="sdb%n" # disk of 1GB to /dev/sdb KERNEL=="sd*", BUS=="scsi", ENV{ID_SERIAL}=="36000c292de4fce03a7cee1cb456200ae", NAME="sdc%n" # disk of 2GB to /dev/sdc
再起動後に、udev 設定前と同じ確認を行う。特に変化は無い(認識順が変化しないため、素直な対応で作成したudevのルールの効果は見えない)。
# ls -l /dev/sd* brw-rw---- 1 root disk 8, 0 Jan 26 08:24 /dev/sda brw-rw---- 1 root disk 8, 1 Jan 26 08:24 /dev/sda1 brw-rw---- 1 root disk 8, 2 Jan 26 08:24 /dev/sda2 brw-rw---- 1 root disk 8, 16 Jan 26 08:24 /dev/sdb brw-rw---- 1 root disk 8, 17 Jan 26 08:24 /dev/sdb1 brw-rw---- 1 root disk 8, 18 Jan 26 08:24 /dev/sdb2 brw-rw---- 1 root disk 8, 32 Jan 26 08:24 /dev/sdc brw-rw---- 1 root disk 8, 33 Jan 26 08:24 /dev/sdc1 brw-rw---- 1 root disk 8, 34 Jan 26 08:24 /dev/sdc2 brw-rw---- 1 root disk 8, 35 Jan 26 08:24 /dev/sdc3 # fdisk -l Disk /dev/sda: 42.9 GB, 42949672960 bytes 64 heads, 32 sectors/track, 40960 cylinders Disk identifier: 0x00034b9d Device Boot Start End Blocks Id System /dev/sda1 * 2 501 512000 83 Linux Partition 1 does not end on cylinder boundary. /dev/sda2 502 40960 41430016 8e Linux LVM Partition 2 does not end on cylinder boundary. Disk /dev/sdb: 1073 MB, 1073741824 bytes 34 heads, 61 sectors/track, 1011 cylinders Disk identifier: 0xe64d8f76 Device Boot Start End Blocks Id System /dev/sdb1 1 100 103669+ 83 Linux /dev/sdb2 101 200 103700 83 Linux Disk /dev/sdc: 2147 MB, 2147483648 bytes 67 heads, 62 sectors/track, 1009 cylinders Disk identifier: 0xe607e738 Device Boot Start End Blocks Id System /dev/sdc1 1 50 103819 83 Linux /dev/sdc2 51 100 103850 83 Linux /dev/sdc3 101 150 103850 83 Linux # ifconfig -a | grep HW eth0 Link encap:Ethernet HWaddr 00:0C:29:D2:B6:83 eth1 Link encap:Ethernet HWaddr 00:0C:29:D2:B6:8D # ls -l /sys/class/block | grep sd lrwxrwxrwx 1 root root 0 Jan 26 08:24 sda -> ../../devices/pci0000:00/0000:00:15.0/0000:03:00.0/host2/target2:0:0/2:0:0:0/block/sda lrwxrwxrwx 1 root root 0 Jan 26 08:24 sda1 -> ../../devices/pci0000:00/0000:00:15.0/0000:03:00.0/host2/target2:0:0/2:0:0:0/block/sda/sda1 lrwxrwxrwx 1 root root 0 Jan 26 08:24 sda2 -> ../../devices/pci0000:00/0000:00:15.0/0000:03:00.0/host2/target2:0:0/2:0:0:0/block/sda/sda2 lrwxrwxrwx 1 root root 0 Jan 26 08:24 sdb -> ../../devices/pci0000:00/0000:00:15.0/0000:03:00.0/host2/target2:0:1/2:0:1:0/block/sdb lrwxrwxrwx 1 root root 0 Jan 26 08:24 sdb1 -> ../../devices/pci0000:00/0000:00:15.0/0000:03:00.0/host2/target2:0:1/2:0:1:0/block/sdb/sdb1 lrwxrwxrwx 1 root root 0 Jan 26 08:24 sdb2 -> ../../devices/pci0000:00/0000:00:15.0/0000:03:00.0/host2/target2:0:1/2:0:1:0/block/sdb/sdb2 lrwxrwxrwx 1 root root 0 Jan 26 08:24 sdc -> ../../devices/pci0000:00/0000:00:15.0/0000:03:00.0/host2/target2:0:2/2:0:2:0/block/sdc lrwxrwxrwx 1 root root 0 Jan 26 08:24 sdc1 -> ../../devices/pci0000:00/0000:00:15.0/0000:03:00.0/host2/target2:0:2/2:0:2:0/block/sdc/sdc1 lrwxrwxrwx 1 root root 0 Jan 26 08:24 sdc2 -> ../../devices/pci0000:00/0000:00:15.0/0000:03:00.0/host2/target2:0:2/2:0:2:0/block/sdc/sdc2 lrwxrwxrwx 1 root root 0 Jan 26 08:24 sdc3 -> ../../devices/pci0000:00/0000:00:15.0/0000:03:00.0/host2/target2:0:2/2:0:2:0/block/sdc/sdc3 # ls -l /sys/class/net | grep eth lrwxrwxrwx 1 root root 0 Jan 26 08:24 eth0 -> ../../devices/pci0000:00/0000:00:16.0/0000:0b:00.0/net/eth0 lrwxrwxrwx 1 root root 0 Jan 26 08:24 eth1 -> ../../devices/pci0000:00/0000:00:17.0/0000:13:00.0/net/eth1 # ls -l /sys/class/net lrwxrwxrwx 1 root root 0 Jan 26 08:24 eth0 -> ../../devices/pci0000:00/0000:00:16.0/0000:0b:00.0/net/eth0 lrwxrwxrwx 1 root root 0 Jan 26 08:24 eth1 -> ../../devices/pci0000:00/0000:00:17.0/0000:13:00.0/net/eth1 lrwxrwxrwx 1 root root 0 Jan 26 08:24 lo -> ../../devices/virtual/net/lo # cat /proc/partitions major minor #blocks name 8 0 41943040 sda 8 1 512000 sda1 8 2 41430016 sda2 8 16 1048576 sdb 8 17 103669 sdb1 8 18 103700 sdb2 8 32 2097152 sdc 8 33 103819 sdc1 8 34 103850 sdc2 8 35 103850 sdc3
ディスク認識順の入れ替え検証
- SCSIコントローラ0
- ディスク1:(0:0) に接続する。変更無し。
- ディスク2:(0:1) から(0:3) に接続位置を変更する。
- ディスク3:(0:2) に接続する。変更無し。
ディスクの接続位置を変更し、ディスク1, ディスク3, ディスク2 の順番で認識させるようにして起動する。これまでと同じ確認を行った結果は以下のとおり。
# ls -l /dev/sd* brw-rw---- 1 root disk 8, 0 Jan 26 08:41 /dev/sda brw-rw---- 1 root disk 8, 1 Jan 26 08:41 /dev/sda1 brw-rw---- 1 root disk 8, 2 Jan 26 08:41 /dev/sda2 brw-rw---- 1 root disk 8, 32 Jan 26 08:41 /dev/sdb brw-rw---- 1 root disk 8, 33 Jan 26 08:41 /dev/sdb1 brw-rw---- 1 root disk 8, 34 Jan 26 08:41 /dev/sdb2 brw-rw---- 1 root disk 8, 16 Jan 26 08:41 /dev/sdc brw-rw---- 1 root disk 8, 17 Jan 26 08:41 /dev/sdc1 brw-rw---- 1 root disk 8, 18 Jan 26 08:41 /dev/sdc2 brw-rw---- 1 root disk 8, 19 Jan 26 08:41 /dev/sdc3 # fdisk -l Disk /dev/sda: 42.9 GB, 42949672960 bytes 64 heads, 32 sectors/track, 40960 cylinders Disk identifier: 0x00034b9d Device Boot Start End Blocks Id System /dev/sda1 * 2 501 512000 83 Linux /dev/sda2 502 40960 41430016 8e Linux LVM Disk /dev/sdb: 1073 MB, 1073741824 bytes 34 heads, 61 sectors/track, 1011 cylinders Disk identifier: 0xe64d8f76 Device Boot Start End Blocks Id System /dev/sdb1 1 100 103669+ 83 Linux /dev/sdb2 101 200 103700 83 Linux Disk /dev/sdc: 2147 MB, 2147483648 bytes 67 heads, 62 sectors/track, 1009 cylinders Disk identifier: 0xe607e738 Device Boot Start End Blocks Id System /dev/sdc1 1 50 103819 83 Linux /dev/sdc2 51 100 103850 83 Linux /dev/sdc3 101 150 103850 83 Linux # ifconfig -a | grep HW eth0 Link encap:Ethernet HWaddr 00:0C:29:D2:B6:83 eth1 Link encap:Ethernet HWaddr 00:0C:29:D2:B6:8D # ls -l /sys/class/block | grep sd lrwxrwxrwx 1 root root 0 Jan 26 08:41 sda -> ../../devices/pci0000:00/0000:00:15.0/0000:03:00.0/host2/target2:0:0/2:0:0:0/block/sda lrwxrwxrwx 1 root root 0 Jan 26 08:41 sda1 -> ../../devices/pci0000:00/0000:00:15.0/0000:03:00.0/host2/target2:0:0/2:0:0:0/block/sda/sda1 lrwxrwxrwx 1 root root 0 Jan 26 08:41 sda2 -> ../../devices/pci0000:00/0000:00:15.0/0000:03:00.0/host2/target2:0:0/2:0:0:0/block/sda/sda2 lrwxrwxrwx 1 root root 0 Jan 26 08:41 sdb -> ../../devices/pci0000:00/0000:00:15.0/0000:03:00.0/host2/target2:0:2/2:0:2:0/block/sdb lrwxrwxrwx 1 root root 0 Jan 26 08:41 sdb1 -> ../../devices/pci0000:00/0000:00:15.0/0000:03:00.0/host2/target2:0:2/2:0:2:0/block/sdb/sdb1 lrwxrwxrwx 1 root root 0 Jan 26 08:41 sdb2 -> ../../devices/pci0000:00/0000:00:15.0/0000:03:00.0/host2/target2:0:2/2:0:2:0/block/sdb/sdb2 lrwxrwxrwx 1 root root 0 Jan 26 08:41 sdb3 -> ../../devices/pci0000:00/0000:00:15.0/0000:03:00.0/host2/target2:0:2/2:0:2:0/block/sdb/sdb3 lrwxrwxrwx 1 root root 0 Jan 26 08:41 sdc -> ../../devices/pci0000:00/0000:00:15.0/0000:03:00.0/host2/target2:0:3/2:0:3:0/block/sdc lrwxrwxrwx 1 root root 0 Jan 26 08:41 sdc1 -> ../../devices/pci0000:00/0000:00:15.0/0000:03:00.0/host2/target2:0:3/2:0:3:0/block/sdc/sdc1 lrwxrwxrwx 1 root root 0 Jan 26 08:41 sdc2 -> ../../devices/pci0000:00/0000:00:15.0/0000:03:00.0/host2/target2:0:3/2:0:3:0/block/sdc/sdc2 # ls -l /sys/class/net lrwxrwxrwx 1 root root 0 Jan 26 08:41 eth0 -> ../../devices/pci0000:00/0000:00:16.0/0000:0b:00.0/net/eth0 lrwxrwxrwx 1 root root 0 Jan 26 08:41 eth1 -> ../../devices/pci0000:00/0000:00:17.0/0000:13:00.0/net/eth1 lrwxrwxrwx 1 root root 0 Jan 26 08:41 lo -> ../../devices/virtual/net/lo # cat /proc/partitions major minor #blocks name 8 0 41943040 sda 8 1 512000 sda1 8 2 41430016 sda2 8 16 2097152 sdb 8 17 103819 sdb1 8 18 103850 sdb2 8 19 103850 sdb3 8 32 1048576 sdc 8 33 103669 sdc1 8 34 103700 sdc2
この結果から以下の事がわかる。
- ls -l /dev/sd* の結果から、/dev 配下のデバイスファイルは sdb のパーティションが2個(sdb1,sdb2)、sdc のパーティションが3個(sdc1,sdc2,sdc3) となっており、認識順を変更する前と同じ状態となっている。fdisk -l の結果も同様である。udev が効果を発揮しているようである。
- ls -l /dev/sd* の結果では、デバイスのメジャー番号とマイナー番号をよくみると、sdb のマイナー番号は 32、sdc のマイナー番号は 16 と逆転している。
- ls -l /sys/class/block および cat /proc/partitions の結果では、sdb のパーティションが3個(sdb1, sdb2, sdb3)、sdc のパーティションが2個(sdc1, sdc2)となっている。/sys と /proc (つまりカーネルの認識) 上は sdb がパーティションが3個のディスクを指し、sdc がパーティションが2個のディスクを指しているということだ。
- カーネルは常に最初に認識したディスクを「sda」とし、次が「sdb」、次が「sdc」としている。
- udevでどうにかなるものではない。
- カーネルにとって「sda」は必ず「1番目」、「sdb」は必ず「2番目」なのである。
- カーネル内で「sdb」として認識されているディスクについて、/dev 下のデバイスファイルを作成するために udev に情報が連携されたタイミングで、udev が「このENV{ID_SERIAL}(=WWID=scsi_id)を持つディスクは sdc だ!」と名前を変更したため、カーネル内の「sdb」は /dev/sdc として作成される。
- カーネル内で「sdc」として認識されているディスクについても同様。
udevの定義により、元々のディスクと /dev/sdb, /dev/sdc の対応は維持できているが、それはあくまで /dev の配下のみのこと。カーネルの認識は入れ替わっている。そのため、カーネルの認識を表す /proc や /sys では本当の認識状況が現れている。ここにどうしても気持ち悪さやわかりにくさを感じるのである。
おそらく何も知らない人がこの入れ替えに起因するトラブルに巻き込まれたら、「なんでそんな不整合状態みたいなことにしてるんだ!」と怒ることだろう。たしかに、カーネル視点の sdb と /dev/sdb が指すディスクが違う、といわれたら普通は混乱する。よって、この方法をとることはよくないこと、udevの濫用であると考える。
特定のディスクを指すシンボリックリンクをudevで作成する
カーネル内の sda, sdb, sdc は素直に /dev/sda, /dev/sdb, /dev/sdc に対応付け、それとは別に特定のディスクを指すシンボリックリンクを追加するアプローチを試してみる。
/dev 配下に作成するシンボリックリンクは /dev/disk1, /dev/disk2, /dev/disk3 とする。
udevのルール作成
1GBのディスクは常に /dev/disk2、2GBのディスクは常に /dev/disk3 のシンボリックリンクを作成する定義とする。
# cat /etc/udev/rules.d/70-persistent-disk.rules KERNEL=="sd*", BUS=="scsi", ENV{ID_SERIAL}=="36000c29d749ccef747f331723fb89ea5", SYMLINK+="disk1%n" # system disk to /dev/disk1 KERNEL=="sd*", BUS=="scsi", ENV{ID_SERIAL}=="36000c29aefc196086ce932ef4722a0af", SYMLINK+="disk2%n" # disk of 1GB to /dev/disk2 KERNEL=="sd*", BUS=="scsi", ENV{ID_SERIAL}=="36000c292de4fce03a7cee1cb456200ae", SYMLINK+="disk3%n" # disk of 2GB to /dev/disk3
ディスクの接続を最初の状態に戻しての確認
ディスクの接続を最初の状態にもどしておく。
- SCSIコントローラ0
- ディスク1:(0:0) に接続する。
- ディスク2:(0:1) に接続する。
- ディスク3:(0:2) に接続する。
起動して確認をおこなった結果は以下のとおり。/dev/disk2 から /dev/sdb へ、/dev/disk3 から /dev/sdc へのシンボリックリンクが確認できる。また、カーネル内では disk1, disk2, disk3 といったものは一切出て来ない。あくまで udev が作成した /dev 配下のシンボリックリンクでありそれ以上ではない。
# ls -l /dev/sd* /dev/disk* lrwxrwxrwx 1 root root 3 Jan 26 10:22 /dev/disk1 -> sda lrwxrwxrwx 1 root root 4 Jan 26 10:22 /dev/disk11 -> sda1 lrwxrwxrwx 1 root root 4 Jan 26 10:22 /dev/disk12 -> sda2 lrwxrwxrwx 1 root root 3 Jan 26 10:22 /dev/disk2 -> sdb lrwxrwxrwx 1 root root 4 Jan 26 10:22 /dev/disk21 -> sdb1 lrwxrwxrwx 1 root root 4 Jan 26 10:22 /dev/disk22 -> sdb2 lrwxrwxrwx 1 root root 3 Jan 26 10:22 /dev/disk3 -> sdc lrwxrwxrwx 1 root root 4 Jan 26 10:22 /dev/disk31 -> sdc1 lrwxrwxrwx 1 root root 4 Jan 26 10:22 /dev/disk32 -> sdc2 lrwxrwxrwx 1 root root 4 Jan 26 10:22 /dev/disk33 -> sdc3 brw-rw---- 1 root disk 8, 0 Jan 26 10:22 /dev/sda brw-rw---- 1 root disk 8, 1 Jan 26 10:22 /dev/sda1 brw-rw---- 1 root disk 8, 2 Jan 26 10:22 /dev/sda2 brw-rw---- 1 root disk 8, 16 Jan 26 10:22 /dev/sdb brw-rw---- 1 root disk 8, 17 Jan 26 10:22 /dev/sdb1 brw-rw---- 1 root disk 8, 18 Jan 26 10:22 /dev/sdb2 brw-rw---- 1 root disk 8, 32 Jan 26 10:22 /dev/sdc brw-rw---- 1 root disk 8, 33 Jan 26 10:22 /dev/sdc1 brw-rw---- 1 root disk 8, 34 Jan 26 10:22 /dev/sdc2 brw-rw---- 1 root disk 8, 35 Jan 26 10:22 /dev/sdc3 # fdisk -l Disk /dev/sda: 42.9 GB, 42949672960 bytes 64 heads, 32 sectors/track, 40960 cylinders Disk identifier: 0x00034b9d Device Boot Start End Blocks Id System /dev/sda1 * 2 501 512000 83 Linux /dev/sda2 502 40960 41430016 8e Linux LVM Disk /dev/sdb: 1073 MB, 1073741824 bytes 34 heads, 61 sectors/track, 1011 cylinders Disk identifier: 0xe64d8f76 Device Boot Start End Blocks Id System /dev/sdb1 1 100 103669+ 83 Linux /dev/sdb2 101 200 103700 83 Linux Disk /dev/sdc: 2147 MB, 2147483648 bytes 67 heads, 62 sectors/track, 1009 cylinders Disk identifier: 0xe607e738 Device Boot Start End Blocks Id System /dev/sdc1 1 50 103819 83 Linux /dev/sdc2 51 100 103850 83 Linux /dev/sdc3 101 150 103850 83 Linux # ifconfig -a | grep HW eth0 Link encap:Ethernet HWaddr 00:0C:29:D2:B6:83 eth1 Link encap:Ethernet HWaddr 00:0C:29:D2:B6:8D # ls -l /sys/class/block | grep sd lrwxrwxrwx 1 root root 0 Jan 26 10:22 sda -> ../../devices/pci0000:00/0000:00:15.0/0000:03:00.0/host2/target2:0:0/2:0:0:0/block/sda lrwxrwxrwx 1 root root 0 Jan 26 10:22 sda1 -> ../../devices/pci0000:00/0000:00:15.0/0000:03:00.0/host2/target2:0:0/2:0:0:0/block/sda/sda1 lrwxrwxrwx 1 root root 0 Jan 26 10:22 sda2 -> ../../devices/pci0000:00/0000:00:15.0/0000:03:00.0/host2/target2:0:0/2:0:0:0/block/sda/sda2 lrwxrwxrwx 1 root root 0 Jan 26 10:22 sdb -> ../../devices/pci0000:00/0000:00:15.0/0000:03:00.0/host2/target2:0:1/2:0:1:0/block/sdb lrwxrwxrwx 1 root root 0 Jan 26 10:22 sdb1 -> ../../devices/pci0000:00/0000:00:15.0/0000:03:00.0/host2/target2:0:1/2:0:1:0/block/sdb/sdb1 lrwxrwxrwx 1 root root 0 Jan 26 10:22 sdb2 -> ../../devices/pci0000:00/0000:00:15.0/0000:03:00.0/host2/target2:0:1/2:0:1:0/block/sdb/sdb2 lrwxrwxrwx 1 root root 0 Jan 26 10:22 sdc -> ../../devices/pci0000:00/0000:00:15.0/0000:03:00.0/host2/target2:0:2/2:0:2:0/block/sdc lrwxrwxrwx 1 root root 0 Jan 26 10:22 sdc1 -> ../../devices/pci0000:00/0000:00:15.0/0000:03:00.0/host2/target2:0:2/2:0:2:0/block/sdc/sdc1 lrwxrwxrwx 1 root root 0 Jan 26 10:22 sdc2 -> ../../devices/pci0000:00/0000:00:15.0/0000:03:00.0/host2/target2:0:2/2:0:2:0/block/sdc/sdc2 lrwxrwxrwx 1 root root 0 Jan 26 10:22 sdc3 -> ../../devices/pci0000:00/0000:00:15.0/0000:03:00.0/host2/target2:0:2/2:0:2:0/block/sdc/sdc3 # ls -l /sys/class/net lrwxrwxrwx 1 root root 0 Jan 26 10:22 eth0 -> ../../devices/pci0000:00/0000:00:16.0/0000:0b:00.0/net/eth0 lrwxrwxrwx 1 root root 0 Jan 26 10:22 eth1 -> ../../devices/pci0000:00/0000:00:17.0/0000:13:00.0/net/eth1 lrwxrwxrwx 1 root root 0 Jan 26 10:22 lo -> ../../devices/virtual/net/lo # cat /proc/partitions major minor #blocks name 8 0 41943040 sda 8 1 512000 sda1 8 2 41430016 sda2 8 16 1048576 sdb 8 17 103669 sdb1 8 18 103700 sdb2 8 32 2097152 sdc 8 33 103819 sdc1 8 34 103850 sdc2 8 35 103850 sdc3
# fdisk -l /dev/disk2 Disk /dev/disk2: 1073 MB, 1073741824 bytes 34 heads, 61 sectors/track, 1011 cylinders Disk identifier: 0xe64d8f76 Device Boot Start End Blocks Id System /dev/disk2p1 1 100 103669+ 83 Linux /dev/disk2p2 101 200 103700 83 Linux # fdisk -l /dev/disk3 Disk /dev/disk3: 2147 MB, 2147483648 bytes 67 heads, 62 sectors/track, 1009 cylinders Disk identifier: 0xe607e738 Device Boot Start End Blocks Id System /dev/disk3p1 1 50 103819 83 Linux /dev/disk3p2 51 100 103850 83 Linux /dev/disk3p3 101 150 103850 83 Linux
ディスク認識順の入れ替え検証
先の検証と同様にディスクの接続位置を変更し、認識順を変更する。
- SCSIコントローラ0
- ディスク1:(0:0) に接続する。変更無し。
- ディスク2:(0:1) から(0:3) に接続位置を変更する。
- ディスク3:(0:2) に接続する。変更無し。
起動して確認をおこなった結果は以下のとおり。
# ls -l /dev/sd* /dev/disk* lrwxrwxrwx 1 root root 3 Jan 26 10:44 /dev/disk1 -> sda lrwxrwxrwx 1 root root 4 Jan 26 10:44 /dev/disk11 -> sda1 lrwxrwxrwx 1 root root 4 Jan 26 10:44 /dev/disk12 -> sda2 lrwxrwxrwx 1 root root 3 Jan 26 10:44 /dev/disk2 -> sdc lrwxrwxrwx 1 root root 4 Jan 26 10:44 /dev/disk21 -> sdc1 lrwxrwxrwx 1 root root 4 Jan 26 10:44 /dev/disk22 -> sdc2 lrwxrwxrwx 1 root root 3 Jan 26 10:44 /dev/disk3 -> sdb lrwxrwxrwx 1 root root 4 Jan 26 10:44 /dev/disk31 -> sdb1 lrwxrwxrwx 1 root root 4 Jan 26 10:44 /dev/disk32 -> sdb2 lrwxrwxrwx 1 root root 4 Jan 26 10:44 /dev/disk33 -> sdb3 brw-rw---- 1 root disk 8, 0 Jan 26 10:44 /dev/sda brw-rw---- 1 root disk 8, 1 Jan 26 10:44 /dev/sda1 brw-rw---- 1 root disk 8, 2 Jan 26 10:44 /dev/sda2 brw-rw---- 1 root disk 8, 16 Jan 26 10:44 /dev/sdb brw-rw---- 1 root disk 8, 17 Jan 26 10:44 /dev/sdb1 brw-rw---- 1 root disk 8, 18 Jan 26 10:44 /dev/sdb2 brw-rw---- 1 root disk 8, 19 Jan 26 10:44 /dev/sdb3 brw-rw---- 1 root disk 8, 32 Jan 26 10:44 /dev/sdc brw-rw---- 1 root disk 8, 33 Jan 26 10:44 /dev/sdc1 brw-rw---- 1 root disk 8, 34 Jan 26 10:44 /dev/sdc2 # ifconfig -a | grep HW eth0 Link encap:Ethernet HWaddr 00:0C:29:D2:B6:83 eth1 Link encap:Ethernet HWaddr 00:0C:29:D2:B6:8D # ls -l /sys/class/block | grep sd lrwxrwxrwx 1 root root 0 Jan 26 10:44 sda -> ../../devices/pci0000:00/0000:00:15.0/0000:03:00.0/host2/target2:0:0/2:0:0:0/block/sda lrwxrwxrwx 1 root root 0 Jan 26 10:44 sda1 -> ../../devices/pci0000:00/0000:00:15.0/0000:03:00.0/host2/target2:0:0/2:0:0:0/block/sda/sda1 lrwxrwxrwx 1 root root 0 Jan 26 10:44 sda2 -> ../../devices/pci0000:00/0000:00:15.0/0000:03:00.0/host2/target2:0:0/2:0:0:0/block/sda/sda2 lrwxrwxrwx 1 root root 0 Jan 26 10:44 sdb -> ../../devices/pci0000:00/0000:00:15.0/0000:03:00.0/host2/target2:0:2/2:0:2:0/block/sdb lrwxrwxrwx 1 root root 0 Jan 26 10:44 sdb1 -> ../../devices/pci0000:00/0000:00:15.0/0000:03:00.0/host2/target2:0:2/2:0:2:0/block/sdb/sdb1 lrwxrwxrwx 1 root root 0 Jan 26 10:44 sdb2 -> ../../devices/pci0000:00/0000:00:15.0/0000:03:00.0/host2/target2:0:2/2:0:2:0/block/sdb/sdb2 lrwxrwxrwx 1 root root 0 Jan 26 10:44 sdb3 -> ../../devices/pci0000:00/0000:00:15.0/0000:03:00.0/host2/target2:0:2/2:0:2:0/block/sdb/sdb3 lrwxrwxrwx 1 root root 0 Jan 26 10:44 sdc -> ../../devices/pci0000:00/0000:00:15.0/0000:03:00.0/host2/target2:0:3/2:0:3:0/block/sdc lrwxrwxrwx 1 root root 0 Jan 26 10:44 sdc1 -> ../../devices/pci0000:00/0000:00:15.0/0000:03:00.0/host2/target2:0:3/2:0:3:0/block/sdc/sdc1 lrwxrwxrwx 1 root root 0 Jan 26 10:44 sdc2 -> ../../devices/pci0000:00/0000:00:15.0/0000:03:00.0/host2/target2:0:3/2:0:3:0/block/sdc/sdc2 # ls -l /sys/class/net lrwxrwxrwx 1 root root 0 Jan 26 10:44 eth0 -> ../../devices/pci0000:00/0000:00:16.0/0000:0b:00.0/net/eth0 lrwxrwxrwx 1 root root 0 Jan 26 10:44 eth1 -> ../../devices/pci0000:00/0000:00:17.0/0000:13:00.0/net/eth1 lrwxrwxrwx 1 root root 0 Jan 26 10:44 lo -> ../../devices/virtual/net/lo # cat /proc/partitions major minor #blocks name 8 0 41943040 sda 8 1 512000 sda1 8 2 41430016 sda2 8 16 2097152 sdb 8 17 103819 sdb1 8 18 103850 sdb2 8 19 103850 sdb3 8 32 1048576 sdc 8 33 103669 sdc1 8 34 103700 sdc2
# fdisk -l /dev/disk2 Disk /dev/disk2: 1073 MB, 1073741824 bytes 34 heads, 61 sectors/track, 1011 cylinders Disk identifier: 0xe64d8f76 Device Boot Start End Blocks Id System /dev/disk2p1 1 100 103669+ 83 Linux /dev/disk2p2 101 200 103700 83 Linux # fdisk -l /dev/disk3 Disk /dev/disk3: 2147 MB, 2147483648 bytes 67 heads, 62 sectors/track, 1009 cylinders Disk identifier: 0xe607e738 Device Boot Start End Blocks Id System /dev/disk3p1 1 50 103819 83 Linux /dev/disk3p2 51 100 103850 83 Linux /dev/disk3p3 101 150 103850 83 Linux
NICの場合
NICの場合は /dev/eth0 などがあるわけではないため、ディスクとはやや状況が異なる。
変更前の状態確認
eth0 は PCI の 0B:00.0 のNICを指している。eth1 は 13:00.0 のNICである。dmesg 上ではNICに関するudevの動作(入れ替え)は確認できない。
# ls -l /sys/class/net lrwxrwxrwx 1 root root 0 Jan 26 10:44 eth0 -> ../../devices/pci0000:00/0000:00:16.0/0000:0b:00.0/net/eth0 lrwxrwxrwx 1 root root 0 Jan 26 10:44 eth1 -> ../../devices/pci0000:00/0000:00:17.0/0000:13:00.0/net/eth1 lrwxrwxrwx 1 root root 0 Jan 26 10:44 lo -> ../../devices/virtual/net/lo # dmesg | grep eth eth0: NIC Link is Up 10000 Mbps eth1: NIC Link is Up 10000 Mbps eth0: intr type 3, mode 0, 2 vectors allocated eth0: NIC Link is Up 10000 Mbps eth0: no IPv6 routers present
認識順変更後の状態確認
eth0 は PCI の 13:00.0 のNICを指している。eth1 は 0B:00.0 のNICである。dmesg 上ではNICに関するudevの動作(入れ替え)が確認できる。/sys 上でも eth0 と eth1 は当初の状態から入れ替えられており、カーネルの認識が変わっている。この点が udev の最も有名な機能が最も udev らしからぬものと思わせる。
# ls -l /sys/class/net lrwxrwxrwx 1 root root 0 Jan 26 11:20 eth0 -> ../../devices/pci0000:00/0000:00:17.0/0000:13:00.0/net/eth0 lrwxrwxrwx 1 root root 0 Jan 26 11:20 eth1 -> ../../devices/pci0000:00/0000:00:16.0/0000:0b:00.0/net/eth1 lrwxrwxrwx 1 root root 0 Jan 26 11:20 lo -> ../../devices/virtual/net/lo # dmesg | grep eth eth0: NIC Link is Up 10000 Mbps eth1: NIC Link is Up 10000 Mbps udev: renamed network interface eth0 to rename2 udev: renamed network interface eth1 to eth0 udev: renamed network interface rename2 to eth1 eth0: intr type 3, mode 0, 2 vectors allocated eth0: NIC Link is Up 10000 Mbps eth0: no IPv6 routers present
参考サイト
- Decoding WWIDs (or how to tell what's what) 日立のストレージにおいてLDEVごとに割り当てられるWWN(WWID)がLDEV番号や装置のシリアル番号に基づいて決まっていることを明らかにしている。