Files
mesh-catalog/modules/zfs/cmd/zfs-tools/testdata/zpool-status-rebuild.txt
T
jochen e69506a26f
mesh/merge-gate pass: builds zfs, sent nowhere; no bus step; every machine composes with the change as it did without (4 of 4 compose)
mesh/repo-check pass: its merge-check.sh passed
mesh/delivery superseded: a newer head of the same pull request
Make the zfs module safe to put on the home server, and give it the pool's scrub schedule
The safety review of the first version found it safe for the pool's data and asked for these fixes before
it goes on the home server:

- zfs_snapshot: no recursive. Every answer gives the dataset's free space and the pool's capacity, and
  says that the snapshot holds every block deleted or overwritten until it is destroyed by hand.
- A command that runs out of time is ended with its whole process group. An act that timed out is
  answered from the list, or as "outcome unknown", never as "NOT DONE".
- The watch runs as the operator account.
- The event follower reads ZFS's queue from its start, with a cursor per boot, so the pool's import and
  any downtime reach the journal once. It writes "dropped N events", kills zpool before waiting for it,
  and exits non-zero after five failed follows in a row.
- Past error counts are a warning, and counts that rise are unhealthy.
- The guard test catches .Run(, exec.Command(, exec.CommandContext( and process starts.
- The fixtures and the parser follow OpenZFS 2.4.4's own printers: human scan sizes under -p, no iostat
  section lines, error scrubs, per-vdev rebuild resilvers, paused scrubs.

The operator also asked the module to own the scrub. A timer and a service of the module's own run
zpool scrub -w -- <pool> from the scrub-pool, scrub-cadence, scrub-day and scrub-time settings. In the
same declaration, the distribution's weekly and monthly timers for that pool are held stopped and
disabled, so exactly one schedule scrubs it. zfs_scrub shows the schedule and the next run, with any
resilver's progress. zfs_scrub_start, zfs_scrub_pause and zfs_scrub_stop act with why. The health check
warns of a late or failed scrub and of a running resilver, and is unhealthy for a resilver that finished
with errors.
2026-10-09 01:17:34 +02:00

47 lines
1.6 KiB
Plaintext

pool: fast
state: ONLINE
scrub: scrubbed 12 error blocks in 0 days 00:01:02 on Tue Oct 6 10:00:00 2026
scan: resilvered (mirror-0) 1.20T in 03:22:11 with 0 errors on Wed Oct 7 04:00:00 2026
scan: resilver (mirror-1) in progress since Fri Oct 9 09:00:00 2026
310G / 1.80T scanned at 160M/s, 300G / 1.80T issued at 155M/s
300G resilvered, 16.84% done, 02:40:11 to go
config:
NAME STATE READ WRITE CKSUM
fast ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
nvme-WD_BLACK_SN850X_2000GB_A001 ONLINE 0 0 0
nvme-WD_BLACK_SN850X_2000GB_A002 ONLINE 0 0 0
mirror-1 ONLINE 0 0 0
nvme-WD_BLACK_SN850X_2000GB_A003 ONLINE 0 0 0
nvme-WD_BLACK_SN850X_2000GB_A004 ONLINE 0 0 0 (resilvering)
errors: No known data errors
pool: slow
state: ONLINE
scrub: error scrub paused since Thu Oct 8 12:00:00 2026
error scrub started on Thu Oct 8 11:00:00 2026
42.00% done, issued I/O for 5 error blocks
config:
NAME STATE READ WRITE CKSUM
slow ONLINE 0 0 0
sda ONLINE 0 0 2
errors: No known data errors
pool: paused
state: ONLINE
scan: scrub paused since Thu Oct 8 12:00:00 2026
scrub started on Thu Oct 8 01:00:00 2026
1.00T / 2.00T scanned, 900G / 2.00T issued
0B repaired, 43.95% done
config:
NAME STATE READ WRITE CKSUM
paused ONLINE 0 0 0
sdb ONLINE 0 0 0
errors: No known data errors