#!/bin/sh set -x # # how to use rsync to approximate 'timemachine' but to a remote machine. # WE do not support hard links on directories, so we can't be quite as efficient as Apple's TimeMachine. # Note: use quotes throughout as filenames may (do) include spaces. # Note: drive (ON OS X) should be mounted with uids enabled.. sudo /usr/sbin/vsdbutil -a /Volumes/${VOLUME_NAME} # Note: entries can also be put in /etc/fstab to affect mounting but in OS X 10.5 or later one should use 'vifs'. # Assume syou have an ssh key on hte remote end unless you wnat to always type a password. # runs as root. This was running on FreeBSD talking to FreeBSD. ROOT_VOLUME="SYSTEM_ROOT" APPDIR="Backups.backupdb" ORIGINALBASE="/" EXCLUDEFILE="/root/exclude-from-backup" BACKUPBASE="backupdir" BACKUPDIR="${BACKUPBASE}/${APPDIR}" BACKUPHOSTDIR="${BACKUPDIR}/`hostname -s`" BACKUPHOST="backup" BACKUPFILENAME=`date +"%Y-%m-%d-%H%M%S"` LATESTLINK="${BACKUPHOSTDIR}/Latest" BACKUPNAME="${BACKUPHOSTDIR}/${BACKUPFILENAME}" TEMPNAME="${BACKUPNAME}.inprogress" CREATENAME="${TEMPNAME}/${ROOT_VOLUME}" REMOTE_CMD="ssh ${BACKUPHOST}" #if [ -d "${BACKUPNAME}" ] #then # echo "ERROR: Backup ${BACKUPNAME} already exists. Exiting." # exit 1 #fi ${REMOTE_CMD} "mkdir -p ${CREATENAME}" #if [ -e "${LATESTLINK}" ] #then rsync -xaHPR "--exclude-from=${EXCLUDEFILE}" "--link-dest=../../Latest/${ROOT_VOLUME}/" "${ORIGINALBASE}" "${BACKUPHOST}:${CREATENAME}" #else # rsync -xaHPR "--exclude-from=${EXCLUDEFILE}" "${ORIGINALBASE}" "${BACKUPHOST}:${CREATENAME}" #fi if [ $? = 0 ] then ${REMOTE_CMD} touch "${TEMPNAME}/.com.apple.TMCheckpoint" ${REMOTE_CMD} mv "${TEMPNAME}" "${BACKUPNAME}" ${REMOTE_CMD} rm "${LATESTLINK}" ${REMOTE_CMD} ln -sf "${BACKUPFILENAME}" "${LATESTLINK}" else echo " Backup to ${BACKUPNAME} FAILED" ${REMOTE_CMD} mv "${TEMPNAME}" "${BACKUPNAME}.FAILED" exit 1 fi