插入驱动器时 Zpool 会降级

Pro*_*ter 6 zfs

为了测试添加 ZFS 日志设备会对 ZFS 阵列产生什么影响,我决定创建一个 zpool 并执行一些基准测试,然后插入 SSD 充当 ZIL。

不幸的是,每当我在创建 zpool 后插入 SSD,或在创建池后拔出 SSD(任何导致创建池后驱动器号发生更改的情况),然后重新启动,我的池都会降级通过运行显示sudo zpool status

  pool: zpool1
 state: DEGRADED
status: One or more devices could not be used because the label is missing or
    invalid.  Sufficient replicas exist for the pool to continue
    functioning in a degraded state.
action: Replace the device using 'zpool replace'.
   see: http://zfsonlinux.org/msg/ZFS-8000-4J
  scan: none requested
config:

    NAME                     STATE     READ WRITE CKSUM
    zpool1                   DEGRADED     0     0     0
      mirror-0               DEGRADED     0     0     0
        sda                  ONLINE       0     0     0
        1875547483567261808  UNAVAIL      0     0     0  was /dev/sdc1
Run Code Online (Sandbox Code Playgroud)

我怀疑问题源于我使用驱动器号创建池的事实,如下所示:

sudo zpool create -f zpool1 mirror /dev/sdb /dev/sdc
Run Code Online (Sandbox Code Playgroud)

问题

对我来说幸运的是,这只是一个测试,没有丢失数据的风险,但如果在现实场景中发生这种情况,从这个问题中恢复的最佳方法是什么?显然驱动器仍然存在并且准备就绪。

有没有更好的方法来创建 zpool 而不使用驱动器号来/dev/sda避免将来出现此问题?我注意到Ubuntu 文档指出以与我相同的方式创建 zpool。

额外信息

  • 操作系统:Ubuntu 16.04 服务器 4.10
  • zfsutils-linux从安装包安装zfs

Pro*_*ter 6

在1 级技术论坛上从 Dexter_Kane 获得帮助后,答案是/dev/disk/by-id/...在创建池时使用路径。

例如

sudo zpool create zpool1 mirror \
/dev/disk/by-id/ata-WDC_WD30EFRX-68EUZN0_WD-WCC4N0PKS6S7 \
/dev/disk/by-id/ata-WDC_WD30EFRX-68EUZN0_WD-WCC4N7VXZF6H
Run Code Online (Sandbox Code Playgroud)

转换和修复现有池

好消息是,您可以将现有的 ZFS RAID 阵列“转换”为使用这些标签,从而防止将来发生这种情况,如果这种情况已经发生在您身上,甚至可以解决降级的阵列。

sudo zpool export [pool name]
sudo zpool import -d /dev/disk/by-id [pool name]
Run Code Online (Sandbox Code Playgroud)

您只需确保池数据集未在使用中即可。例如,不要在池内执行命令,并确保它们不会通过 NFS 等共享。

执行转换后,输出sudo zpool status应类似于:

  pool: zpool1
 state: ONLINE
  scan: none requested
config:

        NAME                                          STATE     READ WRITE CKSUM
        zpool1                                        ONLINE       0     0     0
          mirror-0                                    ONLINE       0     0     0
            ata-WDC_WD30EFRX-68EUZN0_WD-WCC4N0PKS6S7  ONLINE       0     0     0
            ata-WDC_WD30EFRX-68EUZN0_WD-WCC4N7VXZF6H  ONLINE       0     0     0
Run Code Online (Sandbox Code Playgroud)

已进行测试

我确保测试一下:

  • 使用 by-id 路径确实防止了问题的发生。
  • 在池处于降级状态时写入一些数据后,在执行导出/导入后我仍然可以读取所有文件,并且sudo zpool status没有报告任何错误。