MBR 引导代码创建

MBR 引导代码创建

创建新分区(使用类似 的磁盘实用程序fdisk)究竟有什么作用?它只创建分区表还是也创建 MBR 引导代码?

答案1

根据Unix 哲学程序应该只做一件事,并做好它。如果某个工具应该修改分区表,那么它就不应该费心修改引导代码(或创建文件系统等)。

当然,有些工具功能臃肿,功能齐全,fdisk但这不是其中之一。下面是我对它行为的分析。这证明了完全有可能在保持 MBR 引导代码不变的情况下创建新分区。

我不知道每个平台上的所有磁盘实用程序。本回答仅涵盖 Linuxfdisk实用程序。


的情况下fdisk

测试平台:Ubuntu 16.04.2 LTS,fdisk来自util-linux 2.27.1


1. 零文件

我创建了一个空文件

dd if=/dev/zero of=mydisk bs=1M count=1

然后我运行fdisk mydisk并从扇区中添加了一个单个分区632047,我编写了分区表。

输出hexdump -C mydisk

00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
000001b0  00 00 00 00 00 00 00 00  bb 50 d8 1d 00 00 00 01  |.........P......|
000001c0  01 00 83 20 20 00 3f 00  00 00 c1 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  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00100000

如您所见,第一个非零字节位于0x1b8;最后一个非零字节位于0x1ff。将其与现代标准 MBR 的结构你会发现这是来自磁盘签名启动签名。之后我也设置了可启动标志,但这对引导代码没有影响。没有出现有意义的引导代码,它无法启动。


2. MBR 包含垃圾、无效签名

有了同样的文件,我用垃圾覆盖了它的 MBR:

dd if=/dev/urandom of=mydisk bs=512 count=1 conv=notrunc

并且我确保没有启动签名(正确的签名应该是0xAA55小端序,我使用了0x1234):

echo -ne "\x34\x12" | dd of=mydisk bs=1 count=2 seek=510 conv=notrunc

然后我像以前一样创建了一个分区。所有垃圾都被覆盖了fdisk,输出hexdump -C mydisk与以前完全一样。引导代码区域已清零,因此无法启动。


3. 包含垃圾、有效签名的 MBR

同一个文件。再次写入垃圾信息:

dd if=/dev/urandom of=mydisk bs=512 count=1 conv=notrunc

这次我设置了正确的启动签名(0xAA55小端序):

echo -ne "\x55\xAA" | dd of=mydisk bs=1 count=2 seek=510 conv=notrunc

然后fdisk mydisk让我检查一下半有效分区表。我删除了所有分区,只新建了一个和之前一模一样的分区。运行hexdump -C mydisk后发现,虽然分区表区域被修改了,但引导区中的垃圾仍然存在。引导代码区域没有变化。

我还没有测试过fdisk包含非垃圾、完全合理的引导代码的 MBR。我坚信该工具不会分析代码。在这种情况下,它允许垃圾存在,因此它应该对任何数据执行相同的操作。


结论

fdisk行为取决于启动签名0xAA55–在 512 字节 MBR 的最末端以小端格式写入的值。

  • fdisk找到签名时,它会认为已经存在有效的 MBR。即使分区表中发生了一些更改,它也不会触及引导代码区域。

  • fdisk找不到有效签名时,它会认为没有有效的 MBR,因此它会在写入新分区表时创建一个。在这种情况下,引导代码区域将被清零(无法启动)。

在任何一种情况下,都不会fdisk创建自己的实际启动的引导代码。

答案2

它创造了膜生物反应器如果不存在,则在其中为当前分区方案创建分区和卷表。此信息会随着方案的变化而更新。

MBR 指向卷引导记录(VBR;又称引导扇区)用于活动分区。当操作系统安装在该分区上时,它会将其引导加载程序代码放在 MBR 中,并将其引导扇区代码放在其卷的 VBR 中。然后,引导加载程序会在多重引导的情况下提供可引导的 VBR 供用户选择,或者在其配置中引导至默认 VBR。

相关内容