Linux

如何在 Linux 上建構 GPT-only 分區表?

  • July 12, 2015

到目前為止,我嘗試過的所有工具都只能創建一個雙(GPT 和 MBR)分區表,其中前 4 個 GPT 分區被鏡像到一個兼容的 MBR 分區。

這不是我想要的。我想要一個純 GPT 分區表,即磁碟上沒有 MBR 表,因此它們之間也沒有任何同步。

有可能嗎?

解決您的編輯:

直到剛才我才注意到對您問題的編輯。正如現在所寫,這個問題與我第一次回答時完全不同。實際上,您描述的鏡像**不在規範中,因為它是一種相當危險且醜陋的 hack,稱為混合 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

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*中創建兩個 GPT 分區條目。
    • 所有終端輸出都被轉儲到>/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。

  • 這會在*./img*.
<>./img >&0 printf %0512s

現在來看看我們的勞動成果。

  • 這是gdiskon的互動式執行*./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

引用自:https://unix.stackexchange.com/questions/215229