其中一个磁盘在 zpool 中损坏,因此在更换它并开始重新同步后,zfs status -v
输出中会弹出一条错误消息。
pool: backup
state: ONLINE
status: One or more devices is currently being resilvered. The pool will
continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
scan: resilver in progress since Thu Oct 17 15:41:38 2019
40.0G scanned out of 2.59T at 24.0M/s, 30h58m to go
6.67G resilvered, 1.51% done
config:
NAME STATE READ WRITE CKSUM
backup ONLINE 0 0 1
raidz1-0 ONLINE 0 0 2
ata-ST3000DM007-1WY10G_WFN0GA7C ONLINE 0 0 0
ata-ST3000DM007-1WY10G_WFN0GA32 ONLINE 0 0 0
ata-ST3000DM007-1WY10G_WFN0G8VM ONLINE 0 0 0
ata-ST3000DM007-1WY10G_WFN0G8MJ ONLINE 0 0 0
sdb ONLINE 0 0 0 (resilvering)
ata-ST3000DM007-1WY10G_WFN0G7L6 ONLINE 0 0 0
errors: Permanent errors have been detected in the following files:
<0xb73>:<0x42ced>
所以我用谷歌搜索了一下,我发现的都是像我的错误实际上应该指向的错误,poolname:filename<or>inode
但不是十六进制或其他值中的两个值。关于这些提到的建议是擦洗游泳池。重新同步完成后我会立即执行此操作,但这实际上有帮助吗?为什么它没有像应有的那样显示池名称?如果没有提到该文件可能已被删除,我了解文件名,但为什么它不显示池名称?
它在 CentOS 7.6.1810 上运行,zfs 版本 0.7.13 来自 zfs CentOS 存储库。
答案1
这可能是由很多原因引起的。不管你相信与否,内存故障可能会导致这种情况(通过导致错误的校验和)。该文件可能来自之前已删除的数据集。您可能还有另一个发生故障的磁盘。您的 RAID 控制器可能损坏。
重新同步完成后,您绝对应该运行清理操作。
每个错误仅表明在给定时间点发生了错误。每个错误不一定仍然存在于系统中。正常情况下是这样的。某些临时中断可能会导致数据损坏,这些损坏会在中断结束后自动修复。池的完整清理保证检查池中的每个活动块,因此每当清理完成时都会重置错误日志。如果您确定错误不再存在,并且不想等待清理完成,请使用 zpool online 命令重置池中的所有错误。
https://docs.oracle.com/cd/E19253-01/819-5461/gbbwl/index.html
因此,如果错误在清理后消失,那么它们就是旧的并且不再活跃。如果它们持续存在,则说明存在需要注意的问题(可能是某种硬件故障)。
我的公司有大约 9000 台在 smartOS 上运行 ZFS 的服务器,我们很少看到这种情况,但如果不能通过更换故障磁盘/清理池来解决问题,我们通常最终会对机箱/RAID 控制器/主板等进行 RMA 处理。