使用 UUID 引用整个磁盘 (/dev/sda)

Mic*_*ies 9 udev fdisk uuid disk

在我的系统 (Debian) 上,我可以看到UUID所有磁盘分区的标识符(即/dev/sda1, dev/sda2, ..)

ls /dev/disk/by-uuid/
Run Code Online (Sandbox Code Playgroud)

但是,我没有看到自己的UUID标识符/dev/sda。是否可以引用整个磁盘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"
....
Run Code Online (Sandbox Code Playgroud)

如何UUID从这些属性生成 a ,以便相同的 Model/Manufacturer 磁盘将具有相同的UUID

don*_*sti 12

下面的符号链接/dev/disk/by-uuid/是由udev基于文件系统UUID 的规则创建的。如果您查看,/usr/lib/udev/rules.d/60-persistent-storage.rules您会发现以下条目:

...... ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="disk/by-uuid/$env{ID_FS_UUID_ENC}"
Run Code Online (Sandbox Code Playgroud)

要引用磁盘,您可以使用磁盘序列号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}"
Run Code Online (Sandbox Code Playgroud)

至于你的另一个问题......当然,你总是可以使用ENV{ID_MODEL}而不是ENV{ID_SERIAL_SHORT}为你的符号链接名称使用自定义字符串。
以下规则匹配任何带有ID_MODEL= 的驱动器,M4-CT128M4SSD2M4-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"
Run Code Online (Sandbox Code Playgroud)

请注意,只要只有一个驱动器与ID_MODEL. 如果有多个相同型号的驱动器,则对每个驱动器再次应用规则,符号链接将指向最后检测到/添加的驱动器。