我曾经遇到过这样的情况:我将数据移动到具有四个设备的新 zfs raidz 池中,其中一些是虚拟设备以方便迁移。系统完全挂在设备中间,将基于文件的设备替换为物理设备。
系统甚至没有响应 SysRq,必须进行物理重置。当它重新上线时,zfs 确定只有四分之二的设备在线,并开始重新同步并报告大量错误。我不知道如何阻止它这样做,即使卸载了池,它也会在后台继续运行。
当我设法在线获取完全正常的丢失设备时,它已经报告了许多错误。
这是否意味着 zfs 在重新同步时因设备丢失而损坏了数据?或者既然它已经拥有了原始设备,现在可以正确地重新同步吗?
当仅使用 2 个设备重新同步时,它会在 sda3 上重新同步,如下所示:
NAME STATE READ WRITE CKSUM
zfs_raid DEGRADED 0 0 38.5K
raidz1-0 DEGRADED 0 0 129K
sda3 ONLINE 0 0 0
sdc2 ONLINE 0 0 0
replacing-2 DEGRADED 0 0 3
/zfs_jbod2/zfs_raid/zfs.1 OFFLINE 0 0 0
sdb1 ONLINE 0 0 0 (resilvering)
/zfs_jbod/zfs_raid/zfs.2 ONLINE 0 0 0 (resilvering)
错误:25852 数据错误,使用“-v”作为列表
答案1
由于没有检查代码,这只是猜测,但我会说“不”。 ZFSraidz
大致相当于 RAID-5,任何有效的 RAID-5 实施都会在丢失两个驱动器时停止修复。
这就是关键:您丢失了两个驱动器。这将杀死任何单磁盘冗余系统,无论是 ZFS raidz1
、2 磁盘 RAID-1 还是没有备件的 RAID-5。
是的,您更换了第一个出现故障的驱动器,但根据您的问题,阵列尚未自行重建,因此它实际上仍然丢失。
吸取教训:使用双磁盘冗余,添加热备用,或两者兼而有之。如今,磁盘太大,无法足够快地重建,从而使单磁盘冗余不再足够好。