Added new script to scrub a USB backup drive
authorAlan J. Pippin <ajp@pippins.net>
Tue, 11 Mar 2008 02:16:09 +0000 (20:16 -0600)
committerAlan J. Pippin <ajp@pippins.net>
Tue, 11 Mar 2008 02:16:09 +0000 (20:16 -0600)
zfs-scrub-usb-drive [new file with mode: 0755]

diff --git a/zfs-scrub-usb-drive b/zfs-scrub-usb-drive
new file mode 100755 (executable)
index 0000000..8a07e5c
--- /dev/null
@@ -0,0 +1,60 @@
+#!/bin/bash
+
+# Author: Alan J. Pippin
+# Description: This script will attempt to scrub a given USB drive
+#              This script ensures that only 1 scrub operation is 
+#              running at any given time. This serializes the zfs 
+#              scrub process for any pool.
+
+maxsleeptime=360
+mailto=root
+
+for i in backups
+do
+  # Check to see if any zfs filesystem has a scrub being performed on it now.
+  # If it does, we cannot perform more than one scrub operation at a time.
+  while true; do
+    /sbin/zpool status | grep scrub: | grep "in progress" > /dev/null 2>&1
+    if [ $? == 0 ]; then
+        # Another zpool scrub operation is already running
+        # Wait until it is done before continuing
+        ransleep=$(($RANDOM % $maxsleeptime))
+        sleep $ransleep
+    else
+        # Another zpool scrub operation is not running
+        break
+    fi
+  done
+
+  echo "Scrubing zfs pool $i"
+  /usr/local/etc/bin/usb-drive-power on
+  /sbin/zpool import $i
+  /sbin/zpool scrub $i
+
+  # Wait until the scrub completes, and check for any errors
+  while true; do
+    /sbin/zpool status $i | grep scrub: | grep "in progress" > /dev/null 2>&1
+    if [ $? == 0 ]; then
+        # Our zpool scrub operation is still running
+        # Wait until it is done before continuing
+        ransleep=$(($RANDOM % $maxsleeptime))
+        sleep $ransleep
+    else
+        # Our scrub operation has completed
+        break
+    fi
+  done
+
+  # Check for any scrub errors
+  /sbin/zpool status $i | grep scrub: | grep "with 0 errors" > /dev/null 2>&1
+  if [ $? != 0 ]; then
+    # The scrub found errors
+    /sbin/zpool status $i | /usr/bin/mailx -s "zpool scrub $i found errors" $mailto 
+  fi 
+
+  # Power off the USB drive
+  /sbin/zpool export $i
+  /usr/local/etc/bin/usb-drive-power off
+
+done
+