如何在 Linux 上构建 GPT-only 分区表?

pet*_*erh 7 linux gpt mbr disk uefi

到目前为止,我尝试过的所有工具都只能创建双(GPT 和 MBR)分区表,其中前 4 个 GPT 分区被镜像到兼容的 MBR 分区。

这不是我想要的。我想要一个纯 GPT 分区表,即磁盘上没有 MBR 表,因此它们之间也没有任何同步。

它以某种方式可能吗?

mik*_*erv 12

解决您的编辑问题:

直到刚才我才注意到对您问题的编辑。正如现在所写,这个问题与我第一次回答时完全不同。您描述的镜像实际上不在规范中,因为它是一种相当危险和丑陋的黑客,称为混合 MBR分区格式。这个问题使得很多更有意义了-这不是傻可言,其实。

GPT 磁盘和混合 MBR磁盘之间的主要区别在于,GPT 的 MBR 会将整个磁盘描述为单个 MBR 分区,而混合 MBR会尝试对冲(非常丑陋的)兼容性,并仅描述由前四个分区。这种情况的问题在于,混合 MBR的兼容性尝试首先完全违背了 GPT 保护 MBR 的目的

如下所述,保护性 MBR应该保护GPT 磁盘免受愚蠢的应用程序的攻击,但如果某些磁盘似乎未分配给那些应用程序,则所有赌注都将被取消。如果有帮助,请不要使用混合 MBR - 如果在 Mac 上,这意味着不要使用默认Bootcamp配置

一般来说,如果要寻求有关 EFI/GPT 相关问题的建议,别无他处(除了在这里稍微绕道),只能到rodsbooks.com


咳咳……

(曾经是)一个愚蠢的问题 - 我认为您是在问如何在没有Protective MBR 的情况下对 GPT 磁盘进行分区。这个问题的答案是你不能——因为 GPT 是一种磁盘分区表格式标准,该标准指定了一个位于磁盘头部的保护性 MBR。看?

在此处输入图片说明

您可以做的是擦除 MBR 或覆盖它——无论如何它不会阻止大多数GPT 感知应用程序访问分区数据,但它包含在规范中的原因是为了防止GPT 感知应用程序与分区表。它通过报告整个磁盘已经是一个 MBR 类型的分区来防止这种情况发生,并且没有人应该尝试向它写入文件系统,因为它已经分配了空间。删除 MBR 会删除该保护。

无论如何,方法如下:

  • 这将创建一个./img充满 NUL的 4G文件......

    </dev/zero >./img \
    dd ibs=4k obs=4kx1k count=1kx1k
    
    Run Code Online (Sandbox Code Playgroud)
    1048576+0 records in
    1024+0 records out
    4294967296 bytes (4.3 GB) copied, 3.38218 s, 1.3 GB/s
    
    Run Code Online (Sandbox Code Playgroud)
  • 这会向其中写入一个分区表 - 以包括领先的Protective MBR

    • 的每个printf参数后跟一个\newline 并写入gdisk的标准输入。
    • gdisk解释命令,就好像它们是交互输入的一样,并相应地采取行动,在它写入我们文件头部的GUID 分区表中创建两个 GPT 分区条目./img
    • 所有终端输出都转储到>/dev/null (因为它很多,无论如何我们现在都会看看结果)

      1048576+0 records in
      1024+0 records out
      4294967296 bytes (4.3 GB) copied, 3.38218 s, 1.3 GB/s
      
      Run Code Online (Sandbox Code Playgroud)
  • 这将获得的前 2K 中pr偏移量的四列格式化表示。strings./img

    printf %s\\n o y n 1 '' +750M ef00 \
                     n 2 '' '' '' ''   \
                 w y | >/dev/null      \
    gdisk ./img      
    
    Run Code Online (Sandbox Code Playgroud)
    4+0 records in
    4+0 records out
    2048 bytes (2.0 kB) copied, 7.1933e-05 s, 28.5 MB/s
    
    Run Code Online (Sandbox Code Playgroud)
        451 *           1033 K           1094 t           1212 n
        510 U           1037 >           1096 e           1214 u
        512 EFI PART    1039 ;@fY        1098 m           1216 x
        524 \           1044 30          1153 =           1218
        529 P           1047 L           1158 rG          1220 f
        531 (           1050 E           1161 y=i         1222 i
        552 "           1065 w           1165 G}          1224 l
        568 V           1080 E           1170 $U.b        1226 e
        573 G           1082 F           1175 N           1228 s
        575 G           1084 I           1178 C           1230 y
        577 y           1086             1180 b           1232 s
        583 G           1088 S           1185 x           1234 t
        602 Ml          1090 y           1208 L           1236 e
       1024 (s*         1092 s           1210 i           1238 m
    
    Run Code Online (Sandbox Code Playgroud)

你可以看到 MBR 在那里结束,是吗?字节 512。

现在为了我们的劳动成果。

  • 这是gdiskon的交互式运行./img

    4+0 records in
    4+0 records out
    2048 bytes (2.0 kB) copied, 7.1933e-05 s, 28.5 MB/s
    
    Run Code Online (Sandbox Code Playgroud)
    GPT fdisk (gdisk) version 1.0.0
    
    Partition table scan:
      MBR: not present
      BSD: not present
      APM: not present
      GPT: present
    
    Found valid GPT with corrupt MBR; using GPT and will write new
    protective MBR on save.
    
    Run Code Online (Sandbox Code Playgroud)
        451 *           1033 K           1094 t           1212 n
        510 U           1037 >           1096 e           1214 u
        512 EFI PART    1039 ;@fY        1098 m           1216 x
        524 \           1044 30          1153 =           1218
        529 P           1047 L           1158 rG          1220 f
        531 (           1050 E           1161 y=i         1222 i
        552 "           1065 w           1165 G}          1224 l
        568 V           1080 E           1170 $U.b        1226 e
        573 G           1082 F           1175 N           1228 s
        575 G           1084 I           1178 C           1230 y
        577 y           1086             1180 b           1232 s
        583 G           1088 S           1185 x           1234 t
        602 Ml          1090 y           1208 L           1236 e
       1024 (s*         1092 s           1210 i           1238 m
    
    Run Code Online (Sandbox Code Playgroud)
    Disk ./img: 8388608 sectors, 4.0 GiB
    Logical sector size: 512 bytes
    Disk identifier (GUID): 0528394A-9A2C-423B-9FDE-592CB74B17B3
    Partition table holds up to 128 entries
    First usable sector is 34, last usable sector is 8388574
    Partitions will be aligned on 2048-sector boundaries
    Total free space is 2014 sectors (1007.0 KiB)
    
    Number  Start (sector)    End (sector)  Size       Code  Name
       1            2048         1538047   750.0 MiB   EF00  EFI System
       2         1538048         8388574   3.3 GiB     8300  Linux filesystem
    
    Run Code Online (Sandbox Code Playgroud)