Files
home-manager/borg/backup.sh

80 lines
1.6 KiB
Bash
Executable File

#! /usr/bin/env bash
set -e
if [ -z "$1" ]
then
REPO="nas:~/borg"
LOCAL=false
else
DISK="$1"
LOCAL=true
fi
if $LOCAL
then
#check if unlocked
if [ -e "/dev/disk/by-label/$DISK" ]
then
echo "Disk already unlocked"
else
udisksctl unlock -b /dev/disk/by-partlabel/$DISK --key-file "$HOME/.keys/luks.key"
fi
#check if mounted
if [ -e "/run/media/$USER/$DISK" ]
then
echo "Disk already mounted"
else
udisksctl mount -b /dev/disk/by-label/$DISK
fi
REPO="/run/media/$USER/$DISK/borg"
fi
ARCHIVE="$REPO::$HOSTNAME-$(date +%Y-%m-%dT%T)"
SRC="$HOME"
BORG_PASSPHRASE=""
echo "Enter passphrase for $REPO:"
read -s BORG_PASSPHRASE
export BORG_PASSPHRASE
borg create --progress --stats --exclude-caches \
--exclude $HOME/VirtualBox\ VMs \
--exclude $HOME/.cache \
--exclude $HOME/Downloads \
--exclude $HOME/Photos \
--exclude $HOME/Videos \
--exclude $HOME/tmp \
--exclude $HOME/.local/Steam \
--exclude $HOME/.local/share/Steam \
--exclude $HOME/Audio \
$ARCHIVE $SRC && if ! $LOCAL; then date +%s > $HOME/.lastbak; fi
borg prune --stats --list --keep-within 1d --glob-archives "$HOSTNAME*" \
-d 7 \
-w 4 \
-m 12 \
-y 3 \
$REPO
if $LOCAL && nmcli connection show --active | grep '^vt-net' > /dev/null
then
echo "backing up Photo archive..."
cd "/run/media/$USER/$DISK/photos"
git annex sync
# set +e
git annex mirror --from=origin
# set -e
git annex sync
echo "backing up Audio archive..."
cd "/run/media/$USER/$DISK/audio"
git annex sync
git annex mirror --from=origin
git annex sync
cd /
udisksctl unmount -b "/dev/disk/by-label/$DISK"
udisksctl lock -b "/dev/disk/by-partlabel/$DISK"
fi