| Thursday May 26th 2016

Automating backups with tar

I suggest that you set this script up and run it at the beginning of the month for the first time, and then run it for a month before making major changes. In the example below I do the backup to a directory on the local server BACKUPDIR, but you could modify this script to do it to a tape on the local server or via an NFS mounted file system.

To create the backup script file, touch /etc/cron.daily/backup.cron and add the following lines to the file:

# full and incremental backup script

#Change the 5 variables below to fit your computer/backup
COMPUTER=whosyourdaddy # name of this computer
DIRECTORIES=”/home” # directories to backup
BACKUPDIR=/backups # where to store the backups
TIMEDIR=/backups/last-full # where to store time of full backup
TAR=/bin/tar # name and location of tar

#You should not have to change anything below here
DOW=`date +%a` # day of the week e.g., Mon
DOM=`date +%d` # date of the Month e.g., 27
DM=`date +%d%b` # date and month e.g., 27Sep

# On the 1st of the month a permanent full backup is made
# Every Sunday a full backup is made – overwriting last Sundays backup
# The rest of the time an incremental backup is made. Each incremental
# backup overwrites last weeks incremental backup of the same name.
# if NEWER = “”, then tar backs up all files in the directories
# otherwise it backs up files newer than the NEWER date. NEWER
# gets it date from the file written every Sunday.

# Monthly full backup
if [ $DOM = “01” ]; then

# Weekly full backup
if [ $DOW = “Sun” ]; then
NOW=`date +%d-%b`

# Update full backup date
echo $NOW > $TIMEDIR/$COMPUTER-full-date

# Make incremental backup – overwrite last weeks

# Get date of last full backup
NEWER=”–newer `cat $TIMEDIR/$COMPUTER-full-date`”

Here is an abbreviated look of the backup directory after one week:

[root@whosyourdaddy] /# ls -l /backups/

total 22217
-rw-r–r– 1 root root 10731288 Feb 7 11:24 deep-01Feb.tar
-rw-r–r– 1 root root 6879 Feb 7 11:24 deep-Fri.tar
-rw-r–r– 1 root root 2831 Feb 7 11:24 deep-Mon.tar
-rw-r–r– 1 root root 7924 Feb 7 11:25 deep-Sat.tar
-rw-r–r– 1 root root 11923013 Feb 7 11:24 deep-Sun.tar
-rw-r–r– 1 root root 5643 Feb 7 11:25 deep-Thu.tar
-rw-r–r– 1 root root 3152 Feb 7 11:25 deep-Tue.tar
-rw-r–r– 1 root root 4567 Feb 7 11:25 deep-Wed.tar
drwxr-xr-x 2 root root 1024 Feb 7 11:20 last-full

Note: The directory where to store the backups BACKUPDIR, and the directory where to store time of full backup TIMEDIR must exist or be created before the use of the backup-script, or you will receive an error message.

If you are not running this backup script from the beginning of the month 01-month-year, the incremental backups will need the time of the Sunday backup to be able to work properly. If you start in the middle of the week, you will need to create the time file in the TIMEDIR. To create the time file in the TIMEDIR directory, use the following command:

[root@whosyourdaddy] /# date +%d%b > /backups/last-full/myserver-full-date

Where /backups/last-full is our variable TIMEDIR wherein we want to store the time of the full backup, and myserver-full-date is the name of our server (e.g., whosyourdaddy), and our time file consists of a single line with the present date (i.e., 15-Feb).

Make this script executable and change its default permissions to be writable only by the super-user root 755.

[root@whosyourdaddy] /# chmod 755 /etc/cron.daily/backup.cron

NOTE: Because this script is in the /etc/cron.daily directory, it will be automatically run as a cron job at one o’clock in the morning, every day.

Related Posts: On this day...

Leave a Reply

You must be logged in to post a comment.