Daily Backups
(but note, straightforward doesn't imply simple :p)
#!/bin/bash
renice 20 $$
ionice -c3 -p$$
base=$(basename "$0")
# export DISPLAY=:0
echo $(date) Starting backups >> /var/log/backup
BACKUP_TO_A="/media/drive_a/"
BACKUP_TO_B="/media/drive_b/"
mountpoint "$BACKUP_TO_A" && BACKUP_TO="$BACKUP_TO_A"
mountpoint "$BACKUP_TO_B" && BACKUP_TO="$BACKUP_TO_B"
mountpoint "$BACKUP_TO" || exit
YESTERDAY="$(ls -1r ${BACKUP_TO}| head -n 1)"
TODAY="$(date +%F)"
#btrfs subvolume snapshot
echo $(date) Will snapshot ${YESTERDAY} to ${TODAY} >> /var/log/backup
mountpoint "${BACKUP_TO}/${TODAY}" || {
btrfs subvolume snapshot "${BACKUP_TO}/${YESTERDAY}" "${BACKUP_TO}/${TODAY}" || exit 1
}
touch "${BACKUP_TO}/${TODAY}" || true
chmod a+rx "${BACKUP_TO}/${TODAY}" || true
mkdir /var/backups/share/backup || true
umount -l /var/backups/share/backup || true
mount --bind $BACKUP_TO /var/backups/share/backup || true
BACKUP_TO="${BACKUP_TO}/${TODAY}"
echo $(date) Backing up to $BACKUP_TO >> /var/log/backup
echo $(date) Start: $(df -h $BACKUP_TO | tail -n 1)
eval $(ssh-agent)
ssh-add
STANDARD_PARMS="--inplace --delete --ignore-errors --exclude .local/share/Trash/ --exclude .gvfs/ --exclude /media/"
PARMS="-vaxR $STANDARD_PARMS"
MOUNTS="-vaR $STANDARD_PARMS"
do_backup ()
{
TARGET_USER="$1"
TARGET_HOST="$2"
TARGET_PATH="$3"
echo $(date) Trying: $TARGET_HOST:$TARGET_PATH >> /var/log/backup
STORE_PATH="$BACKUP_TO/$TARGET_HOST"
ping -c 1 $TARGET_HOST && {
echo $(date) Starting: $TARGET_HOST:$TARGET_PATH >> /var/log/backup
mkdir -p $STORE_PATH
rsync --rsync-path='rsync --blocking-io' $PARMS $TARGET_USER@$TARGET_HOST:$TARGET_PATH $STORE_PATH
echo $(date) Complete: $TARGET_HOST@$TARGET_PATH >> /var/log/backup
}
}
do_local_backup ()
{
TARGET_PATH="$1"
STORE_PATH="$BACKUP_TO/local"
echo $(date) Trying: local:$TARGET_PATH >> /var/log/backup
# mountpoint $TARGET_PATH && {
find $TARGET_PATH -maxdepth 0 -not -empty -type d | grep / && {
echo $(date) Starting: local:$TARGET_PATH >> /var/log/backup
mkdir -p $STORE_PATH
rsync $PARMS $TARGET_PATH $STORE_PATH
echo $(date) Complete: local:$TARGET_PATH >> /var/log/backup
}
}
do_backup root applicati.local / office/applicati &
PARMS="$PARMS --exclude foo/ --exclude Music/" do_backup root cwillu-laptop.local / office/cwillu-laptop &
btrfs subvolume snapshot / /backup-snap && {
do_local_backup /backup-snap/./
btrfs subvolume delete /backup-snap
} &
do_local_backup /media/shares &
wait
ssh-agent -k
echo $(date) End: $(df -h $BACKUP_TO | tail -n 1)
echo $(date) Backups Complete >> /var/log/backup
