Backup using tar
Gnu tar has the nice feature of creating incremental backups. When you use incremental backups, tar
creates the normal tar-file and at the same time it will also generate a special file containing a list of files, modification date, etc. If you make now a second incremental backup only files that changed regarding to the list tar
made will be saved. To recover a file you need all the incremental backups and the complete first backup, since you don't know where the file will be.
Here is a sample script I use:
# backup some important files
# save them on the second hard-drive
#
# written by Arun Persaud
# 2001-10-10
MAILTO=""
export MAILTO
KEEP_DAYS=10 #days
KEEP_WEEKS=33 #days
KEEP_MONTHS=100 #days
# find and delete files that are older than xyz
find /backup/log/ -type f -mtime +$KEEP_DAYS -exec rm "{}" \;
find /backup/daily/ -type f -mtime +$KEEP_DAYS -exec rm "{}" \;
find /backup/weekly/ -type f -mtime +$KEEP_WEEKS -exec rm "{}" \;
find /backup/monthly/ -type f -mtime +$KEEP_MONTHS -exec rm "{}" \;
# get the Date
DATE=`date +%Y-%m-%d` # complete date
WEEKDAY=`date +%w` # day of the week, sunday=0
DAY=`date +%d` # day of month, 01-31
WEEK=`date +%U` # week 00-53
MONTH=`date +%m` # mont 01..12
if [ "$DAY" = "01" ] ; then
DIR=monthly
WEEK=m`date +%U` # dump level-0
elif [ "$WEEKDAY" = "0" ] ; then
DIR=weekly
else
DIR=daily
fi
# do backup
tar --create \
--file=/backup/$DIR/backup_$DATE.tgz \
--listed-incremental=/backup/log/backup_$WEEK.snar \
--verbose \
--exclude=dirs-that-should-not-be-included \
--gzip /dirs/that/should/be/included
chmod 600 /backup/$DIR/backup_$DATE.tgz
The above script can be called directly from crontab.