blkid 回傳的資訊比預期更多

blkid 回傳的資訊比預期更多

我正在遵循幾年前創建的一個配方,其中有一次我需要使用它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。

問題

  1. 為什麼 UUID 形狀會改變?
  2. 為什麼輸出格式會改變?

答案1

DEVNAME 是設備的別名,請參見使用別名的持久設備名稱

此外,國際標準似乎要求 UUID 必須為小寫。

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

相關內容