根据这个维基百科文章,GUID 分区表的第二个逻辑块地址 (LBA 1) 是主 GPT 标头。然后在有关标头的部分中指出,标头的前 8 个字节用于“签名”。
这个GPT头签名是什么,它与GPT表/存储设备的功能/操作有什么关联?
我在网上搜索过,但是发现关于这个标题签名的用途的信息很少。
编辑:
我在对 Deltik 的评论中提出了以下后续问题回答,他们非常有帮助地扩展了它以解决以下问题:
- 如果签名为空白,那么GPT表是否就无法识别呢?
- 我目前正在检查 Chrome OS GPT,其中签名似乎已设置为“IGNOREME”。这会产生什么影响?
- 还有其他有效的 GPT 签名可用吗?(除了默认的“EFI PART”)
答案1
签名EFI PART
( 0x45 0x46 0x49 0x20 0x50 0x41 0x52 0x54
) 只是表示“这是一个 GUID 分区表”。软件通过它知道块设备是以 GPT 布局格式化的。
您可以从十六进制转储的这个片段中看到它:
*
000001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa |..............U.|
00000200 45 46 49 20 50 41 52 54 00 00 01 00 5c 00 00 00 |EFI PART....\...|
00000210 ea b5 99 a4 00 00 00 00 01 00 00 00 00 00 00 00 |................|
00000220 af 12 9e 3b 00 00 00 00 22 00 00 00 00 00 00 00 |...;....".......|
00000230 8e 12 9e 3b 00 00 00 00 7f 8c d6 05 c8 e8 01 4a |...;...........J|
00000240 b8 74 6b 37 30 7c bf 15 02 00 00 00 00 00 00 00 |.tk70|..........|
00000250 80 00 00 00 80 00 00 00 10 d3 0e 29 00 00 00 00 |...........)....|
00000260 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
签名并非 GPT 所独有。文件还具有签名软件可以使用它来识别文件是什么。这是file
命令。 (示例file
)
答案后续问题
那么,如果这个签名是空白的话,GPT 分区表就无法被识别吗?
至少,gdisk
不会再认出它了。看看这个演示:
为演示创建一个文件(充当块设备):
root@demo [/tmp]# truncate -s 1M gpt-demo
使用 GPT 格式化文件:
root@demo [/tmp]# sgdisk --clear gpt-demo Creating new GPT entries. Warning: The kernel is still using the old partition table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8) The operation has completed successfully.
检查分区表的二进制数据:
root@demo [/tmp]# hexdump -C gpt-demo 00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 000001c0 02 00 ee 20 20 00 01 00 00 00 ff 07 00 00 00 00 |... ...........| 000001d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 000001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa |..............U.| 00000200 45 46 49 20 50 41 52 54 00 00 01 00 5c 00 00 00 |EFI PART....\...| 00000210 13 14 6d 6a 00 00 00 00 01 00 00 00 00 00 00 00 |..mj............| 00000220 ff 07 00 00 00 00 00 00 22 00 00 00 00 00 00 00 |........".......| 00000230 de 07 00 00 00 00 00 00 be 2c cb 6e 58 d4 e3 46 |.........,.nX..F| 00000240 84 84 3c 83 52 59 5b 58 02 00 00 00 00 00 00 00 |..<.RY[X........| 00000250 80 00 00 00 80 00 00 00 86 d2 54 ab 00 00 00 00 |..........T.....| 00000260 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 000ffe00 45 46 49 20 50 41 52 54 00 00 01 00 5c 00 00 00 |EFI PART....\...| 000ffe10 18 3a 1f d9 00 00 00 00 ff 07 00 00 00 00 00 00 |.:..............| 000ffe20 01 00 00 00 00 00 00 00 22 00 00 00 00 00 00 00 |........".......| 000ffe30 de 07 00 00 00 00 00 00 be 2c cb 6e 58 d4 e3 46 |.........,.nX..F| 000ffe40 84 84 3c 83 52 59 5b 58 df 07 00 00 00 00 00 00 |..<.RY[X........| 000ffe50 80 00 00 00 80 00 00 00 86 d2 54 ab 00 00 00 00 |..........T.....| 000ffe60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 00100000
检查如何
gdisk
读取分区表:root@demo [/tmp]# gdisk gpt-demo GPT fdisk (gdisk) version 1.0.3 Partition table scan: MBR: protective BSD: not present APM: not present GPT: present Found valid GPT with protective MBR; using GPT. Command (? for help): q
更改 GPT 签名:
root@demo [/tmp]# sed -i 's/EFI PART/IGNOREME/g' gpt-demo
验证签名是否已被核实:
root@demo [/tmp]# hexdump -C gpt-demo 00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 000001c0 02 00 ee 20 20 00 01 00 00 00 ff 07 00 00 00 00 |... ...........| 000001d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 000001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa |..............U.| 00000200 49 47 4e 4f 52 45 4d 45 00 00 01 00 5c 00 00 00 |IGNOREME....\...| 00000210 13 14 6d 6a 00 00 00 00 01 00 00 00 00 00 00 00 |..mj............| 00000220 ff 07 00 00 00 00 00 00 22 00 00 00 00 00 00 00 |........".......| 00000230 de 07 00 00 00 00 00 00 be 2c cb 6e 58 d4 e3 46 |.........,.nX..F| 00000240 84 84 3c 83 52 59 5b 58 02 00 00 00 00 00 00 00 |..<.RY[X........| 00000250 80 00 00 00 80 00 00 00 86 d2 54 ab 00 00 00 00 |..........T.....| 00000260 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 000ffe00 49 47 4e 4f 52 45 4d 45 00 00 01 00 5c 00 00 00 |IGNOREME....\...| 000ffe10 18 3a 1f d9 00 00 00 00 ff 07 00 00 00 00 00 00 |.:..............| 000ffe20 01 00 00 00 00 00 00 00 22 00 00 00 00 00 00 00 |........".......| 000ffe30 de 07 00 00 00 00 00 00 be 2c cb 6e 58 d4 e3 46 |.........,.nX..F| 000ffe40 84 84 3c 83 52 59 5b 58 df 07 00 00 00 00 00 00 |..<.RY[X........| 000ffe50 80 00 00 00 80 00 00 00 86 d2 54 ab 00 00 00 00 |..........T.....| 000ffe60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 00100000
请注意,GUID 分区表 (GPT) 不再被识别
gdisk
:root@demo [/tmp]# gdisk gpt-demo GPT fdisk (gdisk) version 1.0.3 Partition table scan: MBR: protective BSD: not present APM: not present GPT: not present Creating new GPT entries. Command (? for help): q
我目前正在检查 Chrome OS GPT,其中签名似乎已设置为“IGNOREME”。你知道这会有什么影响吗?
据我从上面的演示所知,如果签名不同于EFI PART
,则 GPT 无法被识别。
“签名IGNOREME
”是 Chromium 创建的特殊签名。这是我找到的文档IGNOREME
:
cgptlib: Add support for IGNOREME GPT signature This patch makes cgpt aware of a special "IGNOREME" GPT header signature string that may appear in either the primary or the secondary GPT and cause cgpt (and other cgptlib clients) to completely ignore that GPT. It will continue to function correctly for all other purposes (using the data from the non-ignored GPT), but never write any data back to the ignored GPT. BRANCH=None BUG=chrome-os-partner:52595 TEST=unit tests Change-Id: I7e53542385ae9d8d24dc25b75e91f4ff4917f66f Signed-off-by: Julius Werner <[email protected]> Reviewed-on: https://chromium-review.googlesource.com/340072 Reviewed-by: Nam Nguyen <[email protected]>
您是否检查过磁盘/块设备末尾的辅助 GPT?
还有其他有效的 GPT 签名可用吗?
没有,没有其他签名,EFI PART
因为这是UEFI 规范(见第 123 页)。(UEFI 规范版本 2.7(勘误表 A)的存档副本)