diff --git a/storagebox_alpha_backup.sh b/storagebox_alpha_backup.sh new file mode 100755 index 0000000..e4b32e0 --- /dev/null +++ b/storagebox_alpha_backup.sh @@ -0,0 +1,86 @@ +#!/bin/bash + +# Backup Hetzner Storagebox (Alpha) used by VPS for service data. + +# USER=thomas +# export HOME=/home/thomas +# export XDG_RUNTIME_DIR=/run/user/1000 +# source /home/thomas/.env + +NAS_DEVICE_NAME="Hetzner Storagebox (Alpha)" +RCHAT_NOTIFIER="${HOME}/repos/utilities/rocketchat_notifier.sh" +SOURCE_MOUNTPOINT="/media/hetzner-storagebox-alpha" +LOCAL_MOUNTPOINT="/media/my-passport" + +# Turn off VPN +echo "INFO Attempting backup of ${NAS_DEVICE_NAME} NAS device." +echo "INFO Checking VPN status." + +mullvad status | grep "Disconnected" 2>&1 +STATUS=$? +if [ $STATUS -eq 0 ]; then + echo "INFO VPN is not connected. Proceeding." +else + echo "INFO Mullvad VPN is connected. Disconnecting." + mullvad disconnect +fi + +# Check source disk is mounted +if mountpoint -q ${LOCAL_MOUNTPOINT}; then + echo "INFO Local disk /media/my-passport mounted. Proceeding." +else + echo "INFO Local disk not mounted. Mounting /media/my-passport." + sudo mount ${LOCAL_MOUNTPOINT} + if mountpoint -q ${LOCAL_MOUNTPOINT}; then + echo "INFO Mounted /media/my-passport" + else + $RCHAT_NOTIFIER "backups" "error" \ + "Could not complete scheduled backup of ${NAS_DEVICE_NAME}. Local backup disk (/media/my-passport) not mounted." + exit + fi +fi + +# Mount NAS locally +sudo mount -t cifs -v //u455282.your-storagebox.de/backup /media/hetzner-storagebox-alpha -o \ + credentials=/etc/hetzner-storagebox-alpha-credentials,uid=1000,gid=1000,file_mode=0775,dir_mode=0775,vers=3.0 + +if mountpoint -q ${SOURCE_MOUNTPOINT}; then + echo "INFO Mounted ${NAS_DEVICE_NAME} device to /media/hetzner-storagebox-alpha" +else + $RCHAT_NOTIFIER "backups" "error" \ + "Could not complete scheduled ${NAS_DEVICE_NAME} backup. Source disk (/media/hetzner-storagebox-alpha) not mounted." + exit +fi + +# Create backup (ignoring lock files) + +echo "INFO Beginning backup." + +sudo rsync -rtv --progress --delete --no-perms \ + --exclude="*.lock" \ + --exclude="*.bleve/store/root.bolt" \ + --exclude="mongo/db/mongod.lock" \ + "$SOURCE_MOUNTPOINT/" "$LOCAL_MOUNTPOINT/vps_backups/hetzner_storagebox_alpha" + +STATUS=$? +if [ $STATUS -eq 0 ]; then + $RCHAT_NOTIFIER "backups" "success" \ + "Created backup of ${NAS_DEVICE_NAME}." + # 23 = partial backup, 24 = some vanished files, both != major failure +elif [ $STATUS -eq 23 ] || [ $STATUS -eq 24 ]; then + $RCHAT_NOTIFIER "backups" "success" \ + "Created backup of ${NAS_DEVICE_NAME}. A few files could not be copied." +else + $RCHAT_NOTIFIER "backups" "error" \ + "Failed to create backup of ${NAS_DEVICE_NAME}: problem with rsync (exit code $STATUS)." +fi + +# Dismount NAS +echo "INFO Dismounting ${NAS_DEVICE_NAME}." +sudo umount /media/hetzner-storagebox-alpha/ + +# Turn on VPN +echo "INFO Re-connecting Mullvad VPN." +mullvad connect + +exit