插入驱动器时 Zpool 性能下降

插入驱动器时 Zpool 性能下降

为了测试添加 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

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

sudo zpool create -f zpool1 mirror /dev/sdb /dev/sdc

问题

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

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

额外信息

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

答案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

改造和修复现有泳池

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

sudo zpool export [pool name]
sudo zpool import -d /dev/disk/by-id [pool name]

您只需确保池数据集未被使用即可。例如,不要在池内执行命令,并确保它们未通过 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

测试执行

我确保测试一下:

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

相关内容