web-dev-qa-db-ja.com

UUIDを使用してディスク全体(/ dev / sda)を参照する

私のシステム(Debian)では、すべてのディスクパーティションのUUID識別子を確認できます(つまり、/dev/sda1dev/sda2、..)

ls /dev/disk/by-uuid/

ただし、/dev/sda自体のUUID識別子が表示されません。 UUIDを使用してディスク全体を参照することはできますか?

特定のディスクを参照したいので、これが必要です。/dev/sdaと呼ばれることは信頼できません。

編集する

@don_crisstiによって提案されたソリューションは素晴らしいです。ただし、UUIDは、同じモデル/製造元のすべてのハードディスクで同じであり、シリアル番号で一意ではないようにしてください。

udevadmを使用すると、ディスク属性を確認できます。

udevadm info -n /dev/sda -a
ATTRS{model}=="Samsung SSD 840 "
ATTRS{vendor}=="0x8086"
ATTRS{class}=="0x010700"
ATTRS{device}=="0x1d6b"
....

これらの属性からUUIDを生成して、同じモデル/メーカーのディスクが同じUUIDを持つようにするにはどうすればよいですか?

9
Michael Boies

/dev/disk/by-uuid/の下のシンボリックリンクは、filesystemsUUIDに基づくudevルールによって作成されます。 /usr/lib/udev/rules.d/60-persistent-storage.rulesを見ると、次のようなエントリがあります。

...... ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="disk/by-uuid/$env{ID_FS_UUID_ENC}"

ディスクを参照するには、 ディスクのシリアル番号ENV{ID_SERIAL_SHORT}キーを使用できます。
次のudevルールは、シリアル番号が付いているドライブに一致します。 0000000013100925DB96そして、/dev/disk/by-uuid/の下に同じ名前のシンボリックリンクを作成します。

KERNEL=="sd*", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", ENV{ID_SERIAL_SHORT}=="0000000013100925DB96", SYMLINK+="disk/by-uuid/$env{ID_SERIAL_SHORT}"

他の質問については...確かに、常にENV{ID_MODEL}の代わりにENV{ID_SERIAL_SHORT}を使用し、シンボリックリンク名にカスタム文字列を使用できます。
次のルールは、ID_MODEL = M4-CT128M4SSD2のドライブに一致し、M4-SSD-1234567890の下にシンボリックリンク/dev/disk/by-uuid/を作成します。

KERNEL=="sd*", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", ENV{ID_MODEL}=="M4-CT128M4SSD2", SYMLINK+="disk/by-uuid/M4-SSD-1234567890"

ID_MODELに一致するドライブが1つしかない限り、これは正常に機能します。同じモデルのドライブが複数ある場合は、それらのそれぞれにルールが再度適用され、シンボリックリンクは最後に検出/追加されたドライブを指します。

12
don_crissti