在今天安装新硬件时,我不由自主地断开了我们的服务器之一的电源。 该服务器运行安装程序提供的具有Root-on-ZFS的FreeBSD 10。 它共有36个磁盘,分布在两个属于同一个池(称为zroot )的RAID-Z2中。
重新启动服务器后,现在不再启动了。 在启动菜单显示之前,将打印以下消息:
Loading /boot/defaults/loader.conf ZFS: i/o error - all block copies unavailable Warning: error reading file /boot/loader.conf
尽pipe有这些消息,系统仍会继续引导内核,直到它停在一个mountfrom>提示符处,我不能从那里继续。 如果我inputzfs:zroot/ROOT/default ,它只是说unknown filesystem 。
然而,我可以从U盘启动,导入zpool,我可以读取/boot/defaults/loader.conf和/boot/loader.conf 。 实际上,zpool似乎是非常好的。
然后我尝试重新安装引导代码:
gpart bootcode -b /tmp/zroot/boot/pmbr -p /boot/gptzfsboot -i 1 da0
我试图重新创buildzpoolcaching文件:
zpool set cachefile=/tmp/zroot/boot/zfs/zpool.cache zroot
我试图手动告诉bootloader加载ZFS模块。
所有这些尝试仍然导致相同的行为,我现在完全卡在我可以做的,使系统再次启动。
编辑:
zpool list输出:
$ zpool list NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT zroot 97.8T 28.0T 69.7T 28% 1.33x ONLINE /tmp/zfs
目前系统是从U盘启动的,因此我无法将池导入/
/boot/loader.conf内容:
$ cat /boot/loader.conf zfs_load="YES" ipmi_load="YES"
编辑2:
$ zpool status pool: zroot state: ONLINE scan: config: NAME STATE READ WRITE CKSUM zroot ONLINE 0 0 0 raidz2-0 ONLINE 0 0 0 gptid/f8c57b3a-083e-11e4-b11b-002590e745f4 ONLINE 0 0 0 gptid/f97b7e8b-083e-11e4-b11b-002590e745f4 ONLINE 0 0 0 gptid/fa3c41d9-083e-11e4-b11b-002590e745f4 ONLINE 0 0 0 gptid/faf62101-083e-11e4-b11b-002590e745f4 ONLINE 0 0 0 gptid/fbb19e1b-083e-11e4-b11b-002590e745f4 ONLINE 0 0 0 gptid/fc6b75db-083e-11e4-b11b-002590e745f4 ONLINE 0 0 0 gptid/fd26cd36-083e-11e4-b11b-002590e745f4 ONLINE 0 0 0 gptid/fddb4b8e-083e-11e4-b11b-002590e745f4 ONLINE 0 0 0 gptid/fe9a55f6-083e-11e4-b11b-002590e745f4 ONLINE 0 0 0 gptid/ff582110-083e-11e4-b11b-002590e745f4 ONLINE 0 0 0 gptid/001713d1-083f-11e4-b11b-002590e745f4 ONLINE 0 0 0 gptid/00d90b6c-083f-11e4-b11b-002590e745f4 ONLINE 0 0 0 gptid/0192be91-083f-11e4-b11b-002590e745f4 ONLINE 0 0 0 gptid/023ea058-083f-11e4-b11b-002590e745f4 ONLINE 0 0 0 gptid/02fb8ee4-083f-11e4-b11b-002590e745f4 ONLINE 0 0 0 gptid/03ab78ec-083f-11e4-b11b-002590e745f4 ONLINE 0 0 0 gptid/04632542-083f-11e4-b11b-002590e745f4 ONLINE 0 0 0 gptid/052144fd-083f-11e4-b11b-002590e745f4 ONLINE 0 0 0 raidz2-1 ONLINE 0 0 0 da18 ONLINE 0 0 0 da19 ONLINE 0 0 0 da20 ONLINE 0 0 0 da21 ONLINE 0 0 0 da22 ONLINE 0 0 0 da23 ONLINE 0 0 0 da24 ONLINE 0 0 0 da25 ONLINE 0 0 0 da26 ONLINE 0 0 0 da27 ONLINE 0 0 0 da28 ONLINE 0 0 0 da29 ONLINE 0 0 0 da30 ONLINE 0 0 0 da31 ONLINE 0 0 0 da32 ONLINE 0 0 0 da33 ONLINE 0 0 0 da34 ONLINE 0 0 0 da35 ONLINE 0 0 0 errors: No known data errors
好吧,不要介意我在其他答案中所说的话。 无论如何,如果您遇到ZFS分区问题,您将无法启动到单用户模式。 有趣的是,我发布了我的答案后,又遇到了电源问题,无法启动进入系统,就像你的问题一样。
所以这就是我做回来的。
我使用了一个FreeBSD 10.0-RELEASE Live CD(我认为这是一个bootonly – 最小化下载)
root身份login) 执行以下命令以使用geli附加分区; 如果您拥有ZFS全盘encryption设置,则必须input密码
mkdir /tmp/bootpool zpool import -f bootpool zfs set mountpoint=/tmp/bootpool bootpool zfs mount -a cp /tmp/bootpool/boot/encryption.key /tmp/ zfs umount -a zfs set mountpoint=/bootpool bootpool zpool export bootpool geli attach -k /tmp/encryption.key /dev/ada0p4 zpool import -f -R /mnt zroot
我必须使用-f标志zpool import ,因为关机问题没有以正确的方式export分区。
执行这些命令后,我重新启动,系统再次联机。
尽pipe如此,我还遇到bootpool在启动后无法正确加载的问题。
/boot文件夹是空的,它也是到/bootpool/boot目录的符号链接。 我还发现,在导入zfs bootpool分区时,它创build了/bootpool/boot/boot所以问题是/bootpool下的2个boot文件夹。
所以我在reboot之后手动加载了bootpool。
zpool export bootpool zpool import -f bootpool (cd to root and remove the old symbolic link `boot`) cd / rm boot (notice the double `boot` directory issue) ln -sf bootpool/boot/boot/
就这样,/ boot符号链接再次工作,我可以加载缺less的内核模块,例如kldload linux或其他。
希望有所帮助,如果有人知道上面的bootpool问题的清除修复,请与我分享。
谢谢,
德拉科
参考文献:
您是否尝试启动到单用户模式并强制挂载ZFS分区?
# zfs mount -a
我在FreeBSD 10(也是Root-on-ZFS)上遇到了电源故障,并使用上面的命令设法启动它。
让我知道事情的后续。