FreeNAS zfs zraid两个失败的磁盘

我有一个带ZFS的FreeNAS 8.3文件服务器,在raidz中运行4个3TB磁盘。

camcontrol devlist:

          在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:设备:/ 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,而这是由另一个pipe理员设置的。 出于某种原因,我的印象是,我可以简单地更换出现故障的驱动器。 这是我所做的。

 2014-10-13.17:41:29 zpool offline vol1 gptid / 24726389-df9e-11e1-9963-c860009da3f8
 2014-10-13.18:19:24 zpoolreplacevol1 15380758640793782293 gptid / f1a3e8b8-5326-11e4-966d-c860009da3f8
 2014-10-13.18:21:28 zpool detach vol1 15380758640793782293

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

 [root @ freenas]〜#zpool status -v
  池:vol1
 状态:在线
状态:一个或多个设备发生数据错误
        腐败。 应用程序可能受影响。
操作:如果可能,还原有问题的文件。 否则恢复
        从备份整个池。
   请参阅:http://www.sun.com/msg/ZFS-8000-8A
  扫描:在27h51m重装2.25T,在2014年10月14日22:10:59发生1次错误
configuration:

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

错误:在以下文件中检测到永久性错误:
  [email protected]:/家/.../ some.pdf

现在这个文件已经被删除很久以前了,所以我根本不在乎,我想我可以删除快照,但是这使事情变得更糟:

 [root @ freenas]〜#zfs destroy [email protected]
 [root @ freenas]〜#zpool status -v
  池:vol1
 状态:在线
状态:一个或多个设备发生数据错误
        腐败。 应用程序可能受影响。
操作:如果可能,还原有问题的文件。 否则恢复
        从备份整个池。
   请参阅:http://www.sun.com/msg/ZFS-8000-8A
  扫描:在27h51m重装2.25T,在2014年10月14日22:10:59发生1次错误
configuration:

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

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

         <0x7c343>:<0x45b6bcd>

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

这是否意味着要恢复的唯一方法是备份现有数据,销毁池,replaceada2,创build新池,并将数据恢复到新池中? 或者还有另外一种方法,在20140830之前删除所有的快照? 顺便说一句,最新擦洗发现另一个快照与腐败的数据,显然是相同的文件:

   [email protected]:/家/.../ some.pdf

相信你为什么看到这样的事情

errors: Permanent errors have been detected in the following files: <0x7c343>:<0x45b6bcd> 

是因为数据仍然存在于一个快照中,而且只有一个快照。

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

该错误只影响该特定文件,并且由于此错误,您的其他数据没有任何其他风险。

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

此外,推荐的replaceZFS池中失败但仍然有效(边际)设备的方法是在整个replace过程中使用zpool replace pool old-dev new-dev ,同时连接old-dev和new-dev。 这允许ZFS在可能的情况下使用边际设备上的数据。 一旦zpool replace完成,旧设备将自动从池中删除,并可以物理断开连接。 显然这需要在主机上提供适当数量的额外互连。