为了测试将 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 服务器 4.10
- 从安装
zfsutils-linux
包安装 zfs
在Level 1
/dev/disk/by-id/...
techs forum 获得 Dexter_Kane 的帮助后,答案是在创建池时使用路径。例如
转换和修复现有池
好消息是您可以将现有的 ZFS RAID 阵列“转换”为使用这些标签,以防止将来发生这种情况,如果这种情况已经发生在您身上,甚至可以解决降级的阵列。
您只需确保池数据集未在使用中。例如,不要在池中执行命令,并确保它们没有通过 NFS 等共享。
执行转换后,输出
sudo zpool status
应类似于:进行的测试
我确保测试:
sudo zpool status
没有报告错误。