操作 GPT 磁盘上的保护性 MBR

操作 GPT 磁盘上的保护性 MBR

我想将类型 0x00 的空分区添加到 GPT 格式磁盘的保护性 MBR 的开头。我找到了一个方式来做到这一点,但该方法依赖于 Linux 版本中不存在的 fdisk 增强功能(具体来说,-p/-ffdisk 上的可用选项)自由BSD但不是Linux)。我还找到了一个方式添加一个空分区第一个分区。

我的保护性 MBR 当前有一个 0xEE 类型的条目。我想将其作为分区表中的第二个条目,并在其前面添加一个类型为 0x00 的空条目,而不会干扰 GPT 分区表或磁盘上的任何 GPT 分区。如何才能做到这一点?可以使用 编辑保护性 MBR fdisk -t dos <device>,但fdisk由于没有可用的空闲扇区而拒绝添加分区。而且我不确定删除保护性MBR分区并重新创建两个新分区是否会影响磁盘上的GPT分区。

答案1

这可以使用 来完成dd

保存 MBR 以防需要恢复:

# dd bs=1 count=512 status=none if=/dev/sdb > foo

查看 MBR 分区表(从扇区 1 的字节偏移 446 开始的 64 字节)。示例输出经过格式化hexdump,以便每个分区表条目占据一行。

# dd if=/dev/sdb bs=1 skip=446 count=64 status=none | hexdump -ve '16/1 " %02X" "\n"'
    00 01 00 00 EE FF FF FF 01 00 00 00 FF FF FF FF
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

如果需要,复制第一个分区的行并将第零字节更改为 0x80 以设置该分区的引导标志。将第四个字节更改为0x00,将分区设置为空类型。 (每个字节的重要性在维基百科.) 将第一个分区替换为编辑后的行,并将原来的第一个分区移动到第二个位置。

    80 01 00 00 00 FF FF FF 01 00 00 00 FF FF FF FF
    00 01 00 00 EE FF FF FF 01 00 00 00 FF FF FF FF
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

将修改后的十六进制子串写入磁盘,在0xEE分区前添加一个空分区:

# printf '\x80\x01\x00\x00\x00\xFF\xFF\xFF\x01\x00\x00\x00\xFF\xFF\xFF\xFF\x00\x01\x00\x00\xEE\xFF\xFF\xFF\x01\x00\x00\x00\xFF\xFF\xFF\xFF' | dd bs=1 seek=446 of=/dev/sdb

验证更改:

# dd if=/dev/sdb bs=1 skip=446 count=64 status=none | hexdump -ve '16/1 " %02X" "\n"'
80 01 00 00 00 FF FF FF 01 00 00 00 FF FF FF FF
00 01 00 00 EE FF FF FF 01 00 00 00 FF FF FF FF
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

相关内容