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 卡是问题的原因,并将其替换为更好的品牌/选项:)