X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/rsync-backup/blobdiff_plain/9653f45d4e6e3009f86f912c7bee4441e9ae2b06..ec1d1af:/rsync-backup.in diff --git a/rsync-backup.in b/rsync-backup.in index 2c1e3b6..43b5efb 100644 --- a/rsync-backup.in +++ b/rsync-backup.in @@ -534,6 +534,21 @@ unset VOLUME bkprc=0 +hash_file () { + file=$1 + + case $HASH in + md5 | sha1 | sha224 | sha256 | sha384 | sha512) + set -- $(${HASH}sum <"$file") + echo "$1" + ;; + *) + set -- $(openssl dgst -$HASH <"$file") + echo "$2" + ;; + esac +} + remote_fshash () { _hostrun $userat$host " umask 077 @@ -628,6 +643,9 @@ do_backup () { ## Maybe we need to retry the backup. while :; do + ## Rig checksum variables to mismatch unless they're set later. + hrfs=REMOTE hlfs=LOCAL + ## Create and mount the remote snapshot. case $dryrun in t) @@ -685,7 +703,16 @@ do_backup () { run "@$host: fshash $fs" remote_fshash rc_fshash=$? set -e - case $dryrun in nil) $verbose " done" ;; esac + case $dryrun in + nil) + hrfs=$(hash_file "$fshashdir/$fs.bkp") + $log "remote fshash $HASH checksum: $hlfs" + $verbose " done" + ;; + t) + hrfs=UNSET + ;; + esac ## Remove the snapshot. maybe unsnap_$snap $snapargs $fs $fsarg @@ -706,7 +733,16 @@ do_backup () { nil) $verbose -n " local fshash..." ;; esac run "local fshash $host:$fs" local_fshash || return $? - case $dryrun in nil) $verbose " done" ;; esac + case $dryrun in + nil) + hlfs=$(hash_file "$localmap") + $log "local fshash $HASH checksum: $hlfs" + $verbose " done" + ;; + t) + hlfs=UNSET + ;; + esac ## Compare the two maps. set +e @@ -730,6 +766,16 @@ do_backup () { esac done + ## Double-check the checksums. + if [ $hrfs != $hlfs ]; then + cat >&2 <