Well just in case anyone is interested I did get it working, sort of.
I think rsync was having issues chowning on the servers end because it's not running as root there but as a regular user.
I ended up just telling rsync to not preserve owner or group to avoid the chown errors, as to why that doesn't crop up when using regular ssh vs sshfs I have no idea.
So here is the final script, I realized the cron sends you an email with the output of the command being run so I disabled all the mail notifications i had built into the script.
/usr/local/bin/rsyncscript.sh
Code:
#!/bin/bash
#subject="Rsync Backup Failed"
#email="jeremy@localhost"
vg="direbane"
lv="data"
lvsnapshot="dataSnapshot"
lvsnapshotmount="/mnt/dataSnapshot/"
backupmount="/mnt/backup/"
backup="main-data-backup"
excludes="/home/jeremy/Documents/rsyncexcludes"
sendmail="/usr/local/bin/sendmail.sh"
cleanup="/usr/local/bin/cleanup.sh"
# Check if we are root
echo "Checking to see if $0 is being run as root"
if [ $UID != 0 ] ; then
#sh $sendmail "$subject" "$email" "rsyncscript.sh ran as $(whoami) on $(date)"
echo "Must be run as root, now sending a notification to the admin"
exit 255
fi
#
# Creating a snapshot volume so that the file-system is in a consitent state
# Mounting the volume read only and mounting the servers backup directory via ssh.
#
lvcreate -s $vg/$lv -n $lvsnapshot -L 8G
if (( $? )) ; then
#sh $sendmail "$subject" "$email" "Failed to create snapshot volume of direbane/data $(date)"
echo "Failed to create snapshot volume of direbane/data $(date)"
exit 254
fi
echo "Mounting $vg/$lvsnapshot on $lvsnapshotmount"
mount /dev/$vg/$lvsnapshot $lvsnapshotmount -o ro
if (( $? )) ; then
#sh $sendmail "$subject" "$email" "Mounting snapshot volume direbane/dataSnapshot failed $(date)"
echo "Mounting snapshot volume direbane/dataSnapshot failed $(date)"
sh $cleanup 1 "$lvsnapshotmount" "$vg" "$lvsnapshot"
exit 253
fi
echo "Success!"
echo
echo "Mounting backups@voiceserv:/backup on $backupmount"
sshfs -C backups@voiceserv:/backup $backupmount -o workaround=rename,idmap=user,follow_symlinks,allow_root
if (( $? )) ; then
#sh $sendmail "$subject" "$email" "Mounting remote servers backup directory failed $(date)"
echo "Mounting remote servers backup directory failed $(date)"
sh $cleanup 2 "$lvsnapshotmount" "$vg" "$lvsnapshot"
exit 252
fi
echo "Success!"
#
# Moving old directories around on the server, I keep 4 days worth of
# changes around, backup.0 is the most recent
# Doing the backup if all moves and/or folders are successful and/or are in
# correct locations
#
echo "Detecting old backups"
if [ ! -d $backupmount/$backup.0 ] ; then
echo "No old backups detected, doing initial backup"
mkdir $backupmount/$backup.0
rsync -rlptD --exclude-from=$excludes $lvsnapshotmount/ $backupmount/$backup.0
if (( $? )) ; then
echo "Rsync Failed"
#sh $sendmail "$subject" "$email" "Rsync Failed"
sh $cleanup 3 "$lvnsapshotmount" "$vg" "$lvsnapshot" "$backupmount"
exit 251
else
echo "Initial Backup complete"
fi
else
if [ -d $backupmount/$backup.3 ] ; then
mv $backupmount/$backup.3 $backupmount/$backup.tmp
echo "Moved $backup.3 to $backup.tmp"
fi
if [ -d $backupmount/$backup.2 ] ; then
mv $backupmount/$backup.2 $backupmount/$backup.3
echo "Moved $backup.2 to $backup.3"
fi
if [ -d $backupmount/$backup.1 ] ; then
mv $backupmount/$backup.1 $backup.2
echo "Moved $backup.1 to $backup.2"
fi
mv $backupmount/$backup.0 $backupmount/$backup.1
echo "Moved $backup.0 to $backup.1"
mkdir $backupmount/$backup.0
echo "Created $backup.0"
echo "Now doing incremental backup"
rsync -rlptD --link-dest=$backupmount/$backup.1 --exclude-from=$excludes $lvsnapshotmount/ $backupmount/$backup.0
if (( $? )) ; then
echo "Incremental Backup failed"
#sh $sendmail "$subject" "$email" "Rsync Failed"
sh $cleanup 3 "$lvsnapshotmount" "$vg" "$lvsnapshot" "$backupmount"
exit 251
fi
fi
exit 0
/usr/local/bin/cleanup.sh
Code:
#!/bin/bash
#cleanup for rsyncscript.sh
step=$1
lvsnapshotmount=$2
vg=$3
lvsnapshot=$4
backupmount=$5
#echo "step is " $step
#echo "lvsnapshotmount is " $lvsnapshotmount
#echo "vg is " $vg
#echo "lvsnapshot is " $lvsnapshot
#echo "backupmount is " $backupmount
if [ $step = 1 ] ; then
echo "Removing $lvsnapshot"
lvremove -f $vg/$lvsnapshot
fi
if [ $step = 2 ] ; then
echo "Unmounting $lvsnapshotmount"
umount -v $lvsnapshotmount
sleep 1
echo "Removing $lvsnapshot"
lvremove -f $vg/$lvsnapshot
fi
if [ $step = 3 ] ; then
echo "Unmounting sshfs mount $backupmount"
fusermount -u $backupmount
echo "Unmounting $lvsnapshotmount"
sleep 1
umount -v $lvsnapshotmount
echo "Remvoing $lvsnapshot"
lvremove -f $vg/$lvsnapshot
fi
exit 0
and finally the excludes file
/home/jeremy/Documents/rsyncexcludes
Code:
.Trash*
lost+found
*.iso
*.img
*.vdi
I'm still open for any tips please, they would be very much appreciated.
Bookmarks