zpool-scrub —
begin or resume scrub of ZFS storage pools
zpool |
scrub
[-s|-p]
[-w]
pool… |
Begins a scrub or resumes a paused scrub. The scrub examines all data in the
specified pools to verify that it checksums correctly. For replicated (mirror,
raidz, or draid) devices, ZFS automatically repairs any damage discovered
during the scrub. The
zpool
status command reports the progress of the scrub
and summarizes the results of the scrub upon completion.
Scrubbing and resilvering are very similar operations. The difference is that
resilvering only examines data that ZFS knows to be out of date (for example,
when attaching a new device to a mirror or replacing an existing device),
whereas scrubbing examines all data to discover silent errors due to hardware
faults or disk failure.
Because scrubbing and resilvering are I/O-intensive operations, ZFS only allows
one at a time.
A scrub is split into two parts: metadata scanning and block scrubbing. The
metadata scanning sorts blocks into large sequential ranges which can then be
read much more efficiently from disk when issuing the scrub I/O.
If a scrub is paused, the
zpool
scrub resumes it. If a resilver is in progress,
ZFS does not allow a scrub to be started until the resilver completes.
Note that, due to changes in pool data on a live system, it is possible for
scrubs to progress slightly beyond 100% completion. During this period, no
completion time estimate will be provided.
- -s
- Stop scrubbing.
- -p
- Pause scrubbing. Scrub pause state and progress are
periodically synced to disk. If the system is restarted or pool is
exported during a paused scrub, even after import, scrub will remain
paused until it is resumed. Once resumed the scrub will pick up from the
place where it was last checkpointed to disk. To resume a paused scrub
issue zpool
scrub again.
- -w
- Wait until scrub has completed before returning.
-
Example
1: Status of pool with ongoing scrub:
- Output:
Where:
- Metadata which references 403M of file data has been
scanned at 100M/s, and 68.4M of that file data has been scrubbed
sequentially at 10.0M/s.
On machines using systemd, scrub timers can be enabled on per-pool basis.
weekly and
monthly
timer units are provided.
-
systemctl
enable
zfs-scrub-weekly
@rpool.timer
--now
-
systemctl
enable
zfs-scrub-
monthly@otherpool .timer
--now
systemd.timer(5),
zpool-iostat(8),
zpool-resilver(8),
zpool-status(8)