add backup script for Hetzner Storagebox (Alpha) VPS data
This commit is contained in:
parent
ce9504401b
commit
896ccdbfa0
1 changed files with 86 additions and 0 deletions
86
storagebox_alpha_backup.sh
Executable file
86
storagebox_alpha_backup.sh
Executable file
|
@ -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
|
Loading…
Add table
Reference in a new issue