X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=chiark-utils.git;a=blobdiff_plain;f=backup%2Fsnaprsync;h=82ea5d416f8ab1dc86349b2c7287a7a3dd886626;hp=5cd567a2c3ff9c0df27a70c45c5054d66109c30d;hb=2e8778a4f845d16f601f2754de11c71ef570d33a;hpb=81c1c5a8731555d6f1d67b3d834356619907e3a1 diff --git a/backup/snaprsync b/backup/snaprsync index 5cd567a..82ea5d4 100755 --- a/backup/snaprsync +++ b/backup/snaprsync @@ -14,8 +14,35 @@ bwlimit= subdir=. rsyncopts= + rsynccompress=z + sshopts= summer=summer + +# snaprsync +# +# This file is part of chiark backup, a system for backing up GNU/Linux and +# other UN*X-compatible machines, as used on chiark.greenend.org.uk. +# +# chiark backup is: +# Copyright (C) 1997-1998,2000-2001,2007 +# Ian Jackson +# Copyright (C) 1999 Peter Maydell +# +# This is free software; you can redistribute it and/or modify it under the +# terms of the GNU General Public License as published by the Free Software +# Foundation; either version 3, or (at your option) any later version. +# +# This is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, consult the Free Software Foundation's +# website at www.fsf.org, or the GNU Project website at www.gnu.org. + + set -e badusage () { echo >&2 "snaprsync: bad usage: $1"; exit 12; } @@ -32,7 +59,7 @@ while true; do case "$name" in rhost|device|mountpoint|localarea);; localprevious|snapkind|rsharedir|retcdir|rvardir|bwlimit);; - subdir|rsyncopts|summer);; + subdir|rsyncopts|rsynccompress|sshopts|summer);; *) badusage "unknown setting $name";; esac eval "$name=\$value" @@ -54,18 +81,18 @@ done datefmt='%Y-%m-%d %H:%M:%S Z' rsync="rsync ${bwlimit:+--bwlimit} $bwlimit" -export RSYNC_RSH='ssh -o compression=no' +export RSYNC_RSH="ssh -o compression=no $sshopts" sshpfx='PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin; export PATH; ' -ssh $rhost "$sshpfx date -u '+$rhost $datefmt start'" -ssh $rhost "$sshpfx id" -ssh $rhost "$sshpfx ls -d $rsharedir" -ssh $rhost "$sshpfx ls -d $rvardir" +ssh $sshopts $rhost "$sshpfx date -u '+$rhost $datefmt start'" +ssh $sshopts $rhost "$sshpfx id" +ssh $sshopts $rhost "$sshpfx ls -d $rsharedir" +ssh $sshopts $rhost "$sshpfx ls -d $rvardir" test -d $localarea || x mkdir $localarea ournode=`uname -n` rsumsfile=for-$ournode.sums -summer="$summer -ACDbtqfx" +summer="$summer -ACDBtqfx" td=/dev/enoent rc=12 @@ -75,16 +102,16 @@ td=`mktemp -td` mkfifo -m 600 $td/sentinel exec 4<>$td/sentinel -x ssh $rhost "$sshpfx $rsharedir/snap-drop" -ssh $rhost " +x ssh $sshopts $rhost "$sshpfx $rsharedir/snap-drop $rvardir" +x ssh $sshopts $rhost " $sshpfx set -e cd $rvardir echo '$retcdir/snap/$snapkind drop $rvardir' >snap-drop.new mv snap-drop.new snap-drop " -x ssh $rhost "$sshpfx $retcdir/snap/$snapkind snap $rvardir $device $mountpoint" -ssh $rhost <$td/sentinel 4<&- " +x ssh $sshopts $rhost "$sshpfx $retcdir/snap/$snapkind snap $rvardir $device $mountpoint" +ssh $sshopts $rhost <$td/sentinel 4<&- " $sshpfx set -e date -u '+$rhost $datefmt main' @@ -99,7 +126,7 @@ ssh $rhost <$td/sentinel 4<&- " cd .. " & xspawned rsum -x $rsync -aHSxz --numeric-ids --delete $rsyncopts \ +x $rsync -aHSx$rsynccompress --numeric-ids --delete $rsyncopts \ ${localprevious:+--link-dest} $localprevious \ $rhost:$rvardir/snap-mount/$subdir $localarea/. date -u "+ $datefmt rsyncdone" @@ -113,12 +140,12 @@ exec 3>&- xwait rsum exec 4<&- date -u "+ $datefmt sumsdone" -x ssh $rhost "$sshpfx $rsharedir/snap-drop" +x ssh $sshopts $rhost "$sshpfx $rsharedir/snap-drop $rvardir" if [ "x${localprevious}" != x ] && test -f "$localprevious,rsums"; then cp "$localprevious,rsums" "$localarea,rsums" fi -x $rsync -p \ +x $rsync -pI \ $rhost:$rvardir/$rsumsfile \ "$localarea,rsums" @@ -126,7 +153,8 @@ xwait $lsum date -u "+ $datefmt checking" set +e -diff -u "$localarea,rsums" "$localarea,lsums" >"$localarea,sumsdiff" +diff -u <(sed -e 's/^mountpoint/dir /' "$localarea,rsums") \ + "$localarea,lsums" >"$localarea,sumsdiff" diffrc=$? set -e test $diffrc = 0 || test $diffrc = 1