如何在 Linux 上建構 GPT-only 分區表?
到目前為止,我嘗試過的所有工具都只能創建一個雙(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
’ 參數後跟一個\n
ewline 並寫入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
現在來看看我們的勞動成果。
- 這是
gdisk
on的互動式執行*./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