FreeBSD 引导加载程序无法从正确的池引导

FreeBSD 引导加载程序无法从正确的池引导

我已在一个具有两个 ZFS 池的系统上安装了 FreeBSD 10.1,该系统从另一个硬盘启动,该硬盘仅包含引导加载程序。主池磁盘连接到 PCI-E 卡上的 SATA 端口,而引导加载程序尝试从错误的池(第二个池,直接连接到主板上的 SATA 端口)引导。

错误如下:

Can't find /boot/zfsloader
FreeBSD/x86 boot
Default: storage:/boot/kernel/kernel
boot:
/
Cant't find /boot/kernel/kernel
FreeBSD/x86 boot
Default: storage:/boot/kernel/kernel
boot: 

我尝试在 /mnt/boot/loader.conf 中设置 vfs.root.mountfrom="zfs:zpool" 或 "zfs:zpool/ROOT" 但它不起作用。

如果我拔下第二个池的磁盘,系统将正确启动。

多谢。

答案1

好吧,我自己想出来了。

ZFS Loader 不允许设置要从中启动的根池,但它会尝试通过池化 BIOS 的启动优先级顺序来猜测正确的根池。

为了使其从正确的池启动,我在 BIOS 中将包含引导加载程序的驱动器设置为第一个启动设备,将属于根镜像池的驱动器设置为第二个和第三个。

答案2

尝试cp -r /boot从正确的池到错误的池。确保bootfs错误池上的属性为空或设置为正确的池。

答案3

从适当的分发 CD 启动进入“live CD”模式。以 root 身份登录。

现在,假设您的可启动池称为“tank”;

导入池而不安装它 -

zpool import -N -f tank

然后适当设置 bootfs 属性。常见的引导文件系统名称是“tank/ROOT/default”;

zpool set bootfs=tank/ROOT/default tank

这就是可启动池的内容。对不可启动池重复此操作,这次将 bootfs 属性设置为“”。到这里,你就完成了。

相关内容