From: smckown Date: Fri, 11 Apr 2008 18:40:41 +0000 (+0000) Subject: Better logging, better error reporting, fix defect in removing old backup X-Git-Url: https://oss.titaniummirror.com/gitweb/?a=commitdiff_plain;h=51951ec2cbb512b80debd37174858a9568f7cee3;p=ovzbpc.git Better logging, better error reporting, fix defect in removing old backup directories to free space for new ones. --- diff --git a/bpcbackup b/bpcbackup index ad4db0a..d70d228 100755 --- 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 1b5e88f..6c14bbd 100755 --- 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