Date: Sun, 8 Mar 2020 19:34:44 +0100 From: Peter Eriksson <pen@lysator.liu.se> To: freebsd-fs <freebsd-fs@freebsd.org> Subject: Ways to "pause" ZFS resilver? Message-ID: <BDFFC0E8-9D5A-4E45-835F-9D00CDAE8829@lysator.liu.se>
next in thread | raw e-mail | index | archive | help
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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?BDFFC0E8-9D5A-4E45-835F-9D00CDAE8829>
