]> oss.titaniummirror.com Git - ovzbpc.git/commitdiff
Better logging, better error reporting, fix defect in removing old backup
authorsmckown <smckown@986fd584-583e-0410-b54d-b9fe63dff8e5>
Fri, 11 Apr 2008 18:40:41 +0000 (18:40 +0000)
committersmckown <smckown@986fd584-583e-0410-b54d-b9fe63dff8e5>
Fri, 11 Apr 2008 18:40:41 +0000 (18:40 +0000)
directories to free space for new ones.

bpcbackup
bpcdump

index ad4db0a8374f8c91a1dcea702e123ec156c81f32..d70d2285845bae52a5c76c3031f8be81b8d4b11a 100755 (executable)
--- a/bpcbackup
+++ b/bpcbackup
@@ -28,4 +28,9 @@ fi
 # has to be physically connected first, and may require authentication on mount
 # if the volume is encrypted.
 bpcdump
+ret=$?
 esata umount
+ret2=$?
+[ "$ret" != "0" ] && exit $ret
+[ "$ret2" != "0" ] && exit $ret2
+exit 0
diff --git a/bpcdump b/bpcdump
index 1b5e88f56f287f8d3b660c90f8ae004772aa632d..6c14bbdae836acced6c5782ab81e649205fc3866 100755 (executable)
--- a/bpcdump
+++ b/bpcdump
@@ -17,17 +17,28 @@ VEDEV=/dev/vg0/ve$VEID
 VEMNT=/var/lib/vz/private/$VEID
 EXTFS=/media/esata
 unset WRITEPAR
+INFO=/dev/null
 
 # FUNCTIONS
 
+info()
+{
+    echo "$*" | tee -a "$INFO"
+}
+
+error()
+{
+    echo "$*" | tee -a "$INFO" >&2
+}
+
 restartve()
 {
     if [ -n "$mounted" ]; then
-       echo "remounting VEID $VEID" | tee -a "$INFO"
+       info "remounting VEID $VEID"
        mount $VEMNT && unset mounted
     fi
     if [ -n "$running" ]; then
-       echo "restarting VEID $VEID" | tee -a "$INFO"
+       info "restarting VEID $VEID"
        vzctl start $VEID && unset running
     fi
 }
@@ -37,30 +48,28 @@ cleanup()
     ret="$1"
     shift
     msg="$*"
-    if [ -z "$INFO" ]; then
-       echo "$0: $msg" >&2
+    [ -z "$ret" ] && ret=-1
+    [ -z "$msg" ] && msg=undef
+    restartve
+    if [ "$ret" = "0" ]; then
+       info "$(date)"
+       info "cleanup message: $msg"
+       info "exit $ret"
+       touch "$EXTVEIDFS/good"
     else
-       [ -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"
+       error "$(date)"
+       error "cleanup message: $msg"
+       error "exit $ret"
+       touch "$EXTVEIDFS/bad"
     fi
+    [ -n "$backupwarn" ] && info "WARNINGS FOUND" >> "$INFO"
     exit $ret
 }
 
 # MAIN
 
+trap "cleanup 1 \"termination by signal\"" SIGINT SIGTERM
+
 if [ $(whoami) != "root" ]; then
     cleanup 1 "script requires super-user privileges"
 fi
@@ -74,19 +83,19 @@ unset exist mounted running backupwarn
 if ! mount | grep -q "on $EXTFS"; then
     cleanup 1 "$EXTFS is not mounted"
 else
-    echo "$EXTFS is mounted"
+    info "$EXTFS is mounted"
 fi
 
 if [ -z "$exist" ]; then
     cleanup 1 "VEID $VEID does not exist"
 else
-    echo "VEID $VEID exists"
+    info "VEID $VEID exists"
 fi
 
 if [ ! -d "$VEMNT" ]; then
     cleanup 1 "mount point for VEID $VEID does not exist"
 else
-    echo "VEID $VEID has private mount point"
+    info "VEID $VEID has private mount point"
 fi
 
 if ! grep -q "$VEMNT[  ]" /etc/fstab; then
@@ -96,11 +105,11 @@ fi
 if ! mount | grep -q "on $VEMNT"; then
     cleanup 1 "$VEMNT is not mounted"
 else
-    echo "VEID $VEID is mounted on $VEMNT"
+    info "VEID $VEID is mounted on $VEMNT"
 fi
 
 if [ -n "$running" ]; then
-    echo "stopping VEID $VEID"
+    info "stopping VEID $VEID"
     vzctl stop $VEID
 fi
 
@@ -111,8 +120,8 @@ if mount | grep -q "on $VEMNT"; then
     # Add 5% buffer
     t=$((srcblks / 20))
     srcblks=$((srcblks + t))
-    echo "VEID fs contains $srcblks blocks"
-    echo "unmount VEID $VEID"
+    info "VEID fs contains $srcblks blocks"
+    info "unmount VEID $VEID"
     umount "$VEMNT"
 else
     cleanup 1 "VEID private fs must be mounted to determine its size"
@@ -121,18 +130,21 @@ fi
 # Before we begin writing, remove old backup dirs until we have room
 dstblks=$(df -P "$EXTFS" | grep "$EXTFS" | awk '{ print $4 }')
 while [ $dstblks -le $srcblks ]; do
+    info "Not enough space on $EXTFS"
     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
+    if [ -d "$EXTFS/$oldest" ]; then
+       info "Removing old backup $oldest from $EXTFS"
+       rm -rf "$EXTFS/$oldest"
+    else
+       cleanup 1 "Structure error on $EXTFS.  Correct manually."
     fi
     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"
 fi
-echo "Archive space ok: need $srcblks KB, have $dstblks KB"
+info "Archive space ok: need $srcblks KB, have $dstblks KB"
 
 EXTVEIDFS="$EXTFS/ve$VEID-$(date +'%Y%m%d')"
 if [ -d "$EXTVEIDFS" ]; then
@@ -157,17 +169,17 @@ dd_rescue bad blocks: ddrbb
 image file: image
 
 +EOF+
-echo "copy $VEID device $VEDEV to $EXTVEIDFS/image" | tee -a "$INFO"
+info "copy $VEID device $VEDEV to $EXTVEIDFS/image"
 time dd_rescue -Aqy 8192 -l "$EXTVEIDFS/ddrlog" -o "$EXTVEIDFS/ddrbb" \
        $VEDEV "$EXTVEIDFS/image"
 ret=$?
 if [ "$ret" != "0" ]; then
     backupwarn=1
-    echo "WARNING: dd_rescue returned $ret" | tee -a "$INFO" >&2
+    error "WARNING: dd_rescue returned $ret"
 fi
-echo "calculate md5sum for $VEDEV (src)" | tee -a "$INFO"
+info "calculate md5sum for $VEDEV (src)"
 srcmd5=$(md5sum "$VEDEV" 2>&1 | awk '{ print $1 }')
-echo "calculate md5sum for image (dst)" | tee -a "$INFO"
+info "calculate md5sum for image (dst)"
 
 # We're done with the partition.  We can restart the VE now.
 restartve
@@ -176,26 +188,26 @@ restartve
 (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"
+info "$srcmd5 source md5sum"
+info "$dstmd5 dest md5sum"
 if [ "$srcmd5" != "$dstmd5" -o -z "$srcmd5" ]; then
     backupwarn=1
-    echo "WARNING: md5 signatures do not match" | tee -a "$INFO" >&2
+    error "WARNING: md5 signatures do not match"
 else
-    echo "md5 signatures match" | tee -a "$INFO"
+    info "md5 signatures match"
 fi
 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"
+       info "WARNING: redundancy failed: par2 returned $ret"
     fi
     (cd "$EXTVEIDFS" && time par2 v img)
     ret=$?
     if [ "$ret" != "0" ]; then
        backupwarn=1
-       echo "WARNING: redundancy inexact: par2 returned $ret" | tee -a "$INFO"
+       info "WARNING: redundancy inexact: par2 returned $ret"
     fi
 fi