Created
February 3, 2021 21:09
-
-
Save binwiederhier/dce6836b7b64eb26e7fdc7c37ad42c42 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
PATH="$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/phil/.bin" | |
RSYNC_ROOT_EXCLUDES=" | |
--exclude /cdrom/ | |
--exclude /dev/ | |
--exclude /exports/ | |
--exclude /proc/ | |
--exclude /run/ | |
--exclude /sys/ | |
--exclude /tmp/ | |
--exclude /var/tmp/ | |
--exclude /swapfile | |
" | |
all() { | |
run myserver | |
run plep | |
run pommes | |
run mail | |
} | |
# myserver ###################################################################### | |
myserver() { | |
run myserver_root | |
} | |
myserver_root() { | |
if zfs_mount homePool/backups/myserver; then | |
( | |
flock -n -x 9 || { echo "Already running."; return; } | |
rsync \ | |
-e 'ssh -p 2222 -o ConnectTimeout=15' \ | |
-av \ | |
--delete \ | |
--delete-excluded \ | |
--compress \ | |
--exclude /aquota.group \ | |
--exclude /aquota.user \ | |
--exclude /silv/www/myserver.com/blog.myserver.com/blog/wp-content/cache/ \ | |
$RSYNC_ROOT_EXCLUDES \ | |
[email protected]:/ \ | |
/homePool/backups/myserver/ \ | |
&& zfs snapshot homePool/backups/myserver@`date +%y%m%d%H%M` \ | |
&& zfsret homePool/backups/myserver 365 | |
) 9> /var/lock/gobackup_myserver_root | |
fi | |
} | |
# plep ######################################################################## | |
plep() { | |
run plep_root | |
} | |
plep_root() { | |
if zfs_mount homePool/backups/plep; then | |
rsync \ | |
-e "ssh -o ConnectTimeout=15" \ | |
-av \ | |
--delete \ | |
--delete-excluded \ | |
--compress \ | |
--sparse \ | |
--exclude /home/phil/Mounts/ \ | |
$RSYNC_ROOT_EXCLUDES \ | |
root@plep:/ \ | |
/homePool/backups/plep/ \ | |
&& zfs snapshot homePool/backups/plep@`date +%y%m%d%H%M` \ | |
&& zfsret homePool/backups/plep 100 | |
fi | |
} | |
# pommes ####################################################################### | |
pommes() { | |
run pommes_root | |
} | |
pommes_root() { | |
if zfs_mount homePool/backups/pommes; then | |
rsync \ | |
-av \ | |
--one-file-system \ | |
--delete \ | |
--delete-excluded \ | |
--compress \ | |
$RSYNC_ROOT_EXCLUDES \ | |
/ \ | |
/homePool/backups/pommes/ \ | |
&& zfs snapshot homePool/backups/pommes@`date +%y%m%d%H%M` \ | |
&& zfsret homePool/backups/pommes 100 | |
fi | |
} | |
# mail ######################################################################### | |
mail() { | |
run mail_gmail_phil | |
} | |
mail_gmail_phil() { | |
( | |
flock -n -x 9 || { echo "Already running."; return; } | |
gmvault sync \ | |
--db-dir /homePool/backups/mail-gmail-phil/ \ | |
--no-compression \ | |
--type quick \ | |
[email protected] | |
if [ "$?" = "0" ]; then | |
zfs snapshot homePool/backups/mail-gmail-phil@`date +%y%m%d%H%M` \ | |
&& zfsret homePool/backups/mail-gmail-phil 100 | |
else | |
xmppsend "Gmail backup for [email protected] failed" | |
fi | |
) 9> /var/lock/gobackup_mail_gmail_phil | |
} | |
# script ####################################################################### | |
zfs_mount() { | |
if [ "$(zfs get -H -ovalue mounted $1)" != "yes" ]; then | |
zfs mount $1 | |
fi | |
} | |
run() { | |
echo "[$(date)] $1" | |
echo "[$(date)] ----------------------------" | |
$1 | |
echo "[$(date)] Done $1" | |
echo "" | |
} | |
if [ -z "$1" ]; then | |
echo "Usage: $0 [TASK]..." | |
echo "Run backup tasks" | |
echo "" | |
echo "Tasks:" | |
cat "$0" | grep -E '[_a-z]+\(\)\s+\{' | grep -oE '[a-z_0-9]+' | grep -vE 'zfs_mount|run' | |
echo "" | |
else | |
while [ $# -gt 0 ]; do | |
case $1 in | |
*) | |
if type -t "$1" > /dev/null; then | |
run "$1" | |
else | |
echo "Unknown task $1. Ignoring." | |
fi | |
shift | |
;; | |
esac | |
done | |
fi | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment