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


9

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

ls /dev/disk/by-uuid/

但是,我看不到其自身的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"
....

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


UUID用于文件系统,而不用于分区。分区有PARTUUID,但整个磁盘没有。您可能必须编写udev规则来提供/dev/sda固定名称。
muru

1
有趣的是,MBR中现在有一个UUID(至少是由Windows创建的),但似乎无法使用它。
2015年

Answers:


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}"

要引用磁盘,可以使用磁盘序列号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。如果有多个相同型号的驱动器,则将规则再次应用于每个驱动器,并且符号链接将指向最后检测到/添加的驱动器。


实际上,我希望UUID对于相同型号/类型/制造商的所有磁盘都相同。您是否偶然知道该使用什么规则?显然不是序列号。
Michael Boies 2015年

请看我的编辑。我要完成的工作:可以说我HDD崩溃了,但是我要更换相同的磁盘。我将其替换,并且希望与以前相同UUID(即使序列号已更改)。我不打算同时使用两个磁盘。
Michael Boies 2015年

@MichaelBoies-您可以直接更改带有-的UUID gdisk,但是我不确定这是否是个好主意。don-直接更改链接是比实际更改UUID更好的方法-计算机可能会停止引导。
mikeserv
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.