Hello all,
I thought I would share my practice on backups. Initially, I was using the backup GUI with Fedora. I then decided I wanted something automated that would run everyday by cron.
I have created a couple of scripts to do the backup.
My general thoughts are
- Use tools that are available on a standard install of my operating system.
- Do a full backup once a week
- Do incremental backups every other day
- Do an offsite backup once a week
The first thing I do is mount another machine. I do this through a cron job that runs every minute. I mount a cifs/samba mount to a Windows XP machine with a big hard drive.
Code:
#! /bin/bash
## Mount the other machine
mountpoint="//192.168.1.1/C"
volume="/home/raj/c"
if mount | grep "on ${volume} type" > /dev/null
then
echo "nothing" > /dev/null
else
mount -w -t cifs $mountpoint $volume -o user=raj%{username}%{password},dir_mode=0777,file_mode=0766
fi
The script, (a kind of long script, but it works) automatically creates a new directory for today's backup and removes directories from 8, 9, and 10 days ago. That way I keep a week of rotating directories and if the machine is off for a couple of days, it blows away the old backups.
The script then runs the tar operations concurrently, and waits until all of the tar operations are done to terminate the script.
I welcome any suggestions for improvements, and let me know if this helps jumpstart your own backup strategy.
I had to utilize this once when I corrupted the filesystem last week when extending my swap partition. It made it relatively easy to restore.
- Raj
Code:
#! /bin/bash
# back.sh - Backup Script for daily backup of Raj's and Virginia's files.
#DESTINATION VARIABLE
RajHome=/home/raj
VirginiaHome=/home/virginia
#
sendmail=/bin/msmtp
# Going to Cell Phone for text message
emailRecipient="{Cell Phone Number}@email.uscc.net"
#
#GET DATE VARIABLES
#date –date=’-2 day’ ‘%Y_%m_%d’
#
Today=`date +"%Y_%m_%d"`
OneDayAgo=`(date +"%Y_%m_%d" --date="1 days ago")`
TwoDaysAgo=`(date +"%Y_%m_%d" --date="2 days ago")`
ThreeDaysAgo=`(date +"%Y_%m_%d" --date="3 days ago")`
FourDaysAgo=`(date +"%Y_%m_%d" --date="4 days ago")`
FiveDaysAgo=`(date +"%Y_%m_%d" --date="5 days ago")`
SixDaysAgo=`(date +"%Y_%m_%d" --date="6 days ago")`
SevenDaysAgo=`(date +"%Y_%m_%d" --date="7 days ago")`
EightDaysAgo=`(date +"%Y_%m_%d" --date="8 days ago")`
NineDaysAgo=`(date +"%Y_%m_%d" --date="9 days ago")`
TenDaysAgo=`(date +"%Y_%m_%d" --date="10 days ago")`
#
#SETUP PATHS TO OLD BACKUPS
TenDaysAgoTarRaj=$RajHome/c/backup/raj/$TenDaysAgo
NineDaysAgoTarRaj=$RajHome/c/backup/raj/$NineDaysAgo
EightDaysAgoTarRaj=$RajHome/c/backup/raj/$EightDaysAgo
SevenDaysAgoTarRaj=$RajHome/c/backup/raj/$SevenDaysAgo
SixDaysAgoTarRaj=$RajHome/c/backup/raj/$SixDaysAgo
FiveDaysAgoTarRaj=$RajHome/c/backup/raj/$FiveDaysAgo
FourDaysAgoTarRaj=$RajHome/c/backup/raj/$FourDaysAgo
ThreeDaysAgoTarRaj=$RajHome/c/backup/raj/$ThreeDaysAgo
TwoDaysAgoTarRaj=$RajHome/c/backup/raj/$TwoDaysAgo
OneDayAgoTarRaj=$RajHome/c/backup/raj/$OneDayAgo
TodayTarRaj=$RajHome/c/backup/raj/$Today
#
TenDaysAgoTarVirginia=$RajHome/c/backup/virginia/$TenDaysAgo
NineDaysAgoTarVirginia=$RajHome/c/backup/virginia/$NineDaysAgo
EightDaysAgoTarVirginia=$RajHome/c/backup/virginia/$EightDaysAgo
SevenDaysAgoTarVirginia=$RajHome/c/backup/virginia/$SevenDaysAgo
SixDaysAgoTarVirginia=$RajHome/c/backup/virginia/$SixDaysAgo
FiveDaysAgoTarVirginia=$RajHome/c/backup/virginia/$FiveDaysAgo
FourDaysAgoTarVirginia=$RajHome/c/backup/virginia/$FourDaysAgo
ThreeDaysAgoTarVirginia=$RajHome/c/backup/virginia/$ThreeDaysAgo
TwoDaysAgoTarVirginia=$RajHome/c/backup/virginia/$TwoDaysAgo
OneDayAgoTarVirginia=$RajHome/c/backup/virginia/$OneDayAgo
TodayTarVirginia=$RajHome/c/backup/virginia/$Today
#
##
## Main program
##
echo Backup Started `date` >> $RajHome/backup.log
#
# shutdown evolution, so we get a good backup
/usr/bin/gconftool-2 --shutdown
/usr/bin/evolution --force-shutdown
#
#
echo "Subject: Backup Started `date`" |$sendmail $emailRecipient
#
# DELETE ANY OLD BACKUPS IF THEY EXIST RAJ - KEEP A WEEK BACK FOR THE FULL BACKUP.
rm -rf $TenDaysAgoTarRaj
rm -rf $NineDaysAgoTarRaj
rm -rf $EightDaysAgoTarRaj
# DELETE ANY OLD BACKUPS IF THEY EXIST VIRGINIA - KEEP A WEEK BACK FOR THE FULL BACKUP.
rm -rf $TenDaysAgoTarVirginia
rm -rf $NineDaysAgoTarVirginia
rm -rf $EightDaysAgoTarVirginia
#
mkdir $TodayTarRaj 2>> $RajHome/backup.log
mkdir $TodayTarVirginia 2>> $RajHome/backup.log
currentDay=`date "+%a"`
if [ "$currentDay" = "Sun" ];
if [ "$currentDay" = "Sun" ];
then
fullbackupday=1
echo Must be Sunday `date +"%a"`
else
fullbackupday=0
cp $OneDayAgoTarRaj/*.snar $TodayTarRaj/
cp $OneDayAgoTarVirginia/*.snar $TodayTarVirginia/
echo Must be another Day `date +"%a"`
echo ---$currentDay---
fi
#
tar -czf $TodayTarRaj/backupsource.tar.gz -g $TodayTarRaj/inventorysource.snar $RajHome/source &
tar -czf $TodayTarRaj/backupDocuments.tar.gz -g $TodayTarRaj/inventoryDocuments.snar $RajHome/Documents &
# Backup most of the important files in the home directory.
tar -czf $TodayTarRaj/backupMisc.tar.gz -X $RajHome/exclude.txt -g $TodayTarRaj/inventoryMisc.snar $RajHome &
# Backup some system icons and files
tar -czf $TodayTarRaj/backupLoginIcons.tar.gz -g $TodayTarRaj/inventoryLoginIcons.snar /var/lib/AccountsService/icons &
tar -czf $TodayTarRaj/backupLoginUsers.tar.gz -g $TodayTarRaj/inventoryLoginUsers.snar /var/lib/AccountsService/users &
# Backup most of the important files in the home directory for Virginia.
tar -czf $TodayTarVirginia/backupMisc.tar.gz -X $RajHome/exclude.txt -g $TodayTarVirginia/inventoryMisc.snar $VirginiaHome &
tar -czf $TodayTarVirginia/backupconfigLibreoffice.tar.gz -g $TodayTarVirginia/inventoryconfigLibreOffice.snar $VirginiaHome/.config/libreoffice &
# Backup Virginia's documents
tar -czf $TodayTarVirginia/backupDocuments.tar.gz -g $TodayTarVirginia/inventoryDocuments.snar $VirginiaHome/Documents &
# Backup all the Evolution emails. - Don't do an Incremental backup.
/home/raj/source/scripts/backEvolution.sh
loop() {
for (( ; ; ))
do
if (ps -ef | grep -q "[t]ar -c")
then
echo "found tar" >/dev/null
else
if [ "$fullbackupday" -eq "1" ];
then
/usr/bin/touch $TodayTarRaj/completed-start-offsite-backup.txt
/usr/bin/touch $TodayTarRaj/fullBackup.txt
/usr/bin/touch $TodayTarVirginia/fullBackup.txt
else
/usr/bin/touch $TodayTarRaj/completed.txt
fi
echo Backup Completed `date` >> $RajHome/backup.log
echo "Subject: Backup Completed `date`" |$sendmail $emailRecipient
break
#Abandon the loop.
fi
done
}
loop