Skip to content

Instantly share code, notes, and snippets.

@LeSpocky
Last active Aug 29, 2015
Embed
What would you like to do?
Backup file system from remote server. Copy changed stuff with rsync. Create ZFS snapshots with zfSnap. Rotation is done by another cron job deleting expired snaphosts. Moved to https://github.com/LeSpocky/rzfsnapup
#!/bin/sh
set -e
set +x
# set paths here
DATE='/bin/date'
RSYNC='/usr/bin/rsync'
SSH='/usr/bin/ssh'
ZFSNAP='/usr/sbin/zfSnap'
print_usage() {
echo "Usage: $0 remotehost remotepath localzfs"
echo ''
echo 'Options:'
echo ' -h this help'
echo ' -s sparseconf config file for sparse trees'
}
# we only use classic getopt because this runs on linux and freebsd
ARGS=`getopt hs: $*`
if [ $? -ne 0 ]
then
print_usage
exit 2
fi
set -- $ARGS
while true
do
case "$1" in
-h)
print_usage
exit 0
;;
-s)
echo "would have used '$2' as sparse tree config"
SPARSE_CONFIG="$2"
shift; shift
;;
--)
shift; break;;
esac
done
# we still need $1 to $3
if [ $# -lt 3 ]
then
print_usage
exit 2
fi
DAY_OF_MONTH="$(${DATE} +%d)"
DAY_OF_WEEK="$(${DATE} +%u)"
echo "> syncing ${1}:${2}"
${RSYNC} --stats -zaH --delete -e "${SSH} -i /root/.ssh/backup" ${1}:${2}/ /${3}
echo ''
if [ "${DAY_OF_MONTH}" = '12' ]
then
echo '> creating monthly zfs snapshot'
${ZFSNAP} -v -s -S -a 2y ${3}
elif [ "${DAY_OF_WEEK}" = '3' ]
then
echo '> creating weekly zfs snapshot'
${ZFSNAP} -v -s -S -a 2m ${3}
else
echo '> creating daily zfs snapshot'
${ZFSNAP} -v -s -S -a 2w ${3}
fi
echo ''
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment