ansitest/ZFS/boojum-monthly-scrub.sh
2021-06-04 13:42:14 -05:00

113 lines
3.1 KiB
Bash

#!/bin/bash
# NOTE runs from /etc/crontab
# based on DOM 14/15/16/17, scrub 1 of N pools && wait4scrub
# NOTE tabwidth=2
PATH=/sbin:/root/bin:/root/bin/boojum:/usr/local/bin:/usr/local/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin: #/usr/NX/bin:/usr/games:
debugg=0
mydt=$(date +%e\) # ex. 24
[ $debugg -gt 0 ] && mydt=27
# short circuit to smallest pool for testing (ztestpool4
# zpool list # as of 2017.0319
# NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
# zseatera2 3.62T 1.64T 1.98T - 22% 45% 1.00x ONLINE -
# zseatera4 3.62T 2.73T 913G - 37% 75% 1.00x ONLINE -
# zsgtera2 1.81T 1.57T 248G - 50% 86% 1.00x ONLINE -
# zteratank3 2.72T 2.00T 737G - 29% 73% 1.00x ONLINE -
# ztestpool4 3.62T 1.30T 2.33T - 20% 35% 1.00x ONLINE -
[ "$1" = "" ] || mydt=$1 # override in case we missed
logfile=~/boojum-monthly-scrub-$mydt.log # sep logfiles, by daynum
/bin/mv $logfile $logfile--prev
# zfs list -d0
#NAME USED AVAIL REFER MOUNTPOINT
#teratank3 2.28T 363G 1.93T /teratank3 #23
#zseatera2 1.83T 1.68T 2.98G /zseatera2 #24
#zseatera4 2.55T 990G 96K /zseatera4 #25
#zsgtera2 1.57T 190G 927M /zsgtera2 #26
#ztestpool4 3.14T 376G 96K /ztestpool4 #27
function dum1hf () {
du --max-depth=1 -h
}
function scrubpool () {
cd /$zp
echo "$PWD" >> $logfile
dum1hf > /$zp/disk-usage.txt
cat /$zp/disk-usage.txt >> $logfile
chmod 550 /$zp/disk-usage.txt
chown root:dave /$zp/disk-usage.txt
# /sbin/
zpool scrub $zp
didpool=$zp
echo "$(date +%H:%M:%S) - START RUN ...waiting for scrub of ZFS pool $zp to complete..." >> $logfile
# /sbin/
zpool status -v $zp >> $logfile
# sleep 20 # wait for spinup if nec
waitscrub=1
while [ $waitscrub -gt 0 ];do
# waitscrub=`/sbin/zpool status -v $zp |grep -c "scrub in progress"`
waitscrub=$(zpool status -v $zp |grep -c "scrub in progress")
sleep 61
# /sbin/
zpool status $zp |/bin/egrep 'scanned|repaired' >> $logfile
done
echo "$(date +%H:%M:%S) - STEP DONE ...scrub finished for $zp" >> $logfile
}
# IF poolnum=1 && mydt=24 THEN scrub thispool
#cd /$zp && (echo "o Spinup disks -- DU $zp:" >> $logfile; du -s /$zp >> $logfile 2>/dev/null)
poolnum=1
for zp in $(zpool list |grep -v NAME |awk '{ print $1 }'); do
case "$mydt" in
23 )
[ "$poolnum" = "1" ] && scrubpool $zp
;;
24 )
[ "$poolnum" = "2" ] && scrubpool $zp
;;
25 )
[ "$poolnum" = "3" ] && scrubpool $zp
;;
26 )
[ "$poolnum" = "4" ] && scrubpool $zp
;;
27 )
[ "$poolnum" = "5" ] && scrubpool $zp
;;
* )
# all other cases - fallthru
echo "! NOTE Fallthru happened - mydt=$mydt poolnum=$poolnum zp=$zp" >> $logfile
;;
esac
let poolnum=$poolnum+1
done
/sbin/zpool status -v $didpool >> $logfile
echo "$(date +%H:%M:%S) - END RUN $0 Scrub finished for day=$mydt $didpool" >> $logfile
exit;
2017.0903 - removed /sbin refs to zpool commands in case we use src
+ added PATH
#zredtera1 #24
#zsastera1compr #25
#zseatera2 #26
#zseatera4 #27