initial backup-git.sh
This commit is contained in:
parent
d371bb9056
commit
6567fd50d8
53
backup/backup-git.sh
Executable file
53
backup/backup-git.sh
Executable file
@ -0,0 +1,53 @@
|
||||
#!/usr/bin/env bash
|
||||
set -Eeuo pipefail
|
||||
|
||||
SRC_ROOT="/works/git/"
|
||||
DEST_USER="cvtt"
|
||||
DEST_HOST="hs01.cvtt.vpn"
|
||||
DEST_BASE="/backup/git/snapshots"
|
||||
TODAY="$(date +%F)"
|
||||
DEST_TODAY="${DEST_BASE}/${TODAY}"
|
||||
SSH_OPTS="ssh -o BatchMode=yes -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"
|
||||
|
||||
COMMON=
|
||||
COMMON+="-avHAX"
|
||||
COMMON+=" --numeric-ids"
|
||||
COMMON+=" --delete"
|
||||
COMMON+=" --partial"
|
||||
COMMON+=" --delay-updates"
|
||||
COMMON+=" --no-inc-recursive"
|
||||
COMMON+=" --mkpath"
|
||||
COMMON+=" -e '${SSH_OPTS}'"
|
||||
COMMON+=" --exclude '**/*.lock'"
|
||||
COMMON+=" --exclude '**/hooks/*.sample'"
|
||||
|
||||
# Two-phase to avoid refs racing
|
||||
PHASE1=
|
||||
PHASE1+="${COMMON}"
|
||||
PHASE1+=" --exclude '**/refs/**'"
|
||||
PHASE1+=" --exclude '**/packed-refs'"
|
||||
PHASE1+=" --exclude '**/HEAD'"
|
||||
|
||||
PHASE2=
|
||||
PHASE2+="${COMMON}"
|
||||
PHASE2+=" --include '**/refs/**'"
|
||||
PHASE2+=" --include '**/packed-refs'"
|
||||
PHASE2+=" --include '**/HEAD'"
|
||||
PHASE2+=" --include '*/'"
|
||||
PHASE2+=" --exclude '*'"
|
||||
|
||||
TARGET="${DEST_USER}@${DEST_HOST}:${DEST_TODAY%/}/"
|
||||
|
||||
echo "== Phase 1 =="
|
||||
Cmd="rsync ${PHASE1} ${SRC_ROOT} ${TARGET}"
|
||||
echo ${Cmd} && eval ${Cmd}
|
||||
|
||||
echo "== Phase 2 =="
|
||||
Cmd="rsync ${PHASE2} ${SRC_ROOT} ${TARGET}"
|
||||
echo ${Cmd} && eval ${Cmd}
|
||||
|
||||
echo "== Consistency re-check =="
|
||||
echo ${Cmd} && eval ${Cmd}
|
||||
|
||||
echo "Snapshot completed: $DEST_TODAY"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user