清除 ZFS 校验和错误?

清除 ZFS 校验和错误?

TLDR;我的 ZFS 镜像池出现了一些校验和错误。我更换了控制器,认为这是最可能的原因,但错误不会清除。池清除会暂时重置它们,但下次运行清理时它们会再次出现。我该如何彻底清除它们?

完整故事:我在 ubuntu 20.04.2 LTS 上设置并运行了 ZFS 镜像 0 一段时间。当其中一个驱动器坏了时,我利用这个机会将两个驱动器都换成了更大的驱动器,并为新驱动器添加了一个 SATA-III PCI 卡(旧驱动器已连接到板载 SATA II 控制器,因为我没有更多的 SATA III 端口可用)。在新的驱动器和控制器上运行了几周后,ZFS 抱怨两个新驱动器上的校验和错误,并因此将阵列置于“降级”状态。

经过一番研究,我得出的结论是,由于两个驱动器显示的校验和错误数量完全相同,因此问题更可能是控制器而不是驱动器本身。因此,我拔出新控制器,将驱动器重新安装到板载 SATA II 控制器上,打算在确认问题所在后更换控制器卡。然后,我删除了显示zpool status -v为永久错误的两个文件,发出命令zpool clear data重置错误,并运行清理。

不幸的是,清理后错误再次出现,只是现在不再-v显示文件,而只是显示地址(我相信是 inode),大概是我之前删除的一个文件的地址。我再次尝试,结果相同。每次运行清理时,都会返回以下结果:

root@watchman:~# zpool status -v
  pool: data
 state: DEGRADED
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://zfsonlinux.org/msg/ZFS-8000-8A
  scan: scrub repaired 16K in 0 days 09:10:20 with 1 errors on Sat Jul 24 15:48:21 2021
config:

    NAME                                 STATE     READ WRITE CKSUM
    data                                 DEGRADED     0     0     0
      mirror-0                           DEGRADED     0     0     0
        ata-ST8000VE000-2P6101_WSD1M5NW  DEGRADED     0     0    15  too many errors
        ata-ST8000VE000-2P6101_WSD1HEJX  DEGRADED     0     0    15  too many errors

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

        data:<0x380508>

据我所知,这只是一个已经存在的问题,可能是由于控制器故障造成的,但我似乎无法解决它。我怎样才能将镜子恢复到完全正常运行的状态?

更新:我最终放弃了清除错误的想法,而是重新开始。我创建了一个新池,从现有镜像中窃取了一个驱动器。然后我运行了将rsync所有数据从旧池复制到新池。这确实遇到了一些错误(zfs 没有谎报数据错误),但没有什么重大或麻烦的,排除错误的文件允许 rsync 成功完成。然后我将第二个驱动器添加到新池中,在重新同步之后,现在一切看起来都很好,并且对新池的清理没有错误地完成。

因此,假设接下来一周左右一切继续保持良好状态,我认为可以安全地假设 SATA III 卡是问题的原因,并将其替换为更好的品牌/选项:)

答案1

有时,我在 0 镜像上也会遇到一些校验和错误,大多发生在重启后,并且 zfs 池的状态会降低。

zpool status <poolname>

在此处输入图片描述

为了修复此问题并清除错误,我运行:

zpool clear <poolname>

相关内容