我曾尝试在 CentOS 7 上使用此命令破坏 MBR
dd if=/dev/zero of=/dev/sda bs=446 count=1
据我所知,引导扇区有 512 字节长度,前 446 字节是引导加载程序代码,其余的是分区表。
在重新安全模式下启动后,/dev/sda1
安装在/mnt
并且chroot /mnt
,我曾经grub2-install
修复启动加载程序,/dev/sda
但它没有成功再次启动。
我错过了什么?
我曾尝试在 CentOS 7 上使用此命令破坏 MBR
dd if=/dev/zero of=/dev/sda bs=446 count=1
据我所知,引导扇区有 512 字节长度,前 446 字节是引导加载程序代码,其余的是分区表。
在重新安全模式下启动后,/dev/sda1
安装在/mnt
并且chroot /mnt
,我曾经grub2-install
修复启动加载程序,/dev/sda
但它没有成功再次启动。
我错过了什么?
在 chrooting 之后,但在运行之前
grub2-install
,您应该检查是否/boot/grub/device.map
存在。通常,grub2-install
如果它不存在,则创建它,并尝试猜测哪个 Linux 设备对应于哪个 BIOS/GRUB 磁盘标识符。如果这个映射是错误的,你会得到奇怪的结果。除非您的系统非常特殊,否则如果您告诉 BIOS 从磁盘引导
/dev/sda
,那么/boot/grub/device.map
应该在其中包含以下行:如果运行时 device.map 文件不存在
grub2-install
,则它必须猜测 Linux 设备名称和 BIOS/GRUB 磁盘标识符之间的映射。有时grub2-install
会猜错。因此,如果/boot/grub/device.map
不存在,您应该在运行前使用正确的信息创建它,grub2-install
以确保成功修复。如果
/boot/grub/device.map
文件存在但有错误信息,您应该在运行之前修复它grub2-install
。现在你应该再次启动到救援模式,chroot 然后检查
/boot/grub/device.map
文件,然后运行grub2-install /dev/sda
.另一种可能:
当您覆盖 MBR 的前 446 个字节时,它包括用作 MBR 分区磁盘上的磁盘 UUID 的签名字节。如果 GRUB 配置使用磁盘 UUID 来选择 GRUB“根”分区,则 UUID 现在将不同。您的发行版应该有一个可用于轻松重建 GRUB 配置文件的命令。
在 Debian 风格的系统中,它可能是
update-grub
.在 RedHat 风格的系统(Fedora、CentOS 等)中,它可能是
grub2-mkconfig > /boot/grub/grub.cfg
或类似的。消息:FATAL: INT18: BOOT FAILURE根本与 Grub 无关,而是 VirtualBox 的问题。
显然,VirtualBox 检查分区表以验证分区是否已标记为活动分区,如果没有活动分区,它会报告错误,而不是尝试加载和运行 MBR 代码。
GRUB 不需要此检查,因为如果 GRUB 已安装到 MBR,无论哪个分区被标记为活动,它都会控制引导过程。
来源:https ://neosmart.net/wiki/fatal-int18-boot-failure/
将安装媒体映像仍插入虚拟 CD-ROM 驱动器也可能会这样做,至少对于较旧的 VirtualBox 版本:
https://www.dedoimedo.com/computers/fedora-fatal-18.html