#!/bin/bash
#
# bpcdump
+# Version: __appVersion__
+#
# Copyright (C) 2008-2012 by Titanium Mirror, Inc.
# Author: R. Steve McKown <smckown@titaniummirror.com>
#
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="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()
[ -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"
# 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
fi
# 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)
+ 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
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"