AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 751946
Accepted
Tango
Tango
Asked: 2023-07-20 15:14:20 +0800 CST2023-07-20 15:14:20 +0800 CST 2023-07-20 15:14:20 +0800 CST

UUID 和 PTUUID 对于 MBR 磁盘重要吗?如果是这样,我如何自己创建它们?

  • 772

我正在研究 Linux 下的分区,从 sfdisk 开始。如果我将分区表从一个驱动器复制到另一个驱动器,它将复制每个分区的设备 UUID 和 PTUUID,但如果我要创建新设备,我可以为 GPT 驱动器指定 UUID,但不能为 MBR 驱动器指定 UUID。这让我认为 UUID 和 PTUUID 对于 MBR 驱动器来说不是必需的。那是什么情况呢?

如果我需要驱动器的 UUID 以及分区的 PTUUID,我该如何手动完成呢?我看到 sfdisk 允许我为 GPT 设备指定 UUID,但只能为 MBR 设备指定标签。如何为 MBR 创建 UUID?如何确保分区 PTUUID 是基于该设备 UUID 创建的?我不知道如何为设备创建主 UUID,或者如何根据它为分区创建 PTUUID。

partition
  • 2 2 个回答
  • 57 Views

2 个回答

  • Voted
  1. Best Answer
    Philip Couling
    2023-07-21T13:53:28+08:002023-07-21T13:53:28+08:00

    这让我认为 UUID 和 PTUUID 对于 MBR 驱动器来说不是必需的。

    这基本上是正确的。分区表本身上的 PTUUID 对 MBR 本身没有任何作用,但它由系统使用。它根本没有分区上的 PARTUUID,只有它们在表中的位置。

    如果我需要驱动器的 UUID 以及分区的 PTUUID,我该如何手动完成呢?我看到 sfdisk 允许我为 GPT 设备指定 UUID,但只能为 MBR 设备指定标签。

    实际上sfdisk确实允许您设置“disk-id”。MBR 分区 UUID 只是磁盘 ID 后跟表中的位置。因此,如果我将磁盘 ID 设置为12345第一个 PARTUUID 将是12345-1. 请参阅sfdisk 手册:

      --disk-id device [id]
          Change the disk identifier. If id is not specified, then
          print the current identifier. The identifier is UUID for GPT
          or unsigned integer for MBR.
    

    背景

    Linux 使用的命名约定错误地使用了术语“UUID”,这是非常具有误导性的。 通用唯一标识符是一种非常具体的标准化格式的唯一标识符,具有严格标准化的生成规则,具体取决于每个 ID 中嵌入的版本。为了避免混淆,我将避免将首字母缩略词“UUID”用于 Linux 分区以外的任何用途:

    Linux 的命名约定是:

    • “PTUUID”是分区表本身嵌入表中的唯一标识符。GPT 为此使用通用唯一标识符,而 MBR 则不然。然而,MBR 确实有一个短的 PTUUID,因为人类不擅长为其驱动器选择唯一的名称。
    • “PARTUUID”是分区表内分区的唯一标识符。
      • MBR 不记录任何此类 ID。但它最多只有 4 个分区。因此,按照惯例,分区可以通过它们在表中的位置(1、2、3、4)轻松引用。因此,要识别系统上的 MBR 分区,您需要 MBR 表的 PTUUID 和表中的位置。例如,在我的虚拟机上,我有一个ee7273d0带分区的驱动器ee7273d0-1。这可以在 下找到/dev/disk/by-partuuid/ee7273d0-1。
      • GPT 确实记录了这些并为它们使用通用唯一标识符。因此,由于通用唯一标识符的严格规则,不需要 PTUUID 来标识分区:只要正确生成,它们将始终是唯一的。
    • “UUID”是嵌入在文件系统、LUKS 标头或 LVM 物理卷等中的唯一标识符。未格式化的分区不会有,同样,具有分离标头的 LUKS 加密驱动器也不会有。
      • ext4 文件系统使用通用唯一标识符作为其 UUID
      • FAT 和 FAT32 使用更短的 ID,可能与某个地方的另一个驱动器相同。
      • LVM 似乎没有使用通用唯一标识符,但它的 ID 非常长且随机,与另一个驱动器发生冲突的风险可以忽略不计。
    • 3
  2. telcoM
    2023-07-21T14:50:13+08:002023-07-21T14:50:13+08:00

    我假设您的意思是“磁盘的 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 分区表时,现代 Linuxfdisk会包含以下初始消息:

    Device does not contain a recognized partition table.
    Created a new DOS (MBR) disklabel with disk identifier 0x1234abcd.
    
    Command (m for help):
    

    因此,当创建新的 MBR 分区表时,它会自动为您创建一个磁盘标识符。该磁盘的“PTUUID”将为 1234abcd,第一个分区的“PARTUUID”将为 1234abcd-01。

    要更改 MBR 磁盘的现有磁盘标识符,您可以使用sfdisk --disk-idPhilip Couling 提到的方法,或者您可以fdisk为该磁盘启动足够现代的 Linux 版本,键入x进入专家命令菜单,然后键入i更改磁盘标识符动作。

    更改 MBR 分区磁盘上的磁盘标识符/PTUUID 也必然会更改所有 PARTUUID,因为它们都源自相同的磁盘标识符。

    如果分区内的文件系统也支持 UUID,则由 Linux 工具(例如和 )blkid显示。它的格式和存在取决于文件系统类型:对于 FAT 系列的文件系统,您可以看到一个简短的标识符,而不是真正的 128 位 UUID。这实际上是在创建文件系统时分配的FAT卷序列号(也称为卷 ID )。要更改此设置,请使用特定于文件系统的工具,例如针对 ext2/ext3/ext4 文件系统、XFS 或FAT 系列文件系统。lsblkUUIDUUID=1A2B-3C4Dtune2fs -Uxfs_admin -Umlabel -N

    • 3

相关问题

  • 如何在 solaris 11.3 中挂载 zfs 驱动器分区

  • 备份 Nand Flash 存储区

  • 如何正确分区 SSD 以进行双启动设置

  • 并行安装多个 linux 发行版

  • fdisk 没有看到 resize2fs 缩小未挂载的分区

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve