Ways to "pause" ZFS resilver?

Peter Eriksson pen at lysator.liu.se
Sun Mar 8 18:34:54 UTC 2020


I’m looking for ideas on how to pause a running ZFS resilver on a FreeBSD 11.3-RELEASE-p6 system.

The reason is we have a system where a running such causes severe NFS “hiccups” for our users (like 5-20s delays more or less often) and thus I’d like to figure out some way to “pause” it during office hours until either we’ve found and fixed the problem or the resilver is done (1D15H to go)...

Since there isn’t any “zfs” command to pause a running resilver I’m pondering alternative more “creative” ways.

/usr/src/cddl/contrib/opensolaris/uts/common/fs/zfs:

>       if (zio_flags & ZIO_FLAG_RESILVER)
>                scan_delay = zfs_resilver_delay;
>        else {
>                ASSERT(zio_flags & ZIO_FLAG_SCRUB);
>                scan_delay = zfs_scrub_delay;
>        }
>
>        if (scan_delay && (ddi_get_lbolt64() - spa->spa_last_io <= zfs_scan_idle))
>                delay(MAX((int)scan_delay, 0));

Settings vfs.zfs.scan_idle to something high and then vfs.zfs.resilver_delay to 10*60*60*kern.hz (10 hours) and hoping the “if" statement will trigger? But that assumes nothing can/will interrupt delay(). Hmmm...

Any other suggestions?

(I don’t want to abort the resilver).

- Peter



More information about the freebsd-fs mailing list