据微软称Bootrec /FIXBOOT 的作用如下:
"This option writes a new boot sector to the system partition by using a boot sector that's compatible with Windows Vista or Windows 7"
这就是 Bootrec /FIXMBR 的作用:
"This option writes a Windows 7 or Windows Vista-compatible MBR to the system partition"
现在 MBR 不就是一个类型引导扇区?它还能修复哪些其他类型的引导扇区?我很困惑我该使用哪个而不是哪个——mbr 不是 Windows 使用的唯一引导扇区吗?
答案1
这是一个非常有趣的问题。关于这个主题有很多链接,但它们在描述两者之间的区别/关系时含糊不清。我发现的关于 Windows 操作系统硬盘配置的最佳描述是这个: http://www.ntfs.com/hard-disk-basics.htm。
看起来 MBR 和分区表位于驱动器上的同一扇区中。MBR 较小,因为它是驱动器上最先的内容,然后使用分区表继续引导到特定操作系统。这两个命令选项有效地修复了引导链中的不同链接:
/fixmbr 替换了读取分区表以查找操作系统可能位于何处的信息和小型可执行文件。因此,它存在于任何已格式化的驱动器上,并有效地存在于读取硬盘上的下一个小位,该位告知操作系统应该位于何处。本质上,这不一定是 Windows 特有的项目。
/fixboot 替换下一部分 - 分区表中指向操作系统实际可加载可执行文件位置的条目。因此,这是在修复启动过程链中的下一个环节。此命令确实会创建一个特定于 Windows 的结果,因为它会提醒硬盘驱动器在哪里可以找到特定的 Windows。
答案2
/FixMBR
写入磁盘的引导扇区(通常称为MBR
),同时/FixBoot
写入分区的引导扇区(通常称为VBR
或PBR)。
所有这些都归结为 Windows 如何在 BIOS(非 UEFI)系统上启动。众所周知,由于 BIOS 固件的限制(它以实模式运行,无法访问超过 1 MiB 的 RAM),它无法加载和执行实际操作系统(例如 Windows 或 Linux 内核)。因此系统引导程序执行过程从小代码到大代码分阶段进行。这就是为什么我们有引导加载程序。
在第一阶段(或零阶段),BIOS 将选定磁盘的第一个扇区加载到 RAM 中,并从预定义的偏移量开始执行。它发生在所有兼容 BIOS 的系统上,无论安装的操作系统是什么。因此第一个部门参与引导(strapp)的称为引导扇区。
那么 MBR 不就是引导扇区的一种吗?
是的。MBR 是我们最常接触的引导扇区。/FixMBR
写道“到系统分区”不正确。MBR 写入磁盘的第一个扇区(即使在 GPT 磁盘上)。
MBR 不是 Windows 使用的唯一引导扇区吗?
不。它也使用 VBR/PBR。
根据安装的引导加载程序和操作系统,分区上也可能存在更多引导扇区。如果视窗,MBR 中的可执行代码找到活动分区或者启动分区(Windows 称之为系统分区) 位于分区表 (也是 MBR 的一部分) 中,并执行该分区的引导扇区 (VBR),其中包含启动管理器代码。现在 VBR 已经足够大,可以理解文件系统结构,因此它执行\bootmgr
文件(放置在活动分区的根目录中),该文件从 BCD 文件(通常是\Boot\BCD
)读取其配置并运行winload.exe
(如果 BCD 包含多个条目,则显示选择菜单),该文件运行 Windows 内核。查看更多详细信息这里。
但并非所有操作系统的启动方式都相同。GRUB(流行的引导加载程序Linux例如,world 将自身安装到 MBR,并执行写入 MBR 后几个扇区的下一阶段。它从/grub/grub.cfg
(放置在/boot
分区中,可能与安装在 的 Linux 安装分区不同/
)读取其配置并加载 Linux 内核(或显示选择菜单,如果grub.cfg
包含多个条目)。GRUB 和其他引导加载程序(如 SYSLINUX)也可以写入 VBR。
在多重引导系统 grub.cfg
通常包含一个 Windows 条目,因此 GRUB(而非 Windows)MBR 会在 VBR 中执行 BootMgr(即使它不在活动分区),当用户选择 Windows 条目时。更深入地讲,GRUB 可以配置为直接运行\bootmgr
可执行文件(通过使用ntldr
命令而不是默认chainloader
),完全绕过VBR可执行代码。
一旦你决定回到 Windows 的原生启动,运行BootRec /FixMBR
,GRUB 就消失了。相反,我们也可以通过使用第三方工具(如 EasyBCD 或 BootICE)修改 BCD 来使 Windows 的 BootMgr 链式加载 GRUB,或者使用 Windowsbcdedit
工具添加新条目。
重写 VBR通常不需要,除非您意外(或故意)将 GRUB 写入 Windows 活动分区的 VBR。在这种情况下,BootRec /FixBoot
也需要成功恢复 Windows 的本机启动链。
笔记上述两个命令都只是重写 MBR/VBR 的可执行部分,其他部分保持不变,例如 MBR 中的分区表。就像 MBR 中的分区表描述了分区布局一样,BIOS 参数块在NTFS可变比特率描述文件系统布局。/FixBoot
无法修复问题苯并噻嗪例如,
如果您替换 Windows 活动分区,或将安装移动到另一个磁盘,从而导致分区的起始扇区号发生变化,Windows 将无法启动,即使您修复 MBR/VBR 并重新创建/修复 BCD 条目(使用bcdboot
/ bcdedit
,如果磁盘标识符/签名更改,因为这是 BCD 存储条目中的硬编码)。在 BPB 字段之一中,第一个分区扇区的数量是硬编码的,需要修复。您可以查看详细信息这里。