]> oss.titaniummirror.com Git - ovzbpc.git/commitdiff
bpcdump: correct defect that removes all data
authorR. Steve McKown <rsmckown@gmail.com>
Fri, 12 Oct 2012 23:24:30 +0000 (17:24 -0600)
committerR. Steve McKown <rsmckown@gmail.com>
Fri, 12 Oct 2012 23:24:30 +0000 (17:24 -0600)
If when looking for space to reclaim for a new backup the ls that scans
for old backups finds nothing, the empty result ends up causing a
recursive removal of the entire contents of the destination directory
(usually a mount point for a partition on a removeable drive).

The correct behavior is to error with a message indicating not enough
space in such situations.

bpcdump

diff --git a/bpcdump b/bpcdump
index 0693e001ec3fc728d36ee1b1da07b8b653ebd6f6..2db202c32e8ef1991a9e79b26af440223981850e 100755 (executable)
--- a/bpcdump
+++ b/bpcdump
@@ -1,7 +1,7 @@
 #!/bin/bash
 #
 # bpcdump
-# Copyright (C) 2008 by Titanium Mirror, Inc.
+# 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
@@ -146,12 +146,15 @@ 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.
+# 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
+    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