为什么我的 ZFS 池“不可用”?

为什么我的 ZFS 池“不可用”?

我刚刚更换了一个硬盘,它是两个不同冗余池的一部分,现在两个池都不可用......

细节:

  • 有四个驱动器:2x4TB(da0ada1)以及 2x3TB(da1da2)。
  • 一个池是 RAIDZ1,由全部 3TB 驱动器和 4TB 驱动器的 3TB 部分组成。
  • 另一个池是一个镜像,由两个较大驱动器的剩余空间组成。
  • 我用另一个相同大小的硬盘替换了其中一个 4TB 硬盘(da0)......

我预计两个池都会进入“降级”模式,直到我将替换件拼接成两个部分并将每个部分添加到其池中。

相反,计算机突然重新启动,恢复后,两个池都处于“不可用”状态:

      pool: aldan
     state: UNAVAIL
    status: One or more devices could not be opened.  There are insufficient
            replicas for the pool to continue functioning.
    action: Attach the missing device and online it using 'zpool online'.
       see: http://illumos.org/msg/ZFS-8000-3C
      scan: none requested
    config:

            NAME                      STATE     READ WRITE CKSUM
            aldan                     UNAVAIL      0     0     0
              raidz1-0                UNAVAIL      0     0     0
                1257549909357337945   UNAVAIL      0     0     0  was /dev/ada1p1
                1562878286621391494   UNAVAIL      0     0     0  was /dev/da1
                8160797608248051182   UNAVAIL      0     0     0  was /dev/da0p1
                15368186966842930240  UNAVAIL      0     0     0  was /dev/da2
            logs
              4588208516606916331     UNAVAIL      0     0     0  was /dev/ada0e

      pool: lusterko
     state: UNAVAIL
    status: One or more devices could not be opened.  There are insufficient
            replicas for the pool to continue functioning.
    action: Attach the missing device and online it using 'zpool online'.
       see: http://illumos.org/msg/ZFS-8000-3C
      scan: none requested
    config:

            NAME                     STATE     READ WRITE CKSUM
            lusterko                 UNAVAIL      0     0     0
              mirror-0               UNAVAIL      0     0     0
                623227817903401316   UNAVAIL      0     0     0  was /dev/ada1p2
                7610228227381804026  UNAVAIL      0     0     0  was /dev/da0p2

我现在拆分了新驱动器,但尝试“zpool replace”时,系统会提示“池不可用”。我非常确定,如果我直接断开新驱动器,两个池都会恢复正常(如果降级)。为什么它们现在都“不可用”?根据 camcontrol,所有设备都在线:

<ATA TOSHIBA MG03ACA4 FL1A>        at scbus0 target 0 lun 0 (pass0,da0)
<ATA Hitachi HUS72403 A5F0>        at scbus0 target 1 lun 0 (pass1,da1)
<ATA TOSHIBA HDWD130 ACF0>         at scbus0 target 2 lun 0 (pass2,da2)
<M4-CT128M4SSD2 0309>              at scbus1 target 0 lun 0 (pass3,ada0)
<MB4000GCWDC HPGI>                 at scbus2 target 0 lun 0 (pass4,ada1)

操作系统是 FreeBSD-11.3-STABLE/amd64。有什么问题?

更新:不,我在拔出磁盘之前没有明确offline指定设备——而且它已经在返回亚马逊的路上了。我很惊讶,这样的脱机是必要的——ZFS 难道不能处理突然任何硬盘坏了?它难道不应该同样准备好让技术人员用另一个硬盘替换坏掉的硬盘吗?它为什么会这样大发雷霆?

我有备份,可以从头重建池 - 但我想弄清楚如何避免这样做。或者,如果不可能,提交适当的错误报告...

我完全拔掉了新驱动器,但池的状态并没有改变...也许,我需要重新启动 - 无论这是否有帮助,这都是相当令人失望的。

更新 2:多次重启,无论是否连接新磁盘,都没有帮助。但是,zpool import正如我所料,列出了两个池:已降级(但可用!)。例如:

   pool: lusterko
     id: 11551312344985814621
  state: DEGRADED
 status: One or more devices are missing from the system.
 action: The pool can be imported despite missing or damaged devices.  The
        fault tolerance of the pool may be compromised if imported.
   see: http://illumos.org/msg/ZFS-8000-2Q
 config:

        lusterko                  DEGRADED
          mirror-0                DEGRADED
            ada1p2                ONLINE
            12305582129131953320  UNAVAIL  cannot open

zpool status仍坚持认为,全部设备不可用...还有希望吗?

答案1

也许您在移除旧驱动器之前没有将其离线。(ZFS 可能认为逻辑驱动器(您的池)已损坏,而控制器认为它们没有问题。如果磁盘柱面大小存在差异,就会发生这种情况 - 这种情况很少见,但可能会发生。)

摆脱这种情况的方法:

  • 获取磁盘名称zpool status
  • 使用 diskinfo 来识别上面提到的不可用驱动器的物理位置
  • cfgadm -c unconfigure重新配置它cfgadm -c configure
  • 将新磁盘联机 -zpool online zone
  • 更新区域- zpool replace zonezpool status zone应显示在线)
  • 运行zpool replace命令来更换磁盘

相关内容