blkid 和 mdadm 的 UUID 之間的差異?

blkid 和 mdadm 的 UUID 之間的差異?

blkid有人可以解釋和報告的 UUID 之間的差異mdadm嗎?以我們的 CentOS 系統之一為例:

[root@server ~]# blkid | grep /dev/md1
/dev/md1: UUID="32cb0a6e-8148-44e9-909d-5b23df045bd1" TYPE="ext4"

[root@server ~]# mdadm --detail /dev/md1 | grep UUID
UUID : f204c558:babf732d:85bd7296:bbfebeea

為什麼它們不同mdadm

我知道我們會用來tune2fs更改分區的 UUID(這會更改 返回的內容blkid),但不確定如何更改mdadm使用的內容。

答案1

第一個報告區塊設備上 ext4 檔案系統的 UUID md。它幫助系統在系統上可用的檔案系統中唯一地識別檔案系統。它儲存在檔案系統的結構中,也就是儲存在 md 裝置上的資料中。

第二個是 RAID 設備的 UUID。它幫助 md 子系統唯一地識別特定的 RAID 設備。特別是,它有助於識別屬於 RAID 陣列的所有區塊設備。它儲存在數組的元資料中(在每個成員上)。陣列成員也有自己的 UUID(在 md 系統中,如果它們是 GPT 分區(本身將儲存在 GPT 分區表中)或 LVM 卷,則它們也可能有分區 UUID...)。

blkid有點誤導,因為它傳回的是儲存在裝置上的結構的 ID(對於它所知道的結構類型,如大多數檔案系統、LVM 成員和交換設備)。另請注意,具有相同 UUID 結構的區塊設備(例如 LVM 快照)並不罕見。區塊設備可以包含任何內容,包括其結構不包含 UUID 的內容。

因此,作為範例,您可以擁有一個具有 3 個磁碟機且採用 GPT 分割區的系統。這些驅動器可能有一個全球通用名稱它唯一地標識了它。假設 3 個磁碟機各劃分一個分區 ( /dev/sd[abc]1)。每個分割區都會有一個 GPT UUID 儲存在 GPT 分割區表中。

如果這些分割區組成一個 md RAID5 陣列。每個都會獲得一個 md UUID 作為 RAID 成員,並且陣列將獲得一個 UUID 作為 md RAID 設備。

可以/dev/md0使用 MSDOS 或 GPT 類型的分割區進一步分割區。例如,我們可以有一個/dev/md0p1具有 GPT UUID 的分割區(儲存在 GPT 分割區表中,該分割表儲存在 /dev/md0 的資料中)。

這又可能是 LVM 的物理磁碟區。因此它將獲得一個 PV UUID。卷組還將有一個 VG UUID。

在該卷組中,您將建立邏輯卷,每個邏輯卷都有一個 LV UUID。

在其中一個 LV(如/dev/VG/LV)上,您可以建立一個 ext4 檔案系統。該檔案系統將獲得 ext4 UUID。

blkid /dev/VG/LV將為您提供該檔案系統的 (ext4) UUID。但作為 VG 磁碟區內的分割區,它也會獲得分割區 UUID(某些分割區方案(如 MSDOS/MBR)沒有 UUID)。這卷組由成員 PV 組成,這些成員 PV 本身就是其他區塊設備。blkid /dev/md0p1會給你PV UUID。它還在 上的 GPT 表中有一個分割區 UUID /dev/md0/dev/md0它本身是由其他區塊設備組成的。blkid /dev/sda1將返回 raid 成員 UUID。它還在 上的 GPT 表中有一個分割區 UUID /dev/sda

答案2

不同的 UUID 已經解釋過。不僅檔案系統有它們。只是有用於不同事物的 UUID:raid 陣列、設備、分割區、LUKS 容器、LVM PV...以及最後的檔案系統。

令我個人煩惱的是,甚至這些 UUID 的格式化方式也是不同的。

塊:

# blkid /dev/sda1
/dev/sda1: 
UUID="d8b8b4e5-e47b-2e45-2093-cd36f654020d"
UUID_SUB="3c3e6eac-2139-3f7a-16b7-57280934d88e"
PARTUUID="6a89cedf-69e1-40db-b08c-1c8e45af59f5" 

媽媽:

# mdadm --examine /dev/sda1 | grep UUID
     Array UUID : d8b8b4e5:e47b2e45:2093cd36:f654020d
    Device UUID : 3c3e6eac:21393f7a:16b75728:0934d88e

正如您所看到的,它們是相同的 UUID,但使用blkid破折號列印它們-,並mdadm使用冒號列印它們:。所以你得到d8b8b4e5-e47b-2e45-2093-cd36f654020dvs d8b8b4e5:e47b2e45:2093cd36:f654020d..

非常煩人,尤其是當您想在腳本中使用 UUID 時。如何從一種格式轉換為另一種格式並不明顯。

答案3

「32cb0a6e-8148-44e9-909d-5b23df045bd1」上方的 blkid UUID 是正確的,作業系統將使用它來尋找 RAID 陣列。

mdadm 有它自己的「內部」UUID,該 UUID 不直接由作業系統使用,而是您在 mdadm.conf 檔案中使用的內容,例如:

“陣列 /dev/md1 等級=raid1 num-devices=2 uuid=f204c558:babf732d:85bd7296:bbfebeea”

當 mdadm 與 blkid 和作業系統識別的 UUID 分開時,不應呼叫任何 UUID。也許它應該被稱為 mduuid 或其他名稱以避免混淆。

相關內容