diff --git a/setup.sh b/setup.sh index b739f61..15c2801 100644 --- a/setup.sh +++ b/setup.sh @@ -541,6 +541,41 @@ rm /mnt/setup-chroot.sh echo "Done." +echo "#! /bin/bash" > /mnt/zfshealth.sh +echo "problems=0; emailSubject=\"`hostname` - ZFS pool - HEALTH check\"; emailMessage=\"\"" >> /mnt/zfshealth.sh +echo "condition=\$(/sbin/zpool status | egrep -i '(DEGRADED|FAULTED|OFFLINE|UNAVAIL|REMOVED|FAIL|DESTROYED|corrupt|cannot|unrecover)')" >> /mnt/zfshealth.sh +echo "if [ \"\${condition}\" ]; then emailSubject=\"\$emailSubject - fault\"; problems=1; fi" >> /mnt/zfshealth.sh +echo "maxCapacity=80" >> /mnt/zfshealth.sh +echo "if [ \${problems} -eq 0 ]; then" >> /mnt/zfshealth.sh +echo " capacity=\$(/sbin/zpool list -H -o capacity)" >> /mnt/zfshealth.sh +echo " for line in \${capacity//%/}" >> /mnt/zfshealth.sh +echo " do" >> /mnt/zfshealth.sh +echo " if [ \$line -ge \$maxCapacity ]; then emailSubject=\"\$emailSubject - Capacity Exceeded\"; problems=1; fi" >> /mnt/zfshealth.sh +echo " done" >> /mnt/zfshealth.sh +echo "fi" >> /mnt/zfshealth.sh +echo "if [ \${problems} -eq 0 ]; then" >> /mnt/zfshealth.sh +echo " errors=\$(/sbin/zpool status | grep ONLINE | grep -v state | awk '{print $3 $4 $5}' | grep -v 000)" >> /mnt/zfshealth.sh +echo " if [ \"\${errors}\" ]; then emailSubject=\"\$emailSubject - Drive Errors\"; problems=1; fi" >> /mnt/zfshealth.sh +echo "fi" >> /mnt/zfshealth.sh +echo "scrubExpire=691200" >> /mnt/zfshealth.sh +echo "if [ \${problems} -eq 0 ]; then" >> /mnt/zfshealth.sh +echo " currentDate=\$(date +%s)" >> /mnt/zfshealth.sh +echo " zfsVolumes=\$(/sbin/zpool list -H -o name)" >> /mnt/zfshealth.sh +echo " for volume in \${zfsVolumes}" >> /mnt/zfshealth.sh +echo " do" >> /mnt/zfshealth.sh +echo " if [ \$(/sbin/zpool status \$volume | egrep -c \"none requested\") -ge 1 ]; then echo \"ERROR: You need to run \\\"zpool scrub \$volume\\\" before this script can monitor the scrub expiration time.\"; break; fi" >> /mnt/zfshealth.sh +echo " if [ \$(/sbin/zpool status \$volume | egrep -c \"scrub in progress|resilver\") -ge 1 ]; then break; fi" >> /mnt/zfshealth.sh +echo " scrubRawDate=\$(/sbin/zpool status \$volume | grep scrub | awk '{print \$15 \$12 \$13}')" >> /mnt/zfshealth.sh +echo " scrubDate=\$(date -j -f '%Y%b%e-%H%M%S' \$scrubRawDate'-000000' +%s)" >> /mnt/zfshealth.sh +echo " if [ \$((\$currentDate - \$scrubDate)) -ge \$scrubExpire ]; then" >> /mnt/zfshealth.sh +echo " if [ \${problems} -eq 0 ]; then emailSubject=\"\$emailSubject - Scrub Time Expired. Scrub Needed on Volume(s)\"; fi" >> /mnt/zfshealth.sh +echo " problems=1" >> /mnt/zfshealth.sh +echo " emailMessage=\"\${emailMessage}Pool: \$volume needs scrub \n\"" >> /mnt/zfshealth.sh +echo " fi" >> /mnt/zfshealth.sh +echo " done" >> /mnt/zfshealth.sh +echo "fi" >> /mnt/zfshealth.sh +echo "echo -e \"\$emailMessage \n\n\n `/sbin/zpool list` \n\n\n `/sbin/zpool status`\" | mail -s \"\$emailSubject\" ${admins}" >> /mnt/zfshealth.sh +echo "if [ \"\$problems\" -ne 0 ]; then logger \$emailSubject; fi" >> /mnt/zfshealth.sh exit 0