Feature #8414

Updated by Alek Pinchuk almost 5 years ago

This issue tracks the port of scrub pause from ZoL: 
 Currently, there is no way to pause a scrub. Pausing may 
 be useful when the pool is busy with other I/O to preserve 


 This patch adds the ability to pause and resume scrubbing. 
 This is achieved by maintaining a persistent on-disk scrub state. 
 While the state is 'paused' we do not scrub any more blocks. 
 We do however perform regular scan housekeeping such as 
 freeing async destroyed and deadlist blocks while paused. 

 This patch also adds a -p option to zpool import which allows 
 one to pause scrub instead of resuming it on import. 

 If you're testing this change, you probably want to include the patch from #6164 

 Can't seem to get zfs-tests to run consistently on my setup so let's see what buildbot thinks. 

 Motivation and Context 

 Scrub pausing can be an I/O intensive operation and people have been asking for the ability to pause a scrub for a while. This allows one to preserve scrub progress while freeing up bandwidth for other I/O. 

 How Has This Been Tested? 

 Unit testing and zfs-tests. 
 to the pool. 

 This patch will also include the patch from 
 In certain cases (dsl_scan_sync() is one), we may end up calling 
 bpobj_iterate() on an empty bpobj. Even though we don't end up 
 modifying the bpobj it still gets dirtied, causing unneeded writes to the pool. 

 The fix adds an early bail from bpobj_iterate_impl() if bpobj 
 is empty to prevent unneeded writes to the pool.