
我正在遵循幾年前創建的一個配方,其中有一次我需要使用它blkid
來獲取檔案系統 UUID。
我記錄了此命令以及預期的範例返回值:
blkid -o export -s UUID /dev/mapper/thathost_crypt_md3
UUID=JNbF5T-vhSD-3aVv-intG-1Tk2-IEOZ-ABWXYZ
然而,時代在進步,我不再使用 Debian“wheezy”,而是使用“jessie”。我發現在這個更新版本的 Debian 上,同一命令現在有不同的回傳值:
blkid -o export -s UUID /dev/mapper/thishost_crypt_sdb
DEVNAME=/dev/mapper/thishost_crypt_sdb
UUID=bddac63e-3510-4d24-a6fb-4d0a89abcdef
blkid 的手冊頁似乎說應該只包含與該鍵匹配的值,但其中也-s UUID
存在無關的內容。DEVNAME
我有一個解決方法,因為我可以在這兩種情況下寫這個,但輸出結構應該改變似乎很奇怪:
echo "UUID=$(blkid -o value -s UUID /path/to/device)"
UUID=bddac63e-3510-4d24-a6fb-4d0a89abcdef
軟體包util-linux
版本分別為 2.20.1-5.3 和 2.25.2-6。
問題
- 為什麼 UUID 形狀會改變?
- 為什麼輸出格式會改變?
答案1
DEVNAME 是設備的別名,請參見使用別名的持久設備名稱
此外,國際標準似乎要求 UUID 必須為小寫。
澄清一下,UUID 實際上是一個 128 位元值,而不是文字或數字。您可以將它們視為 128 位元無符號整數。
2008 年 8 月最新的國際規範指出(重點是我的):
6.5.4 產生 UUID 的十六進位表示的軟體不得使用大寫字母。注意 – 建議所有人類可讀格式中使用的十六進位表示形式僅限於小寫字母。然而,處理這種表示的軟體需要接受 6.5.2 中指定的大寫和小寫字母。
至於列印 UUID 和別名/DEVNAME
從 util-linux/blkid.c 可以明顯看出 DEVNAME 被列印,因為您正在使用-o export
} else if (ctl->output & OUTPUT_EXPORT_LIST) {
if (num == 1 && devname)
printf("DEVNAME=%s\n", devname);
所以我懷疑如果沒有-o export
它只會印製 UUID,事實上:
$blkid -s UUID /dev/sda2
/dev/sda2: UUID="67169dd7-f319-4402-a9b2-cebcf2f3657a"
$ blkid -o export -s UUID /dev/sda2
DEVNAME=/dev/sda2
UUID=67169dd7-f319-4402-a9b2-cebcf2f3657a