FreeNAS zfs zraid 两个故障磁盘

FreeNAS zfs zraid 两个故障磁盘

我有一台 FreeNAS 8.3 文件服务器,其中 ZFS 在 raidz 中运行四个 3TB 磁盘。

camcontrol 设备列表:

          在 scbus0 目标 0 lun 0 (pass0,ada0)
          在 scbus1 目标 0 lun 0 (pass1,ada1)
          在 scbus2 目标 0 lun 0 (pass2,ada2)
          在 scbus3 目标 0 lun 0 (pass3,ada3)
       在 scbus6 目标 0 lun 0 (pass4,da0)

上周我注意到四个磁盘中有两个开始出现故障:

freenas smartd[2241]: 设备:/dev/ada0,24 个当前无法读取(待处理)的扇区
freenas smartd[2241]: 设备:/dev/ada0,24 个脱机无法纠正的扇区
freenas smartd[2241]: 设备:/dev/ada2,24 个当前无法读取(待处理)的扇区
freenas smartd[2241]: 设备:/dev/ada2,24 个脱机无法纠正的扇区

但是 zpool status -v 没有显示任何错误。我对 ZFS 不太熟悉,这是由另一个管理员设置的。出于某种原因,我以为我可以简单地逐个更换故障驱动器。这就是我接下来要做的。

2014-10-13.17:41:29 zpool 离线 vol1 gptid/24726389-df9e-11e1-9963-c860009da3f8
2014-10-13.18:19:24 zpool 替换 vol1 15380758640793782293 gptid/f1a3e8b8-5326-11e4-966d-c860009da3f8
2014-10-13.18:21:28 zpool 分离 vol1 15380758640793782293

重新同步过程完成后,我收到一个快照数据损坏的错误。系统设置为每小时快照一次,保存两周,每天快照一次,保存六个月。

[root@freenas]~# zpool 状态 -v
  池:vol1
 状态: 在线
状态:一个或多个设备发生错误,导致数据
        损坏。应用程序可能会受到影响。
操作:如果可能,恢复有问题的文件。否则,恢复
        整个池的备份。
   参见:http://www.sun.com/msg/ZFS-8000-8A
  扫描:2014 年 10 月 14 日星期二 22:10:59,耗时 27 小时 51 分钟,重新镀银 2.25T,出现 1 个错误
配置:

        名称 状态 读写 CKSUM
        vol1 在线 0 0 1
          raidz1-0 在线 0 0 2
            gptid/f1a3e8b8-5326-11e4-966d-c860009da3f8 在线 0 0 0
            gptid/24f91374-df9e-11e1-9963-c860009da3f8 在线 0 0 0
            gptid/25865cb9-df9e-11e1-9963-c860009da3f8 在线 0 0 0
            gptid/260cd97a-df9e-11e1-9963-c860009da3f8 在线 0 0 0

错误:在以下文件中检测到永久性错误:
 [电子邮件保护]:/home/.../some.pdf

现在这个文件很久以前就被删除了,所以我根本不关心它,我想我可以删除快照,但这让事情变得更糟:

[root@freenas]~# zfs 销毁[电子邮件保护]
[root@freenas]~# zpool 状态 -v
  池:vol1
 状态: 在线
状态:一个或多个设备发生错误,导致数据
        损坏。应用程序可能会受到影响。
操作:如果可能,恢复有问题的文件。否则,恢复
        整个池的备份。
   参见:http://www.sun.com/msg/ZFS-8000-8A
  扫描:2014 年 10 月 14 日星期二 22:10:59,耗时 27 小时 51 分钟,重新镀银 2.25T,出现 1 个错误
配置:

        名称 状态 读写 CKSUM
        vol1 在线 0 0 1
          raidz1-0 在线 0 0 2
            gptid/f1a3e8b8-5326-11e4-966d-c860009da3f8 在线 0 0 0
            gptid/24f91374-df9e-11e1-9963-c860009da3f8 在线 0 0 0
            gptid/25865cb9-df9e-11e1-9963-c860009da3f8 在线 0 0 0
            gptid/260cd97a-df9e-11e1-9963-c860009da3f8 在线 0 0 0

错误:在以下文件中检测到永久性错误:

        <0x7c343>:<0x45b6bcd>

因此,我决定进一步调查,阅读 Oracle 文档,并发现了这一点:“如果四路 RAID-Z(raidz1)虚拟设备中的两个磁盘出现故障,则无法更换任何磁盘,因为没有足够的副本来检索数据。” ada2 仍然抛出错误,看起来我无法在现有池中替换它,因为这会使数据不可用?

这是否意味着恢复的唯一方法是备份现有数据、销毁池、替换 ada2、创建新池并在新池上恢复数据?或者还有其他方法可以做到这一点,也许删除 20140830 之前的所有快照?顺便说一句,最新的清理发现了另一个包含损坏数据的快照,显然是同一个文件:

  [电子邮件保护]:/home/.../some.pdf

答案1

相信你之所以看到这样的事情

errors: Permanent errors have been detected in the following files:

        <0x7c343>:<0x45b6bcd>

是因为快照里的数据仍然存在,而且仅仅是快照而已。

请记住,ZFS 中的快照只是一个时间点标记;它实际上并不复制任何块,它只是在数据被替换时保持对旧块的引用(使用 ZFS 的正常写时复制行为)。因此,如果有任何快照引用坏块,它将在清理期间继续显示为错误。

该错误仅影响该特定文件,并且您的其他数据不会因该错误而面临任何其他风险。

“修复”是依次销毁包含受影响文件的每个快照。一旦所有这些快照都被销毁,对坏块的引用将不再存在,并且 ZFS(希望)将报告没有错误。

此外,在 ZFS 池中更换发生故障但仍可运行(边缘)设备的推荐方法是zpool replace pool old-dev new-dev在整个更换过程中同时使用旧设备和新设备。这样,ZFS 就可以在可能的情况下使用边缘设备上的数据。完成后zpool replace,旧设备将自动从池中移除,并且可以物理断开连接。显然,这需要在主机上有适当数量的额外互连可用。

相关内容