udevへのストレージに関するルールの追加 [Linux]
/dev/sd[ab] が入れ替わることに関連して、デバイスへのパスを固定するための udev のルールを作成してみた。
1. 要件
2. 作成したルール
3. 備考
1. 要件
指定したデバイスへのシンボリック・リンク(パス名を固定)を /dev に作成する。
対象とするデバイスは、下記の通りである。
また、ルールは /etc/udev/rules.d/60-persistent-strage.rules に設定する。
(1) 2 個のバードディスクの一方にインストールされている Windows のパーティション
・/dev/part-win-1
・/dev/part-win-2
(2) SATA1、STAT2 に接続されているハードディスク
・/dev/ata-disk-1
・/dev/ata-disk-2
2. 作成したルール
(1) Windows のパーティションへのシンポリック・リンクの作成
(a) /dev/sda[12] を使用の場合
# NTFS partitions SUBSYSTEM=="block", ENV{ID_BUS}=="ata", ENV{ID_FS_TYPE}=="ntfs", \ SYMLINK+="part-win-%n"
(b) /dev/sda{1+x,2+x} を使用の場合
# NTFS partitions SUBSYSTEM=="block", ENV{ID_BUS}=="ata", ENV{ID_FS_TYPE}=="ntfs", \ PROGRAM="/bin/sh -c 'echo $((%n-x))'", SYMLINK+="part-win-%c"
・実際には一行で設定する。
・%n: デバイスの番号
・%c: PROGRAM で指定したコマンドの標準出力
(2) SATA1、STAT2 に接続されているハードディスクへのシンボリック・リンクの作成
# pci-0000:00:1f.2-ata-1.0 SUBSYSTEM=="block", ENV{ID_BUS}=="ata", ENV{DEVTYPE}=="disk", \ ENV{ID_PATH}=="pci-0000:00:1f.2-ata-1.0", SYMLINK+="ata-disk-1" # pci-0000_00_1f_2-ata-1.1 SUBSYSTEM=="block", ENV{ID_BUS}=="ata", ENV{DEVTYPE}=="disk", \ ENV{ID_PATH}=="pci-0000:00:1f.2-ata-1.1", SYMLINK+="ata-disk-2"
または
# pci-0000:00:1f.2-ata-1.0, pci-0000_00_1f_2-ata-1.1 SUBSYSTEM=="block", ENV{ID_BUS}=="ata", ENV{DEVTYPE}=="disk", \ ENV{ID_PATH}=="pci-0000:00:1f.2-ata-1.?", \ PROGRAM="/bin/sh -c \"echo $((`echo %E{ID_PATH} | sed 's/.*\.//'` +1))\"", \ SYMLINK+="ata-disk-%c"
・実際には一行で設定する。
・%E{ID_PATH}: ID_PATH の値
・同様のシンボリック・リンクが /dev/disk/by-path に存在する。
/dev/disk/by-path/pci-0000:00:1f.2-ata-1.0
/dev/disk/by-path/pci-0000:00:1f.2-ata-1.1
3. 備考
(1) ルールで指定できる項目の確認
% udevadm info --query=all --name=<dev-path>
コメント 0