Rsync Time Backup
This is a simple wrapper for the awesome rsync-time-backup script by Laurent Cozic. Through clever use of hard links rsync-time-backup greatly speeds up incremental backups and saves disk space.
The wrapper script is for my internal NAS environment. The script selects either production or Dev/QA NAS based on the server name. The script will then mount the correct NFS share, run various checks, prep the target folder and launch the backup.
#!/bin/bash
# |
# ___/"\___
# __________/ o \__________
# (I) (G) \___/ (O) (R)
# 2016-12-22
# ----------------------------------------------------------------------------
# Salt wrapper for rsync-time-backup
# https://github.com/laurent22/rsync-time-backup
# ----------------------------------------------------------------------------
#
configure() {
url="https://raw.githubusercontent.com/laurent22/rsync-time-backup/master/rsync_tmbackup.sh"
this_host=`/bin/hostname | awk -F'.' '{print $1}'`
if [ $(grep -c "^prod" <<<${this_host}) -eq 1 ] || [ "${this_host}" == "amidala" ]
then
nashost="prodnas01.krazyworks.com.local"
nasshare="/nfspool_prod"
else
nashost="devqanas01.krazyworks.com.local"
nasshare="/nfspool_devqa"
fi
mountdir="/nfspool"
backupdir="rsync_time_backup"
basedir="/var/adm/bin"
if [ ! -d "${basedir}" ] ; then mkdir -p "${basedir}" ; fi
this_time=$(date +'%Y-%m-%d %H:%M:%S')
this_time_epoch=$(date -d "`echo ${this_time}`" "+%s")
rsyncbackup="${basedir}/rsync_tmbackup.sh"
if [ ! -x "${rsyncbackup}" ] || [ ! -s "${rsyncbackup}" ]
then
wget --no-check-certificate -O "${rsyncbackup}" "${url}" 2>/dev/null
chmod 755 "${rsyncbackup}" 2>/dev/null
fi
}
verify() {
if [ ! -x "${rsyncbackup}" ]
then
echo "Rsync backup script ${rsyncbackup} not found. Exiting..."
exit 1
fi
if [ ! -d "${mountdir}" ]
then
mkdir -p "${mountdir}"
fi
if [ `which mountpoint >/dev/null 2>&1 ; echo $?` -eq 0 ]
then
mountstatus=$(/bin/mountpoint "${mountdir}" >/dev/null 2>&1 ; echo $?)
if [ ${mountstatus} -ne 0 ]
then
mount "${nashost}:${nasshare}" "${mountdir}"
mountstatus=$(/bin/mountpoint "${mountdir}" >/dev/null 2>&1 ; echo $?)
if [ ${mountstatus} -ne 0 ]
then
echo "Destination ${mountdir} is not mounted. Exiting..."
exit 1
fi
fi
else
if [ `df "${mountdir}" | grep -c ${nashost}` -eq 0 ]
then
mount "${nashost}:${nasshare}" "${mountdir}"
if [ `df "${mountdir}" | grep -c ${nashost}` -eq 0 ]
then
echo "Destination ${mountdir} is not mounted. Exiting..."
exit 1
fi
fi
fi
if [ ! -d "${mountdir}/${backupdir}" ]
then
echo "Destination folder ${mountdir}/${backupdir} not found on ${nashost}. Exiting..."
exit 1
fi
if [ ! -d "${mountdir}/${backupdir}/${this_host}" ]
then
mkdir -p "${mountdir}/${backupdir}/${this_host}"
fi
if [ ! -f "${mountdir}/${backupdir}/${this_host}/backup.marker" ]
then
touch "${mountdir}/${backupdir}/${this_host}/backup.marker"
fi
}
do_backup() {
nohup ${rsyncbackup} // "${mountdir}/${backupdir}/${this_host}" </dev/null >/dev/null 2>&1 &
}
do_check() {
if [ -f "${mountdir}/${backupdir}/${this_host}/backup.inprogress" ]
then
echo "Another backup is already in progress. Exiting..."
exit 1
fi
}
# RUNTIME
configure
verify
do_check
do_backup

