每当 ZFS 遇到错误时(不管是在清理中还是按需访问文件时),都会在内部记录该错误,以便您可以快速查看池中所有已知错误的概览信息。
检查数据完整性的最简单的方法是,对池中所有数据启动显式清理操作。此操作对池中的所有数据遍历一次,并验证是否可以读取所有块。尽管任何 I/O 的优先级一直低于常规操作的优先级,但是清理以设备所允许的最快速度进行。虽然进行清理时池数据应该保持可用而且几乎都做出响应,但是此操作可能会对性能产生负面影响。要启动显式清理,请使用 zpool scrub 命令。例如:
# zpool scrub tank |
使用 zpool status 命令可以显示当前清理操作的状态。例如:
# zpool status -v tank pool: tank state: ONLINE scrub: scrub completed after 0h7m with 0 errors on Tue Tue Feb 2 12:54:00 2010 config: NAME STATE READ WRITE CKSUM tank ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 c1t0d0 ONLINE 0 0 0 c1t1d0 ONLINE 0 0 0 errors: No known data errors |
每个池一次只能发生一个活动的清理操作。
可通过使用 -s 选项来停止正在进行的清理操作。例如:
# zpool scrub -s tank |
在大多数情况下,旨在确保数据完整性的清理操作应该一直执行到完成。如果清理操作影响了系统性能,您可以自行决定停止清理操作。
执行常规清理可以保证对系统上所有磁盘执行连续的 I/O。常规清理具有副作用,即阻止电源管理将空闲磁盘置于低功耗模式。如果系统通常一直执行 I/O,或功耗不是重要的考虑因素,则可以安全地忽略此问题。
有关解释 zpool status 输出的更多信息,请参见查询 ZFS 存储池的状态。
替换设备时,将启动重新同步操作,以便将正确副本中的数据移动到新设备。此操作是一种形式的磁盘清理。因此,在给定的时间,池中只能发生一个这样的操作。如果清理操作正在进行,则重新同步操作会暂停当前清理,并在重新同步完成后重新启动清理操作。
有关重新同步的更多信息,请参见查看重新同步状态。