我正在研究 Linux 下的分区,从 sfdisk 开始。如果我将分区表从一个驱动器复制到另一个驱动器,它将复制每个分区的设备 UUID 和 PTUUID,但如果我要创建新设备,我可以为 GPT 驱动器指定 UUID,但不能为 MBR 驱动器指定 UUID。这让我认为 UUID 和 PTUUID 对于 MBR 驱动器来说不是必需的。那是什么情况呢?
如果我需要驱动器的 UUID 以及分区的 PTUUID,我该如何手动完成呢?我看到 sfdisk 允许我为 GPT 设备指定 UUID,但只能为 MBR 设备指定标签。如何为 MBR 创建 UUID?如何确保分区 PTUUID 是基于该设备 UUID 创建的?我不知道如何为设备创建主 UUID,或者如何根据它为分区创建 PTUUID。
这基本上是正确的。分区表本身上的 PTUUID 对 MBR 本身没有任何作用,但它由系统使用。它根本没有分区上的 PARTUUID,只有它们在表中的位置。
实际上
sfdisk
确实允许您设置“disk-id”。MBR 分区 UUID 只是磁盘 ID 后跟表中的位置。因此,如果我将磁盘 ID 设置为12345
第一个 PARTUUID 将是12345-1
. 请参阅sfdisk 手册:背景
Linux 使用的命名约定错误地使用了术语“UUID”,这是非常具有误导性的。 通用唯一标识符是一种非常具体的标准化格式的唯一标识符,具有严格标准化的生成规则,具体取决于每个 ID 中嵌入的版本。为了避免混淆,我将避免将首字母缩略词“UUID”用于 Linux 分区以外的任何用途:
Linux 的命名约定是:
ee7273d0
带分区的驱动器ee7273d0-1
。这可以在 下找到/dev/disk/by-partuuid/ee7273d0-1
。我假设您的意思是“磁盘的 PTUUID 和分区的 PARTUUID”,因为不存在“分区的 PTUUID”之类的东西。
回答你的问题标题:不,PTUUID和PARTUUID对于MBR来说并不重要,因为MBR是在20世纪80年代开发的,当时128位UUID的概念还不常见。MBR 分区表中的单个主分区条目只有 16 个字节:为每个分区再添加 16 个字节用于一个长标识符的想法在当时被认为是一种疯狂的空间浪费。由于主 MBR 分区表必须与实际引导记录代码放入同一个 512 字节磁盘块中,因此实际上也没有任何空间可以在以后添加它。
您可能已经注意到,真正的 UUID 往往采用 12345678-9abc-def0-1234-56789abcdef0 格式,但在 MBR 分区磁盘上,PTUUID 和 PARTUUID(如果确实报告)都是短得多的字符串:PTUUID 可能分别是 12345678 和 PARTUUID 12345678-01?
这是因为 MBR 分区磁盘的 PTUUID 和 PARTUUID 所显示的标识符不是真正的 UUID。它们基于 32 位磁盘标识符,该标识符由 Windows NT 3.5 首次添加到 MBR 中。它最初被称为“Windows 磁盘签名”,但我猜“磁盘标识符”是一个更与供应商中立的术语。由于 Windows NT 3.5 之前的操作系统没有这样的磁盘标识符,因此必须将其视为可选标识符,这与 GPT 分区磁盘不同,在 GPT 分区磁盘上,PTUUID 和 PARTUUID 是分区方案的强制部分。
MBR 分区磁盘的“PTUUID 字符串”本身就是 32 位磁盘标识符,“PARTUUID”是通过简单地在末尾添加破折号和两位数的分区号从中派生出来的。这些字符串不满足真实 UUID 的规范,因为它们不够长,无法确保唯一性,并且不是使用相同的规则创建的。它们是真实 UUID 的最佳替代品。
当您开始在完全未使用的磁盘上创建新的 MBR 分区表时,现代 Linux
fdisk
会包含以下初始消息:因此,当创建新的 MBR 分区表时,它会自动为您创建一个磁盘标识符。该磁盘的“PTUUID”将为 1234abcd,第一个分区的“PARTUUID”将为 1234abcd-01。
要更改 MBR 磁盘的现有磁盘标识符,您可以使用
sfdisk --disk-id
Philip Couling 提到的方法,或者您可以fdisk
为该磁盘启动足够现代的 Linux 版本,键入x
进入专家命令菜单,然后键入i
更改磁盘标识符动作。更改 MBR 分区磁盘上的磁盘标识符/PTUUID 也必然会更改所有 PARTUUID,因为它们都源自相同的磁盘标识符。
如果分区内的文件系统也支持 UUID,则由 Linux 工具(例如和 )
blkid
显示。它的格式和存在取决于文件系统类型:对于 FAT 系列的文件系统,您可以看到一个简短的标识符,而不是真正的 128 位 UUID。这实际上是在创建文件系统时分配的FAT卷序列号(也称为卷 ID )。要更改此设置,请使用特定于文件系统的工具,例如针对 ext2/ext3/ext4 文件系统、XFS 或FAT 系列文件系统。lsblk
UUID
UUID=1A2B-3C4D
tune2fs -U
xfs_admin -U
mlabel -N