Do we want a periodic script for a zfs scrub?

jhell jhell at dataix.net
Wed Jun 9 15:23:15 UTC 2010


On 06/09/2010 11:07, jhell wrote:
> On 06/09/2010 10:26, Alexander Leidinger wrote:
>> Hi,
>>
>> I noticed that we do not have an automatism to scrub a ZFS pool
>> periodically. Is there interest in something like this, or shall I keep
>> it local?
>>
>> Here's the main part of the monthly periodic script I quickly created:
>> ---snip---
>> case "$monthly_scrub_zfs_enable" in
>>     [Yy][Ee][Ss])
>>         echo
>>         echo 'Scrubbing of zfs pools:'
>>
>>         if [ -z "${monthly_scrub_zfs_pools}" ]; then
>>                 monthly_scrub_zfs_pools="$(zpool list -H -o name)"
>>         fi
>>
>>         for pool in ${monthly_scrub_zfs_pools}; do
>>                 # successful only if there is at least one pool to scrub
>>                 rc=0
>>
>>                 echo "   starting scrubbing of pool '${pool}'"
>>                 zpool scrub ${pool}
>>                 echo "      consult 'zpool status ${pool}' for the result"
>>                 echo "      or wait for the daily_status_zfs mail, if
>> enabled"
>>         done
>>         ;;
>> ---snip---
>>
>> Bye,
>> Alexander.
>>
> 
> Please add a check to see if any resilerving is being done on the pool
> that the scub is being executed on. (Just in case), I would hope that
> the scrub would fail silently in this case.
> 
> Please also check whether a scrub is already running on one of the pools
> and if so & another pool exists start a background loop to wait for the
> first scrub to finish or die silently.
> 
> I had a scrub fully restart from calling scrub a second time after being
> more than 50% complete, its frustrating.
> 
> 
> Thanks!,
> 

I should probably suggest one check that comes to mind.

zpool history ${pool} | grep scrub | tail -1 |cut -f1 -d.

Then compare the output with today's date to make sure today is >= 30
days from the date of the last scrub.

With the above this could be turned into a daily_zfs_scrub_enable with a
default daily_zfs_scrub_threshold="30" and ensuring that if one check is
missed it will not take another 30 days to run the check again.

Food for thought.


Thanks!, Thanks!,

-- 

 jhell


More information about the freebsd-fs mailing list