hard link instead of cp -r
[outofuni/backup.git] / bin / backup
index 191d5be..540cd99 100755 (executable)
@@ -17,21 +17,21 @@ fi
 
 config=$1
 
-host=`grep ^host $config | cut -d ' ' -f 2`
-aliases="`grep ^aliases $config | cut -d ' ' -f 2-`"
-user=`grep ^user $config | cut -d ' ' -f 2`
-homedirs="` grep ^homedirs $config | cut -d ' ' -f 2-`"
-extradirs="`grep ^extradirs $config | cut -d ' ' -f 2-`" 
-replicas=`grep ^replicas $config | cut -d ' ' -f 2`
-oldest=`grep ^oldest $config | cut -d ' ' -f 2`
-data=`grep ^data $config | cut -d ' ' -f 2`
-bandwidth=`grep ^bandwidth $config | cut -d ' ' -f 2`
-bwconn="`grep ^bandwidth $config | cut -d ' ' -f 3-`"
-compression=`grep ^compression $config | cut -d ' ' -f 2`
-compconn="`grep ^compression $config | cut -d ' ' -f 3-`"
-cipher=`grep ^cipher $config | cut -d ' ' -f 2`
-ciconn=`grep ^cipher $config | cut -d ' ' -f 3-`
-logdir=`grep ^logdir $config | cut -d ' ' -f 2`
+host=`grep ^host $config | cut -s -d ' ' -f 2`
+aliases="`grep ^aliases $config | cut -s -d ' ' -f 2-`"
+user=`grep ^user $config | cut -s -d ' ' -f 2`
+homedirs="` grep ^homedirs $config | cut -s -d ' ' -f 2-`"
+extradirs="`grep ^extradirs $config | cut -s -d ' ' -f 2-`" 
+replicas=`grep ^replicas $config | cut -s -d ' ' -f 2`
+oldest=`grep ^oldest $config | cut -s -d ' ' -f 2`
+data=`grep ^data $config | cut -s -d ' ' -f 2`
+bandwidth=`grep ^bandwidth $config | cut -s -d ' ' -f 2`
+bwconn="`grep ^bandwidth $config | cut -s -d ' ' -f 3-`"
+compression=`grep ^compression $config | cut -s -d ' ' -f 2`
+compconn="`grep ^compression $config | cut -s -d ' ' -f 3-`"
+cipher=`grep ^cipher $config | cut -s -d ' ' -f 2`
+ciconn=`grep ^cipher $config | cut -s -d ' ' -f 3-`
+logdir=`grep ^logdir $config | cut -s -d ' ' -f 2`
 
 dolog=0
 if [ ! -z "$logdir" ]; then
@@ -55,13 +55,18 @@ else
        log "host $host (via $remote) is online ..."
 fi
 
+if [ ! -z "`ssh $user@$remote 'cat ~/.backup | grep ^off'`" ]; then
+       log "backup rejected by client ..."
+       exit 0
+fi
+
 comp=6
 if [ ! -z "$compression" ]; then
        comp=$compression
        for cpair in "$compconn"; do
-               ch=`echo $cpair | cut -d ':' -f 1`
+               ch=`echo $cpair | cut -s -d ':' -f 1`
                if [[ "$remote" == "$ch"* ]]; then
-                       cl=`echo $cpair | cut -d ':' -f 2`
+                       cl=`echo $cpair | cut -s -d ':' -f 2`
                        [[ "$cl" == [0-9] ]] && comp=$cl
                fi
        done
@@ -73,9 +78,9 @@ bw=0
 if [ ! -z "$bandwidth" ]; then
        bw=$bandwidth
        for bwpair in "$bwconn"; do
-               ch=`echo $bwpair | cut -d ':' -f 1`
+               ch=`echo $bwpair | cut -s -d ':' -f 1`
                if [[ "$remote" == "$ch"* ]]; then
-                       bwl=`echo $cpair | cut -d ':' -f 2`
+                       bwl=`echo $cpair | cut -s -d ':' -f 2`
                        [ ! -z "$bwl" ] && bw=$bwl
                fi
        done
@@ -87,9 +92,9 @@ ciph=""
 if [ ! -z "$cipher" ]; then
        ciph=$cipher
        for cipair in "$ciconn"; do
-               ch=`echo $cipair | cut -d ':' -f 1`
+               ch=`echo $cipair | cut -s -d ':' -f 1`
                if [[ "$remote" == "$ch"* ]]; then
-                       cl=`echo $cipair | cut -d ':' -f 2`
+                       cl=`echo $cipair | cut -s -d ':' -f 2`
                        [ ! -z "$cl" ] && ciph=$cl
                fi
        done
@@ -128,7 +133,7 @@ done
 
 if [ ! -d $cbd ]; then
        if [ ! -z "$lpb" ]; then
-               cp -r $lpb $cbd
+               cp -al $lpb $cbd
                log starting backup $today from $lpb ...
        else
                mkdir -p $cbd
@@ -156,11 +161,13 @@ if [ ! -f $backupdir/.$today ]; then
                rsync=(rsync -aR -e "ssh -c $ciph" $rcomp --delete)
                rsync+=($rbw $user@$remote$rsrc $cbd)
        fi
-       "${rsync[@]}"
+       res=`"${rsync[@]}" 2>&1`
 
        ret=$?
        if [ "$ret" != "0" ]; then
                log backup terminated before completion ...
+               log reason:
+               log $res
                exit -50
        fi
        
@@ -176,7 +183,7 @@ fi
 cob=`echo $ob | wc -w`
 if [ $cob -gt $replicas ]; then
        ((numdel=cob-replicas))
-       todel="`echo $ob | cut -d ' ' -f 1-${numdel}`"
+       todel="`echo $ob | cut -s -d ' ' -f 1-${numdel}`"
        for dirdel in $todel; do
                past=`basename $dirdel`
                ns=`date --date="$today" +%s`