]> oss.titaniummirror.com Git - ovzbpc.git/blobdiff - bpcdump
Have to eval when looking for oldest backup to remove so file globbing is done
[ovzbpc.git] / bpcdump
diff --git a/bpcdump b/bpcdump
index 3953ef98a7a4ac87e6b6bf0977271ef2adb64b25..1b5e88f56f287f8d3b660c90f8ae004772aa632d 100755 (executable)
--- a/bpcdump
+++ b/bpcdump
@@ -16,6 +16,7 @@ VEID=1158
 VEDEV=/dev/vg0/ve$VEID
 VEMNT=/var/lib/vz/private/$VEID
 EXTFS=/media/esata
+unset WRITEPAR
 
 # FUNCTIONS
 
@@ -36,29 +37,32 @@ cleanup()
     ret="$1"
     shift
     msg="$*"
-    [ -n "$ret" ] && ret=-1
-    [ -n "$msg" ] && msg=undef
-    restartve
-    if [ "$ret" = "0" ]; then
-       echo "$(date)" | tee -a "$INFO"
-       echo "$msg" | tee -a "$INFO"
-       echo "exit $ret" | tee -a "$INFO"
-       touch "$EXTVEIDFS/good"
+    if [ -z "$INFO" ]; then
+       echo "$0: $msg" >&2
     else
-       echo "$(date)" | tee -a "$INFO" >&2
-       echo "$msg" | tee -a "$INFO" >&2
-       echo "exit $ret" | tee -a "$INFO" >&2
-       touch "$EXTVEIDFS/bad"
+       [ -z "$ret" ] && ret=-1
+       [ -z "$msg" ] && msg=undef
+       restartve
+       if [ "$ret" = "0" ]; then
+           echo "$(date)" | tee -a "$INFO"
+           echo "cleanup message: $msg" | tee -a "$INFO"
+           echo "exit $ret" | tee -a "$INFO"
+           touch "$EXTVEIDFS/good"
+       else
+           echo "$(date)" | tee -a "$INFO" >&2
+           echo "cleanup message: $msg" | tee -a "$INFO" >&2
+           echo "exit $ret" | tee -a "$INFO" >&2
+           touch "$EXTVEIDFS/bad"
+       fi
+       [ -n "$backupwarn" ] && echo "WARNINGS FOUND" >> "$INFO"
     fi
-    [ -n "$backupwarn" ] && echo "WARNINGS FOUND" >> "$INFO"
     exit $ret
 }
 
 # MAIN
 
 if [ $(whoami) != "root" ]; then
-    echo "$0: script requires super-user privileges" >&2
-    exit 1
+    cleanup 1 "script requires super-user privileges"
 fi
 
 set $(vzctl status $VEID)
@@ -68,34 +72,29 @@ unset exist mounted running backupwarn
 [ "$5" = "running" ] && running=1
 
 if ! mount | grep -q "on $EXTFS"; then
-    echo "$0: $EXTFS is not mounted" >&2
-    exit 1
+    cleanup 1 "$EXTFS is not mounted"
 else
     echo "$EXTFS is mounted"
 fi
 
 if [ -z "$exist" ]; then
-    echo "$0: VEID $VEID does not exist" >&2
-    exit 1
+    cleanup 1 "VEID $VEID does not exist"
 else
     echo "VEID $VEID exists"
 fi
 
 if [ ! -d "$VEMNT" ]; then
-    echo "$0: mount point for VEID $VEID does not exist" >&2
-    exit 1
+    cleanup 1 "mount point for VEID $VEID does not exist"
 else
     echo "VEID $VEID has private mount point"
 fi
 
 if ! grep -q "$VEMNT[  ]" /etc/fstab; then
-    echo "$0: mount point for VEID $VEID not in /etc/fstab" >&2
-    exit 1
+    cleanup 1 "mount point for VEID $VEID not in /etc/fstab"
 fi
 
 if ! mount | grep -q "on $VEMNT"; then
-    echo "$0: $VEMNT is not mounted" >&2
-    exit 1
+    cleanup 1 "$VEMNT is not mounted"
 else
     echo "VEID $VEID is mounted on $VEMNT"
 fi
@@ -108,7 +107,7 @@ fi
 # Unmount the filesystem, first getting its size
 if mount | grep -q "on $VEMNT"; then
     mounted=1 # duplicate; vzctl status told us...
-    srcblks=$(df "$VEMNT" | grep "VEMNT" | awk '{ print $2 }')
+    srcblks=$(df -P "$VEMNT" | grep "$VEMNT" | awk '{ print $2 }')
     # Add 5% buffer
     t=$((srcblks / 20))
     srcblks=$((srcblks + t))
@@ -120,15 +119,15 @@ else
 fi
 
 # Before we begin writing, remove old backup dirs until we have room
-dstblks=$(df "$EXTFS" | grep "$EXTFS" | awk '{ print $4 }')
+dstblks=$(df -P "$EXTFS" | grep "$EXTFS" | awk '{ print $4 }')
 while [ $dstblks -le $srcblks ]; do
-    oldest=$(cd $EXTFS && ls -ld "ve${VEID}*" 2>/dev/null | tail -1 | \
+    oldest=$(cd $EXTFS && eval ls -ltd "ve${VEID}*" 2>/dev/null | tail -1 | \
        awk '{ print $8 }')
     if [ -d "$oldest" ]; then
        echo "Removing old backup $oldest from $EXTFS"
        rm -rf $oldest
     fi
-    dstblks=$(df "$EXTFS" | grep "$EXTFS" | awk '{ print $4 }')
+    dstblks=$(df -P "$EXTFS" | grep "$EXTFS" | awk '{ print $4 }')
 done
 if [ $dstblks -le $srcblks ]; then
     cleanup 1 "out of space: need $srcblks KB, have $dstblks KB"
@@ -141,9 +140,9 @@ if [ -d "$EXTVEIDFS" ]; then
     mv "$EXTVEIDFS" "${EXTVEIDFS}.old"
 else
     rm -rf "$EXTVEIDFS"
-    mkdir "$EXTVEIDFS"
-    date > "$EXTVEIDFS/begin"
 fi
+mkdir "$EXTVEIDFS"
+date > "$EXTVEIDFS/begin"
 if ! cd "$EXTVEIDFS"; then
     cleanup 1 "cannot change into $EXTVEIDFS directory"
 fi
@@ -155,12 +154,12 @@ VEID: $VEID
 Volume: $VEDEV
 dd_rescue log: ddrlog
 dd_rescue bad blocks: ddrbb
-img file: img
+image file: image
 
 +EOF+
-echo "copy $VEID device $VEDEV to img" | tee -a "$INFO"
+echo "copy $VEID device $VEDEV to $EXTVEIDFS/image" | tee -a "$INFO"
 time dd_rescue -Aqy 8192 -l "$EXTVEIDFS/ddrlog" -o "$EXTVEIDFS/ddrbb" \
-       $VEDEV "$EXTVEIDFS/img"
+       $VEDEV "$EXTVEIDFS/image"
 ret=$?
 if [ "$ret" != "0" ]; then
     backupwarn=1
@@ -168,32 +167,36 @@ if [ "$ret" != "0" ]; then
 fi
 echo "calculate md5sum for $VEDEV (src)" | tee -a "$INFO"
 srcmd5=$(md5sum "$VEDEV" 2>&1 | awk '{ print $1 }')
-echo "calculate md5sum for img (dst)" | tee -a "$INFO"
+echo "calculate md5sum for image (dst)" | tee -a "$INFO"
 
 # We're done with the partition.  We can restart the VE now.
 restartve
 
 # Continue on with archive and validation
-dstmd5=$(cd "$EXTVEIDFS" && time md5sum img >destmd5 2>&1 | awk '{ print $1 }')
-echo "$srcmd5 srcmd5" | tee -a "$INFO"
-echo "$dstmd5 dstmd5" | tee -a "$INFO"
+(cd "$EXTVEIDFS" && md5sum image >image.md5sum 2>&1 | awk '{ print $1 }')
+dstmd5=$(md5sum "$EXTVEIDFS/image" 2>&1 | awk '{ print $1 }')
+echo "$dstmd5 image.md5sum" > "$EXTVEIDFS/image.md5sum"
+echo "$srcmd5 source md5sum" | tee -a "$INFO"
+echo "$dstmd5 dest md5sum" | tee -a "$INFO"
 if [ "$srcmd5" != "$dstmd5" -o -z "$srcmd5" ]; then
     backupwarn=1
     echo "WARNING: md5 signatures do not match" | tee -a "$INFO" >&2
 else
     echo "md5 signatures match" | tee -a "$INFO"
 fi
-(cd "$EXTVEIDFS" && time par2 c img)
-ret=$?
-if [ "$ret" != "0" ]; then
-    backupwarn=1
-    echo "WARNING: redundancy failed: par2 returned $ret" | tee -a "$INFO"
-fi
-(cd "$EXTVEIDFS" && time par2 v img)
-ret=$?
-if [ "$ret" != "0" ]; then
-    backupwarn=1
-    echo "WARNING: redundancy inexact: par2 returned $ret" | tee -a "$INFO"
+if [ -n "$WRITEPAR" ]; then
+    (cd "$EXTVEIDFS" && time par2 c img)
+    ret=$?
+    if [ "$ret" != "0" ]; then
+       backupwarn=1
+       echo "WARNING: redundancy failed: par2 returned $ret" | tee -a "$INFO"
+    fi
+    (cd "$EXTVEIDFS" && time par2 v img)
+    ret=$?
+    if [ "$ret" != "0" ]; then
+       backupwarn=1
+       echo "WARNING: redundancy inexact: par2 returned $ret" | tee -a "$INFO"
+    fi
 fi
 
 cleanup 0 "successful"