ZFS无休止的重新同步


29

我在Debian上有一个大型(> 100TB)ZFS(FUSE)池,丢失了两个驱动器。当驱动器出现故障时,我用备用磁盘替换了它们,直到可以安排停机并物理上替换了损坏的磁盘。

当我关闭系统并更换驱动器时,该池开始按预期重新进行同步,但是当完成约80%的操作(通常需要大约100个小时)后,它将重新启动。

我不确定是否一次更换两个驱动器会造成争用情况,或者由于池的大小而使resilver花费的时间太长,以至于其他系统进程正在中断它并使它重新启动,但是在此过程中没有明显的迹象。 “ zpool status”的结果或系统日志指出了问题。

此后,我已经修改了如何布置这些池以提高重新同步性能,但是对于使该系统重新投入生产的任何线索或建议均表示赞赏。

zpool status输出(自上次检查以来,错误是新的):

  pool: pod
 state: ONLINE
status: One or more devices has experienced an error resulting in data
    corruption.  Applications may be affected.
action: Restore the file in question if possible.  Otherwise restore the
    entire pool from backup.
   see: http://www.sun.com/msg/ZFS-8000-8A
 scrub: resilver in progress for 85h47m, 62.41% done, 51h40m to go
config:

    NAME                                                 STATE     READ WRITE CKSUM
    pod                                                  ONLINE       0     0 2.79K
      raidz1-0                                           ONLINE       0     0 5.59K
        disk/by-id/wwn-0x5000c5003f216f9a                ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0CWPK    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQAM    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BPVD    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQ2Y    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0CVA3    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQHC    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BPWW    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F09X3Z    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQ87    ONLINE       0     0     0
        spare-10                                         ONLINE       0     0     0
          disk/by-id/scsi-SATA_ST3000DM001-1CH_W1F20T1K  ONLINE       0     0     0  1.45T resilvered
          disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F09BJN  ONLINE       0     0     0  1.45T resilvered
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQG7    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQKM    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQEH    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F09C7Y    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0CWRF    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQ7Y    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0C7LN    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQAD    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0CBRC    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BPZM    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BPT9    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQ0M    ONLINE       0     0     0
        spare-23                                         ONLINE       0     0     0
          disk/by-id/scsi-SATA_ST3000DM001-1CH_W1F226B4  ONLINE       0     0     0  1.45T resilvered
          disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0CCMV  ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0D6NL    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0CWA1    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0CVL6    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0D6TT    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BPVX    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F09BGJ    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0C9YA    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F09B50    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0AZ20    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BKJW    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F095Y2    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F08YLD    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQGQ    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0B2YJ    ONLINE       0     0    39  512 resilvered
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQBY    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0C9WZ    ONLINE       0     0     0  67.3M resilvered
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQGE    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQ5C    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0CWWH    ONLINE       0     0     0
    spares
      disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0CCMV      INUSE     currently in use
      disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F09BJN      INUSE     currently in use

errors: 572 data errors, use '-v' for a list

请提供zpool status
longneck 2013年

那么,如果使用它会报告哪些错误-v
鲍比,

“错误:在以下文件中检测到永久性错误:”,然后列出大约12个有错误的文件。
jasongullickson

对于“参见:”部分,您可以在此处阅读更详细的说明:illumos.org/msg/ZFS-8000-8A
Raymond Tau

Answers:


56

恭喜,哦。您偶然发现了有关ZFS的更好的功能之一,但也犯了一个配置错误。

首先,由于您使用的是raidz1,因此只有一个磁盘的奇偶校验数据值得。但是,您有两个驱动器同时发生故障。唯一可能的结果是数据丢失。重新进行同步处理不会解决此问题。

您的备件在这里为您提供了一点帮助,使您免于完全灾难性的失败。在这里,我要大声疾呼地说,发生故障的两个驱动器没有同时发生故障,并且在第二个驱动器发生故障之前,第一个备用驱动器只是部分地重新镀了银。

这似乎很难遵循。这是一张照片:

事件顺序

这实际上是一件好事,因为如果这是传统的RAID阵列,则当第二个驱动器发生故障时,整个阵列将仅处于脱机状态,并且就没有机会进行就地恢复。但是由于这是ZFS,它仍然可以使用其已有的片段运行,并且只为没有的片段返回块或文件级错误。

修复方法如下:短期,从中获取损坏的文件列表,zpool status -v并将这些文件从备份复制到其原始位置。或删除文件。这将使重新进行重新开始和完成。

这是您的配置罪过: raidz组中的驱动器太多。

长期:您需要重新配置驱动器。一个更合适的配置是将驱动器分成5个驱动器,组成小小组,在raidz1中。ZFS将自动在这些小组之间进行分割。当一个驱动器发生故障时,这将大大减少重新启动时间,因为仅需要5个驱动器而不是所有驱动器都可以参与。执行此操作的命令将类似于:

zpool create tank raidz da0 da1 da2 da3 da4 \
                  raidz da5 da6 da7 da8 da9 \
                  raidz da10 da11 da12 da13 da14 \
                  spare da15 spare da16

非常感谢@longneck的详细信息!您对事件的顺序很了解,并且我已经就设备配置提出了建议(我构建的第二台设备的配置几乎与您所描述的完全一样,还有一些其他注意事项,以确保每个RAID跨硬件分布减少由于背板故障等造成的整个团队损失的机会)。
jasongullickson

删除损坏的文件后,“ zfs status”现在返回十六进制值而不是文件名。我认为这将在磨砂膏最终完成时消失吗?
jasongullickson

仅当文件系统的元数据也完整时才使用@jasongullickson。在保护元数据方面,ZFS非常激进,因此您可能会很好。只有时间证明一切。
longneck 2013年

我个人之前从未遇到过元数据损坏事件,所以我不知道在错误事件方面会是什么样。
longneck 2013年

1
@longneck Gotcha,然后我们达成协议-将RAID-Z组足够大,以至于您限制了resilver并使其变慢,这绝对不是一个好主意。较大的组的另一个大风险是,第二台设备在重装过程中出现故障的几率增加了-奇偶校验磁盘数量的增加(使用RAID-Z2或3)将有助于解决可靠性问题,但对重装速度却没有帮助。
Shane Madden
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.