![FreeBSD 引导加载程序无法从正确的池引导](https://linux22.com/image/36068/FreeBSD%20%E5%BC%95%E5%AF%BC%E5%8A%A0%E8%BD%BD%E7%A8%8B%E5%BA%8F%E6%97%A0%E6%B3%95%E4%BB%8E%E6%AD%A3%E7%A1%AE%E7%9A%84%E6%B1%A0%E5%BC%95%E5%AF%BC.png)
我已在一个具有两个 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 属性设置为“”。到这里,你就完成了。