]> oss.titaniummirror.com Git - ovzbpc.git/blobdiff - bpcdump
BackupPC_ovz: report entry to more functions in debug
[ovzbpc.git] / bpcdump
diff --git a/bpcdump b/bpcdump
index fff636ab3e0bc119075185a75faee3b1535d418a..efb845621750ccc9bf83b0bfc5b340144eadf2d6 100755 (executable)
--- a/bpcdump
+++ b/bpcdump
@@ -1,7 +1,9 @@
 #!/bin/bash
 #
 # bpcdump
-# Copyright (C) 2008 by Titanium Mirror, Inc.
+# Version: __appVersion__
+#
+# Copyright (C) 2008-2012 by Titanium Mirror, Inc.
 # Author: R. Steve McKown <smckown@titaniummirror.com>
 #
 # Dumps the BPC VEID to external storage.  It must have its storage on a
@@ -17,21 +19,29 @@ VEDEV=/dev/vg0/ve$VEID
 VEMNT=/var/lib/vz/private/$VEID
 EXTFS=/media/esata
 unset WRITEPAR
-INFO=/dev/null
 export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/usr/sbin:$PATH
-SCRIPT_EXT="start stop mount umount"
+SCRIPT_EXT="conf start stop mount umount"
 CONF_DIR=/etc/vz/conf
+INFO=$(mktemp -q /tmp/bpcdump.XXXXX)
 
 # FUNCTIONS
 
 info()
 {
-    echo "$*" | tee -a "$INFO"
+    if [ -n "$INFO" ]; then
+       echo "$*" | tee -a "$INFO"
+    else
+       echo "$*"
+    fi
 }
 
 error()
 {
-    echo "$*" | tee -a "$INFO" >&2
+    if [ -n "$INFO" ]; then
+       echo "$*" | tee -a "$INFO" >&2
+    else
+       echo "$*"
+    fi
 }
 
 restartve()
@@ -60,12 +70,12 @@ cleanup()
     [ -z "$msg" ] && msg=undef
     restartve
     if [ "$ret" = "0" ]; then
-       info "$(date)"
+       info "Backup completed on $(date)"
        info "cleanup message: $msg"
        info "exit $ret"
        touch "$EXTVEIDFS/good"
     else
-       error "$(date)"
+       error "Backup TERMINATED on $(date)"
        error "cleanup message: $msg"
        error "exit $ret"
        touch "$EXTVEIDFS/bad"
@@ -76,6 +86,17 @@ cleanup()
 
 # MAIN
 
+STARTDATE=$(date)
+cat > "$INFO" <<+EOF+
+Date: $STARTDATE
+VEID: $VEID
+Volume: $VEDEV
+dd_rescue log: ddrlog
+dd_rescue bad blocks: ddrbb
+image file: image
+
++EOF+
+
 trap "cleanup 1 \"termination by signal\"" SIGINT SIGTERM
 
 if [ $(whoami) != "root" ]; then
@@ -146,12 +167,16 @@ else
     cleanup 1 "VEID private fs must be mounted to determine its size"
 fi
 
-# Before we begin writing, remove old backup dirs until we have room
+# Before we begin writing, remove old backup dirs until we have room.
+# Assume backups for any VE are fair game for removal if space is needed.
+# Other disk contents shall not be removed.
 dstblks=$(df -P "$EXTFS" | grep "$EXTFS" | awk '{ print $4 }')
 while [ $dstblks -le $srcblks ]; do
     info "Only $dstblks free on $EXTFS"
-    oldest=$(cd $EXTFS && eval ls -td "ve${VEID}*" 2>/dev/null | tail -1)
-    if [ -d "$EXTFS/$oldest" ]; then
+    oldest=$(cd $EXTFS && eval ls -td "ve[0-9]*" 2>/dev/null | tail -1)
+    if [ -z "$oldest" ]; then
+      cleanup 1 "out of space: need $srcblks KB, have $dstblks KB"
+    elif [ -d "$EXTFS/$oldest" ]; then
        info "Removing old backup $oldest from $EXTFS"
        rm -rf "$EXTFS/$oldest"
     else
@@ -171,22 +196,14 @@ if [ -d "$EXTVEIDFS" ]; then
 else
     rm -rf "$EXTVEIDFS"
 fi
-mkdir "$EXTVEIDFS"
-date > "$EXTVEIDFS/begin"
-if ! cd "$EXTVEIDFS"; then
-    cleanup 1 "cannot change into $EXTVEIDFS directory"
-fi
+mkdir "$EXTVEIDFS" || cleanup 1 "cannot mkdir $EXTVEIDFS/"
+cd "$EXTVEIDFS" || cleanup 1 "cannot cd into $EXTVEIDFS/"
+echo "$STARTDATE" > "$EXTVEIDFS/begin"
 
+# Move temporary INFO file to its permanent home within $EXTVEIDFS
+mv "$INFO" "$EXTVEIDFS/info" || cleanup 1 "cannot mv file to $EXTVEIDFS/"
 INFO="$EXTVEIDFS/info"
-cat > "$INFO" <<+EOF+
-Date: $(date)
-VEID: $VEID
-Volume: $VEDEV
-dd_rescue log: ddrlog
-dd_rescue bad blocks: ddrbb
-image file: image
 
-+EOF+
 info "copy $VEID device $VEDEV to $EXTVEIDFS/image"
 time dd_rescue -Aqy 8192 -l "$EXTVEIDFS/ddrlog" -o "$EXTVEIDFS/ddrbb" \
        $VEDEV "$EXTVEIDFS/image"