如何使用损坏的引导代码启动 FreeBSD 系统?

Ant*_*ioK 8 freebsd boot mbr

我有一个安装了 FreeBSD 的 HDD(或 SSD 或闪存驱动器),不知何故我破坏了引导代码(MBR 的前 446 字节)。我怎么能启动到这个 FreeBSD?

Ant*_*ioK 13

假设有 512 字节的类似 DOS 的 MBR,并且您已经用一些废话(或只是/dev/urandom输出)替换了它的前 446 个字节,或者以其他方式损坏了引导代码。在这种情况下,MBR 分区表就在它的位置,但系统无法从该设备启动。

想法是使用其他类似 BSD 的系统的加载程序来引导您的设备和内核。

  • 你应该开始从另一个硬盘、CD、闪存驱动器、PXE、通过 BMC 的虚拟媒体启动到任何类似 BSD 的操作系统(我已经尝试过 FreeBSD 6.0、7.0、8.0、8.1、8.2、8.3、8.4、9.2 和 Frenzy 1.4) /KVM 等
  • 在引导过程中,在加载器屏幕上点击“Escape to loader prompt”选项(旧版 FreeBSD 系统中为“6”,FreeBSD 9 中为“3”,Frenzy 中为“8”)
  • 通过键入卸载内核及其模块 unload
  • disk0s1a通过键入找出您要从中启动 FreeBSD 的设备(通常是类似)lsdev
  • 通过键入将此设备设置为“当前” set currdev="disk0s1a"
  • loder.conf通过键入从您的设备重新读取(以确保您的所有内核调整和黑客都适用)read-conf boot/loader.conf
  • 启动操作系统并享受 - 只需输入 boot-conf

当您的操作系统启动时,您可以修复引导代码。我使用sysinstall它 (Custom -> Partition, W, <Yes>, BootMgr("Install the FreeBSD Boot Manager"), <OK>, Q, <Exit>, <Exit Install>),但它自 9.0-RELEASE 以来已被弃用,并自 10.0-RELEASE 以来从基础中删除。另一种方法是使用存储在 中的备份/boot从中提取引导代码:

# gpart bootcode -b /boot/mbr /dev/yourbootdevice
Run Code Online (Sandbox Code Playgroud)