如何正确获取整个磁盘的UUID?

如何正确获取整个磁盘的UUID?

由于 UUID 是在分区阶段(通过软件)分配的,因此整个磁盘没有可用的 UUID。

然而,/dev/disk/by-id/包含用于相同目的的有希望的信息。我们可以获得“UUID”路径 - 例如。/dev/sdb/经过:

$ disk=sdb; ls /dev/disk/by-id/ -l | grep "/$disk$" | awk '{print "/dev/disk/by-id/"$9}'
/dev/disk/by-id/ata-ST1000LM048-2E7172_WKP6XK95
/dev/disk/by-id/wwn-0x5000c500ccbb7485

然而,正如您所看到的,同一驱动器有多个条目。以 结尾的WKP6XK95更有意义,因为它实际写在产品标签的“序列号”部分中。

如何获得可能写入磁盘的唯一值?换句话说,wwn-...id 是如何生成的,那么我怎样才能安全地忽略这个条目呢?忽略此条目... | grep -v wwn安全吗?

答案1

wwn-条目是磁盘的全球通用名称。从技术上讲,它不是 UUID,因为它不遵循 UUID 格式或生成规则。

在独立 SATA 和 SAS 磁盘上,由磁盘固件报告并在工厂分配。在 SAN 存储系统上,情况可能会更复杂:由于存储以 LUN(逻辑单元)的形式呈现,因此存储系统会为其分配 WWN。

它就像 MAC 地址,但对于磁盘来说:其想法是,您实际上永远不应该在两个不同的存储上使用相同的 WWN(除非您使用 SAN 存储虚拟化硬件)。

lsscsi -UU还应该显示 WWN,尽管前缀是naa.而不是wwn-0xlsblk -o +WWN也可以显示它。

在 中/dev/disk/by-id/,您应该注意前缀:您可以找到前缀为wwn-0x和/或 的磁盘 WWN 字符串scsi-3,具体取决于udev您的发行版使用的版本。

GPT 分区方案存在写入分区表时分配的全盘 UUID 的概念。您可以在例如输出中看到它fdisk -l

# fdisk -l /dev/sda
Disk /dev/sda: 465.8 GiB, 500107862016 bytes, 976773168 sectors
Disk model: Samsung SSD 850 
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 2B05CCE8-92BC-4308-B770-174CE63D044F   <--- Here!

其他分区方案(例如 MBR)不一定具有任何适用的内容,即使有,也不一定采用有效的 UUID 形式。

对于 MBR 分区方案,最接近的等效项是 Windows 磁盘签名(实际 MBR 中的偏移量 0x1B8),但它只有 4 个字节长,并且不能保证存在于所有 MBR 分区磁盘上。我认为它是在 Windows NT 中引入的。

答案2

我就不重复什么电信了,只是添加可能有用的一句台词。


过滤所有 SATA 驱动器 + UUID 的方法

LC_ALL=C fdisk -l /dev/sd? | grep 'Disk /dev/sd\|Disk identifier'

解析

  • LC_ALL=C:设置基本语言环境而不导出它,仅适用于此命令

  • fdisk -l /dev/sd?:列出驱动器,在我们的例子中,我们很挑剔并且只做/dev/sd?

  • grep 'Disk /dev/sd\|Disk identifier':仅显示磁盘名称+UUID

相关内容