在GUID分区表中,我如何知道有多少个分区?

问题描述

我有一个带有3个分区的USB映像:

  • 分区1:FAT32
  • 分区2:exFAT
  • 分区3:NTFS

我正在制作一个通过分区的程序,但是我不确定如何知道程序应查找多少个分区。通过查看原始数据,我可以看到它具有预期的三个分区,但是当然我的程序不知道这一点。

我试图查看“ 80(0x50)4字节数组中分区条目的数量”,但在我的示例中,它给了我128(0x80000000)的值。

这是我的示例图片中的十六进制屏幕截图。

保护性MBR

enter image description here

分区表标题(LBA 1)

enter image description here

signature=- HexLe=4546492050415254 HexBe=5452415020494645
revisionHexLe=000001 HexLe=4546492050415254 HexBe=5452415020494645
headerSizeDec=92 HexLe=5C000000 HexBe=0000005C
crc2OfHeaderDec=82845332 HexLe=941EF004 HexBe=04F01E94
reservedADec=0 HexLe=00000000 HexBe=00000000
currentLBADec=1 HexLe=0100000000000000 HexBe=0000000000000001
backupLBADec=30277631 HexLe=FFFFCD0100000000 HexBe=0000000001CDFFFF
firstUsableLBAForPartitionsDec=34 HexLe=2200000000000000 HexBe=0000000000000022
lastUsableLBADec=30277598 HexLe=DEFFCD0100000000 HexBe=0000000001CDFFDE
diskGUIDHexMe=8B3F71C5AF9D744D9CA3EBFF7D1F9DC9
startingLBAOfArrayOfPartitionEntriesDec=2 HexLe=0200000000000000 HexBe=0000000000000002
numberOfPartitionEntriesInArrayDec=128 HexLe=80000000 HexBe=00000080
sizeOfASinglePartitionEntryDec=128 HexLe=80000000 HexBe=00000080
crc2OfPartitionEntriesArrayDec=-2043475264 HexLe=C00A3386 HexBe=86330AC0
reservedBDec=00000000 HexLe=00000000 HexBe=00000000
We are going to look for partitions now at offset 1024

分区条目(LBA 2–33)

enter image description here

解决方法

有点晚了,你现在可能已经想通了。

参考下图 wiki 页。 Wiki 页面本身将为您提供更多信息。

仅通过查看 LBA1 的 GUID 分区表 header 无法确定分区数,您必须检查分区 entries 并检查 Partition type GUID 是否显示它是否未使用(全为零)。

偏移量 80 (=0x50) 处标头中的分区条目数是由偏移量 84 处单个分区条目的大小确定的条目总数。

gpt

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...