zfs:scrub 与 resilver (它们等效吗?)

zfs:scrub 与 resilver (它们等效吗?)

重银剂和磨砂剂一样好吗?如果不是,为什么?

使用案例:在清理期间出现校验和错误。不要继续清理,而是停止清理,更换驱动器并重新镀银。重新镀银是否执行了清理过程中应执行的部分/全部检查?

答案1

清理 (scrub) 读取其中的所有数据zpool并根据其奇偶校验信息进行检查。

重新同步器从一台设备中的数据和奇偶校验信息中重新复制一台设备中的所有数据vdev:对于镜像,它只是从镜像中的另一台设备复制数据,从一台raidz设备中读取剩余驱动器中的数据和奇偶校验来重建丢失的数据。

它们并不相同,在我看来,它们并不等同。如果重新同步器在尝试重建数据副本时遇到错误,这很可能是一个永久性错误(因为数据无法再正确重建)。相反,如果清理检测到损坏,通常可以从剩余数据和奇偶校验中修复它(在正常使用中,有时也会悄无声息地发生这种情况)。

答案2

如果您要更换驱动器,如果旧驱动器在重新同步过程中没有完全失效,则保留旧驱动器作为额外的冗余是有益的。如果没有剩余的冗余,任何进一步的错误都会导致受影响文件中的一些数据丢失。

重新镀银操作将读取将冗余恢复到替换磁盘所需的最少数据量。清理操作将读取所有数据,包括主数据和奇偶校验数据。

因此,如果您要重新同步镜像或 raidz1,则它们是等效的,因为重新同步必须读取所有剩余数据。如果您要重新同步三向镜像、raidz2 或 raidz3,则重新同步不会读取所有剩余数据,因此在这些情况下,scrub 和重新同步并不等效。

答案3

非常感谢您分享这个问题,也感谢您发表评论并给出详细建议。我试图退一步来理解这个概念,在 ZFS 中寻找最直接的解释:

  1. 擦洗
  2. 重新镀银

我理解 Scrub 会检查 HDD、SSD 或 NVME 磁盘中的错误和故障。重新同步会将数据再次复制到出现故障的设备或已更换的设备上。

我期待您的纠正和反馈。

就我的情况来说,看起来我需要买一个新的 SSD:

# zpool status -v pvedata1
  pool: pvedata1
 state: DEGRADED
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 Sat May 13 18:28:30 2023
    1.20T scanned at 137M/s, 609G issued at 68.2M/s, 2.39T total
    389G resilvered, 24.93% done, 07:39:31 to go
config:

    NAME                                  STATE     READ WRITE CKSUM
    pvedata1                              DEGRADED     0     0     0
      mirror-0                            DEGRADED     0     0     0
        ata-CT4000MX500SSD1_2243E67E4CA0  FAULTED      3     8     0  too many errors
        ata-CT4000MX500SSD1_2243E67E4C9F  ONLINE       0     0     0

errors: No known data errors

真挚地,

答案4

我知道这是一个很晚的答案,但我觉得这个问题可以使用涵盖该主题的更广泛的答案。


ZFS 中的主要清理和重新同步过程基本相同 - 在两种情况下都会读取和验证记录,并且必要时会将其写入任何具有无效(或丢失)数据的磁盘。

由于 ZFS 知道磁盘上哪些记录应该有了,它就不会费心去读取不应该存在的记录。这意味着在重新同步期间,新磁盘将很少或根本没有读取活动,因为没有东西可读取(或者至少 ZFS 认为没有东西可读取)。

这也意味着,如果磁盘不可用然后又可用,ZFS 将仅重新同步自磁盘不可用以来创建的新记录。以这种方式重新同步会自动进行,而清理通常必须启动(手动或通过计划命令)。

对于镜像 vdev,还有一个特殊的“顺序重新同步”选项,可以使用zpool attach -s或触发zpool replace -s- 这会更快地复制所有数据而无需任何检查,并启动延迟清理以稍后验证完整性。这对于快速恢复冗余非常有用,但仅当您确信现有数据正确时才应使用(您运行常规清理,或在添加/替换之前进行清理)。

最后,清理和重新镀银的设置存在一些细微的差别 - 一般来说,重新镀银比清理具有更高的优先级,因为它更为紧急(恢复/增加冗余),但由于各种因素,这可能并不意味着重新镀银比清理更快,这取决于写入速度、可用的记录副本数量等。

例如,在处理镜像时,重新同步可以更快,因为它不需要从所有磁盘读取,但前提是新磁盘足够快(写入速度至少可以与其他磁盘读取速度一样快)。与此同时,清理总是从所有磁盘读取,因此对于镜像 vdev 来说,它可能更加密集。对于 raidz1,两个进程都将从所有(现有)磁盘读取,因此重新同步会更慢,因为它还需要写入一个磁盘,raidz2 不需要读取所有磁盘,因此可能会获得一点速度等等。

基本上没有具体的答案来涵盖所有设置。

相关内容