Changes to support mounting backup pool under linux zfs
[zfs-ubuntu/.git] / zfs-replicate-all
index 8dc4a05baa8f2402419a0f876c21b0004e2fb136..0ed35f56a149af0d61f170ea0b0323692b6df8c9 100755 (executable)
@@ -15,6 +15,17 @@ mylogfile="$logdir/zfs-replicate-all.log"
 date=`date`
 starttime=`date +%s`
 
+# Make sure we aren't already running
+SCRIPT_NAME=${0##*/}
+PROCESS_LIST=`tempfile`
+ps -ef | grep -e "$SCRIPT_NAME" | grep -v grep | grep -v $$ | grep -v $PPID >> $PROCESS_LIST
+if [[ $? == 0 ]]; then
+   echo "$date Another $SCRIPT_NAME process is already running" >> $mylogfile
+   cat $PROCESS_LIST >> $mylogfile
+   exit 1
+fi
+[[ -e "$PROCESS_LIST" ]] && rm -f $PROCESS_LIST
+
 # This function checks to see if our runtime has exceeded our stoptime
 timeexceeded() { 
   if [[ $maxruntime == 0 ]]; then
@@ -50,7 +61,7 @@ replicate() {
 
 # This function obtains the date a given snapshot was created in epoch seconds
 snapshot_age() {
-  snapshot=${local_pool}/${1}${previous_backup_marker}
+  snapshot=${backup_pool}/${1}${previous_backup_marker}
   $zfs list -t snapshot ${snapshot} > /dev/null 2>&1
   if [ $? == 0 ]; then
     $zfs get creation ${snapshot} > /dev/null 2>&1
@@ -66,17 +77,32 @@ snapshot_age() {
   fi
 }
 
-# Obtain the zpool guid for the local pool
-local_pool_guid=`zpool get guid $local_pool 2>&1 | grep $local_pool | awk '{ print $3 }'`
-zpool get guid $local_pool > /dev/null 2>&1
+# Import the local backup pool if needed and the option is given to do so, else error out
+zpool list -H "$backup_pool" >/dev/null 2>&1
+if [ $? != 0 ]; then
+  if [[ $import_export_backup_pool == 1 ]]; then
+    zpool import $backup_pool
+    if [ $? != 0 ]; then
+      echo "-E- unable to import the backup pool $backup_pool"
+      exit 1
+    fi
+  else 
+    echo "-E- The local backup pool, '$backup_pool' doesn't seem to exist." $mailto
+    exit 1
+  fi
+fi
+
+# Obtain the zpool guid for the local backup pool
+backup_pool_guid=`zpool get guid $backup_pool 2>&1 | grep $backup_pool | awk '{ print $3 }'`
+zpool get guid $backup_pool > /dev/null 2>&1
 if [ $? != 0 ]; then
-  echo >&2 "-E- Unable to extract the guid for the local pool: $local_pool"
+  echo >&2 "-E- Unable to extract the guid for the local backup pool: $backup_pool"
   exit 1
 fi
 
 # Setup our backup marker names
-current_backup_marker=@current-backup-${local_pool_guid}
-previous_backup_marker=@previous-backup-${local_pool_guid}
+current_backup_marker=@current-backup-${backup_pool_guid}
+previous_backup_marker=@previous-backup-${backup_pool_guid}
 
 # Auto snapshot every zfs filesystem on the system specified below
 echo "$date ZFS replicate started" >> $logfile
@@ -93,10 +119,18 @@ rm -f $tmpfile
 
 # Replicate the sorted filesystems
 for filesystem in $sorted_filesystems; do
-  echo "-> Replicating $remote:$filesystem to ${local_pool}/${filesystem}" | tee -a $mylogfile
+  echo "-> Replicating $remote:$filesystem to ${backup_pool}/${filesystem}" | tee -a $mylogfile
   replicate $remote $filesystem
 done
 
+# Export the local pool if told to do so
+if [[ $import_export_backup_pool == 1 ]]; then
+  zpool export $backup_pool
+  if [ $? != 0 ]; then
+    fatal_and_exit "-E- unable to export the local backup pool $backup_pool"
+  fi
+fi
+
 # All done
 echo `date` ZFS replicate complete >> $logfile
 echo `date` ZFS replicate complete | tee -a $mylogfile