断电后 FreeBSD 10 无法启动到 ZFS 根目录

断电后 FreeBSD 10 无法启动到 ZFS 根目录

今天安装新硬件时,我不小心切断了其中一台服务器的电源。这台服务器运行的是 FreeBSD 10,安装程序提供了 Root-on-ZFS。它总共有 36 个磁盘,分布在两个 RAID-Z2 中,它们属于同一个池(称为zroot)。

重新打开服务器后,服务器将无法启动。在启动菜单出现之前,会打印以下消息:

Loading /boot/defaults/loader.conf ZFS: i/o error - all block copies unavailable Warning: error reading file /boot/loader.conf

尽管有这些消息,系统仍继续引导内核,直到它在提示符处停止mountfrom>,我无法让它从那里继续。如果我输入zfs:zroot/ROOT/default,它只会显示unknown filesystem

但是我可以从 USB 启动,导入 zpool,并且可以读取/boot/defaults/loader.conf/boot/loader.conf。事实上,zpool 看起来完全没问题。

然后我尝试重新安装引导代码:

gpart bootcode -b /tmp/zroot/boot/pmbr -p /boot/gptzfsboot -i 1 da0

我尝试重新创建 zpool 缓存文件:

zpool set cachefile=/tmp/zroot/boot/zfs/zpool.cache zroot

我曾尝试手动告诉引导加载程序加载 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

目前系统是从 USB 启动的,因此我无法将池导入/

内容/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

答案1

好吧,别在意我在另一个回答中说了什么。无论如何,如果您遇到 ZFS 分区问题,您将无法启动单用户模式。有趣的是,在我发布答案后,我又遇到了电源问题,无法启动系统,就像您的问题一样。

所以我做了以下事情来恢复。

我使用了FreeBSD 10.0-RELEASELive CD(bootonly我认为是为了最大限度地减少下载)

  1. 启动 CD 并从选项中选择“Live CD”。(以 身份登录root
  2. 执行以下命令来使用附加分区geli;如果您有 root-on-ZFS 全盘加密设置,则必须输入密码

     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
    

我必须zpool import使用-f标志,因为断电问题没有export以正确的方式进行分区。

执行这些命令后,我重新启动了系统并且系统再次上线。

但是,我遇到了另一个问题,即bootpool启动后无法正确加载。

/boot文件夹是空的,它也是指向目录的符号链接/bootpool/boot。我还发现,在导入它创建的 zfs bootpool 分区时,/bootpool/boot/boot问题出boot在 下的 2 个文件夹中/bootpool

因此我之后执行了此操作reboot以手动加载启动池。

      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 符号链接再次起作用,我可以加载丢失的内核模块kldload linux或其他任何东西。

希望这会有所帮助,如果有人知道上述启动池问题的干净解决方法,请与我分享。

谢谢,

德拉科

参考:

答案2

您是否尝试过启动单用户模式并强制挂载 ZFS 分区?

# zfs mount -a

我的 FreeBSD 10(也是 Root-on-ZFS)遇到了电源故障,我设法使用上述命令让它启动。

让我知道事情的后续。

相关内容