Disk

如何正確獲取整個磁碟的 UUID?

  • December 31, 2019

由於 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是否安全?

wwn-條目是磁碟的全球通用名稱。它在技術上不是 UUID,因為它不遵循 UUID 格式或生成規則。

在獨立 SATA 和 SAS 磁碟上,由磁碟韌體報告並在出廠時分配。在 SAN 儲存系統上可能會更複雜:由於儲存以 LUN(邏輯單元)的形式呈現,儲存系統會為它們分配 WWN。

這就像一個 MAC 地址,但對於磁碟來說:這個想法是,您實際上不應該在兩個不同的儲存上擁有相同的 WWN(除非您使用 SAN 儲存虛擬化硬體玩弄技巧)。

lsscsi -UU還應該顯示 WWN,儘管前綴為naa.而不是wwn-0x. lsblk -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),但它只有四個字節長,並且不能保證存在於所有 MBR 分區的磁碟上。我認為它是在 Windows NT 中引入的。

引用自:https://unix.stackexchange.com/questions/559655