我没有找到有关如何修复以及要求的详细信息文档。
为了从 Scrub 中自动修复,我需要镜像吗?RAIDZ?都可以吗?都不需要(校验和本身是否包含奇偶校验)?
答案1
ZFS 块上没有奇偶校验,因此它们不能“自我修复”。
清理会尝试通过将校验和不正确的块重新定位到其他地方来修复损坏错误。只有池中存在错误块的合理副本时,清理才会执行此操作。
如果您使用冗余(镜像或 raidz),则后者成立的可能性相当高,但如果校验和错误影响到以下情况,则单个设备池或条带仍然存在这种情况:
- 元数据块,因为它们(至少)默认是重复的
copies=2
来自使用 ditto 块(或更多)配置的数据集的数据块
答案2
清理不会修复损坏错误,它只会检测这些错误。如果有可用的数据有效冗余副本(镜像、raidz 等),则损坏的数据将被丢弃。
清理完成后,如果发现坏数据并将其丢弃,则会触发重新同步操作。这会将冗余恢复到阵列(镜像、raidz 等)。由于清理会触发此行为,因此您可以将其称为同一操作的一部分,但在内部,它肯定是一个单独的过程。
擦洗应该提示底层存储报告 SMART 和 URE 错误(如果存在)。URE 会提示将磁盘标记为故障(如果有备用磁盘,则自动替换)。SMART 错误必须单独监控(通常通过smartd
或类似方式)。