Skip to content

Instantly share code, notes, and snippets.

@binwiederhier
Created February 3, 2021 21:09
Show Gist options
  • Save binwiederhier/dce6836b7b64eb26e7fdc7c37ad42c42 to your computer and use it in GitHub Desktop.
Save binwiederhier/dce6836b7b64eb26e7fdc7c37ad42c42 to your computer and use it in GitHub Desktop.
#!/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