使用 dd 仅复制 64 字节分区表

使用 dd 仅复制 64 字节分区表

鉴于:

===MBR INFO===
MBR SECTOR NAME             BYTES
code area                   440(max. 446)
disk signature (optional)   4
Usually nulls; 0x0000       2
Table of primary partitions 64(Four 16-byte entries, IBM partition table scheme)
MBR signature;0xAA55        2

MBR, total size: 446 + 64 + 2 = 512

我相信复制命令只是64 字节分区表如下:

dd obs=2 seek=223 count=32 if=/path/to/some_mbr.bin of=/dev/sda

它是否正确,

以及/或者有更好的方法吗?

答案1

如果 some_mbr.bin 是完整的 mbr,您也需要跳过输入文件中的代码。

dd bs=1 if=/path/to/some_mbr.bin of=/dev/sda skip=446 seek=446 count=64

当然,您也可以vi -b /path/to/some_mbr.bin /dev/sda使用 yank 和 put 来做到这一点(如果您敢的话)。

答案2

你试过了吗?我刚刚试过了,输出文件是 16KB,而不是 64 字节(试着查看你链接到的手册页以及 obs 和 ibs 的值)。

尝试将块大小(读取和写入)设置为 2,并跳过读取您不想要的输入,而不是读取所有内容并只写入您想要的内容。

因此你最终会得到类似这样的结果:

dd bs=2 skip=223 count=32 if=/path/to/some_mbr.bin of=/dev/sda

如果块大小为 1 而不是 2,那么阅读起来也会更容易,这意味着您不需要再在脑海中将数字加倍或减半。

在我有足够的勇气写入 mbr 之前,我会尝试读取 mbr 并将其写入文件并使用十六进制查看器进行检查。

相关内容