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

为什么它们不同?我们如何更改 所使用的 UUID 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 或其他名称以避免混淆。

相关内容