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

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

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

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

这有可能吗?

答案1

解决您的编辑问题:

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

GPT 磁盘和 GPT 磁盘之间的主要区别混合膜生物反应器磁盘是 GPT 的 MBR 将描述整个磁盘作为单个 MBR 分区,而混合膜生物反应器将尝试对冲(极其丑陋)出于兼容性考虑,仅描述前四个分区覆盖的区域。这种情况的问题是混合型MBR兼容性方面的尝试从一开始就完全违背了 GPT 保护性 MBR 的目的

如下所述,保护性MBR应该保护来自愚蠢应用程序的 GPT 磁盘,但如果某些磁盘似乎未分配给这些应用程序,则所有赌注都会失败。如果有帮助的话,不要使用混合 MBR- 如果在 Mac 上,这意味着不要使用默认Bootcamp配置

一般来说,如果寻求有关 EFI/GPT 相关问题的建议,请前往无处(除了可能稍微绕路这里首先)但是rodsbooks.com


咳咳……

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

在此输入图像描述

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

无论如何,方法如下:

  • 这样就创建了一个4G./img文件充满 NUL...

    </dev/zero >./img \
    dd ibs=4k obs=4kx1k count=1kx1k
    

    1048576+0 records in
    1024+0 records out
    4294967296 bytes (4.3 GB) copied, 3.38218 s, 1.3 GB/s
    
  • 这会向其中写入一个分区表 - 包括前导保护性MBR

    • 的每个printf参数后面都跟有一个\newline 并写入到gdisk的标准输入中。
    • gdisk解释这些命令,就好像它们是以交互方式键入的一样,并相应地执行操作,以在GUID分区表它写给我们的头./img文件。
    • 所有终端输出都转储到>/dev/null (因为数量很多,无论如何我们现在都会看看结果)

      printf %s\\n o y n 1 '' +750M ef00 \
                       n 2 '' '' '' ''   \
                   w y | >/dev/null      \
      gdisk ./img      
      
  • 这得到 的前 2K 中pr伴随偏移量的四列格式表示strings./img

    <./img dd count=4 |
    strings -1 -td    | 
    pr -w100   -t4
    

    4+0 records in
    4+0 records out
    2048 bytes (2.0 kB) copied, 7.1933e-05 s, 28.5 MB/s
    

        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
    

你可以看到 MBR 结束的地方,是吗?字节 512。

  • 这会在前 512 个字节上写入 512 个空格./img

    <>./img >&0 printf %0512s
    

现在来看看我们的劳动成果。

  • gdisk这是一个交互式运行./img

    gdisk ./img
    

    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.
    

    Command (? for help): p
    

    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
    

答案2

根据您的情况,您始终需要创建一个>2TB 的分区。你应该使用分手了命令。

在创建分区命令之前,我们应该将磁盘标签设置为GPT。 GPT 代表 GUID 分区表格式 (GPT)。使用parted的mklabel命令将磁盘标签设置为GPT,如下所示。

# parted /dev/sdb
GNU Parted 2.1
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.

(parted) print
Error: /dev/sdb: unrecognised disk label

(parted) mklabel gpt

(parted) print
Model: Unknown (unknown)
Disk /dev/sdb: 5909GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start  End  Size  File system  Name  Flags

使用 Parted mkpart 创建 >2TB 分区。

使用parted的mkpart命令如下所示创建大于2TB的分区。在此示例中,我们创建一个大小约为 6TB 的分区。

#parted /dev/sdb

(parted) mkpart primary 0GB 5909GB

(parted) print
Model: Unknown (unknown)
Disk /dev/sdb: 5909GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system  Name     Flags
 1      1049kB  5909GB  5909GB               primary

相关内容