Skip to main content
A Simple Backup Script on Linux

Everyone whom uses Linux wants to implement a backup solution for their Linux servers. After a lot of research, I finally decided to implement a script-based backup making use of TAR, GZIP, and CROND based on Jason Pepas's backup script.

Step 1: Login to your Linux server as user "root" and type this command

mkdir /root/scripts


Step 2: Decide on what device you want to use as a storage for all the backups. For this scenario, I use a 30GB SCSI HDD plug to my Linux server. Then, I reboot my server to find the device name and edit my /etc/fstab file to add the storage device so that it is automatically mounted every time the server is rebooted. To find out the device name, type dmesg. In my case, the SCSI HDD is /dev/sdb2

vi /etc/fstab

LABEL=/dev/sdb2 /backup ext3 defaults 1 2
LABEL=/ / ext3 defaults 1 1
LABEL=/boot1 /boot ext3 defaults 1 2
none /dev/pts devpts gid=5,mode=620 0 0
none /dev/shm tmpfs defaults 0 0
none /proc proc defaults 0 0
none /sys sysfs defaults 0 0
LABEL=/var /var ext3 defaults 1 2
LABEL=SWAP-sdb1 swap swap defaults 0 0

type :wq to save and exit from the editing mode.


Step 3: Open your favourite text editor and paste this script. Save it as backup.sh


#!/bin/sh

# --------------------------------------------------
# set variables:
# --------------------------------------------------

directoryname=`date +%Y-%m-%d`"_"`hostname`"_backup"
current="current_"`hostname`
fullbackuplabel="Full Backup of "`hostname`" on "`date '+%B %e, %Y'`
fullbackupname=`date +%Y-%m-%d`"_full.tar.gz"
fullbackuplogname=`date +%Y-%m-%d`"_full.log"
incrementalbackuplabel="Incremental Backup of "`hostname`" on "`date '+%B %e, %Y'`
incrementalbackupname=`date +%Y-%m-%d`"_incremental"`date +%H%M`".tar.gz"
incrementalbackuplogname=`date +%Y-%m-%d`"_incremental"`date +%H%M`".log"


# --------------------------------------------------
# functions:
# --------------------------------------------------

fullbackup()
{
# create backup directory
if test ! -e /backup/$directoryname; then
echo "Creating /backup/$directoryname directory"
mkdir /backup/$directoryname
fi

# create (or update) a shortcut called current to this directory
echo "Updating /backup/$current pointer"
rm /backup/$current
ln -s /backup/$directoryname /backup/$current

# keep track of creation date of full backup (used with incremental backups)
echo "Updating /backup/$current/lastfullbackupdate"
date>/backup/$current/lastfullbackupdate
# create backup
echo "Running tar..."
tar --create --label "$fullbackuplabel" --files-from /root/scripts/whattobackup.txt --exclude-from /root/scripts/whatnottobackup.txt --igno
re-failed-read --absolute-names --verbose --gzip --file /backup/$current/$fullbackupname > /backup/$current/$fullbackuplogname 2>&1
gzip /backup/$current/$fullbackuplogname
echo "Done. Created /backup/$current/$fullbackupname"
echo "To view the log, type:"
echo " zcat /backup/$current/$fullbackuplogname"
}


incrementalbackup()
{
# create variable with date of last full backup
lastfullbackupdatevar=`cat /backup/$current/lastfullbackupdate`

# check for existence of incremental backup
if test -e "/backup/$current/$incrementalbackupname"; then

echo "Your last incremental backup was less than 60 seconds ago."
echo "Wait a minute and try again."

else

# create incremental backup
echo "Running tar..."
tar --create --label "$incrementalbackuplabel" --files-from /root/scripts/whattobackup.txt --exclude-from /root/scripts/whatnottobackup
.txt --ignore-failed-read --after-date "$lastfullbackupdatevar" --absolute-names --verbose --gzip --file /backup/$current/$incrementalbackupnam
e > /backup/$current/$incrementalbackuplogname 2>&1
gzip /backup/$current/$incrementalbackuplogname
echo "Done. Created /backup/$current/$incrementalbackupname"
echo "To view the log, type:"
echo " zcat /backup/$current/$incrementalbackuplogname"

fi
}


# --------------------------------------------------
# main routine:
# --------------------------------------------------

# first get a list of all packages installed.
rpm -qa | sort > /etc/apt/installed-packages

# clear out apt's packages
apt-get clean

# now perform the backup.
echo "---------- Backup Script Running... ----------"

if test `date +%A` = "Sunday" && ! -e "/backup/$directoryname"; then

# if it is sunday and you havent yet done a full backup, do so
echo "Performing Weekly Full Backup..."
fullbackup;

elif test ! -e /backup/$current/*full.tar.gz; then

# if there is no current fullbackup, make one
echo "No Current Full Backup - Performing Full Backup Now..."
fullbackup;

else

# otherwise, do an incremental backup
echo "Performing Incremental Backup..."
incrementalbackup;

fi # end if statement

echo "---------- Backup Script Done ----------"

-- End of backup script --


Step 4: Now, we need to create two files to tell the backup script what to include and exclude during the backups.

Type these commands;

touch /root/scripts/whattobackup.txt
touch /root/scripts/whatnottobackup.txt
vi touch /root/scripts/whattobackup.txt


Paste the following content (change according to your needs);

-- Start of /root/scripts/whattobackup.txt file --

# This file is required by /root/scripts/full-backup.sh
#
/boot
/etc
/home
/root
/usr/local
/var

-- End of /root/scripts/whattobackup.txt file --


-- Start of /root/scripts/whatnottobackup.txt file --

# This file is required by /root/scripts/full-backup.sh
#
*.mp3
*.mpg
*.avi
*.wav
*.mov
*.asf
*.rm
*.iso
*.flac
*.zip
*.exe
*.tmp
data.bin


-- End of /root/scripts/whatnottobackup.txt file --


Step 5: Now, schedule the backup script to execute everyday at 7pm Monday - Friday using cron.

type command;

crontab -e

You may see a blank cron schedule or something like that;

30 04 * * * /bin/sh -c '/usr/bin/sa-learn --mbox --ham /home/spam-police/mail/Non-spam'
35 04 * * * /bin/sh -c '/usr/bin/sa-learn --mbox --spam /home/spam-police/mail/Spam'
40 04 * * * /bin/sh -c '/usr/bin/sa-learn --mbox --spam /home/spam-police/mail/.imap/INBOX/'


Add these line for your backup script;

00 19 * * * /root/scripts/backup.sh


That's it!

Comments

Popular posts from this blog

OpenProj - FREE alternative to Microsoft Project I wanted to share with all of you about Projity's important announcement last week at LinuxWorld. Projity announced the release of OpenProj, a FREE (yeah, another FREE software) and open source replacement of Microsoft Project. OpenProj is available on Windows, Linux, Unix or Mac and is interoperable with Microsoft Project. The best thing is, it even opens existing MS Project files! How cool is that? I read on OpenProj website that OpenProj has been downloaded on an average every 35 seconds around the clock at http://www.projity.com since they launched and made the software available last week. OpenProj is now in the 99.99th percentile for activity on Sourceforge.net and is quickly becoming one of the most used open source solutions worldwide. The OpenProj folks are expecting about 11 million worldwide users and in my opinion, this has been an excellent start for them. MS Project has been a key strategic solution for Micro...
In early April 2006, I sign-up for the Excellerated Business School for Entrepreneurs (BSE) after a preview session held in Singapore by Executive-Directions. The seminar was held from 15 April to 23 April 2006 in Subang Jaya Hotel in Kuala Lumpur, Malaysia. The BSE in KL was organized by GlobeSL Sdn Bhd. I left Singapore on 14 April via Transtar , the only 1st class coach service which has 16 seats to create a lot of room for your leg. They also provide hot meal during the journey with hot drinks on demand. The seats are equipped with a massage chair, a personal in-flight entertainment system on LCD screen, PC Games and the F&B Attendant will provide anything that you ask for. From newspaper, magazines, blanket, hot/cold drinks, a new set of earphones for the entertainment system... they have it all. They are most courteous and polite at all times. I truly enjoy the Transtar service. For SG$50 from Singapore to KL, it's worth it. I arrived in Subang Jaya Hotel at about 10p...

What Makes a Champion?

By NG Chang Siang, Education Success Coach MindChamps Holdings Ltd ‘’ What makes a champion is a champion mindset. The champion mindset is the transferable commodity, not the skill itself. If you have done something great in one field, you are far more likely to do it in another ‘’ --Professor Allan Snyder FRS I have a good friend who is a primary school teacher. He also takes on as a role of a coach in flaw ball for the students in his school. Guess what? He never play flaw ball before. Not even that, after he coached his students, they won a school team which was coached by a national flawball player. That day I met him in our soccer game as we play soccer together every Monday. He played soccer very well and represented his schools when he was very young. I ask him : “ How did you do it…?” “ How can someone with no flaw-ball playing experience train and beat another team whom has an experience coach?” He replied: “ Oh, I just use the strategy I know in playing soccer and apply...