[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: backup strategy (was Re: reconstruct the system)



On Fri, Jun 03, 2005 at 02:28:26PM -0400, Marty wrote:
> If my backup scripts don't quite do it for you, here is an excellent
> web page with a general discussion of rsync as a backup tool, with
> more elaborate backup script, and links to other backup scripts:
> http://www.mikerubel.org/computers/rsync_snapshots/

rsnapshot is a Debian package that uses this approach. I use that for
taking snapshots on my home machine and a remote server.

I also do a nightly backup to cd. Here's my script. The comments
_should_ make everything clear. On my system it takes about an hour.

############################################

#! /bin/sh
# Make a full backup divided into several tar bzipped files. Put these
# into iso files that will fit on a CD-RW so you can have 7 CD-RWs and
# do this backup every day (night) of the week. Standard practice: the
# important stuff goes on the first CD so it gets written
# automatically, unless you forget to put the CD in the drive. :)

# Call this script with a name for the backup directory

# First commandline option is added to the name of the backup.
# If no option is given, the current date is used.
if test "x${1}" == "x"; then
    NAME=`date -Idate`
else
    NAME=$1
fi

# Edit these lines
MAINBACKUP=/backup/tar
TARDIR=$MAINBACKUP/$NAME
ROOTFS=/
READMEFILENAME=README

# Dir and script for saving some info about your system, if you have
# those:
SYSINFODIR=/var/local/system-info
SYSINFOSCRIPT=/usr/local/bin/system-info

# Make sure the necessary directories exist
mkdir -p $TARDIR
mkdir -p $SYSINFODIR

echo "Backup started:"
date
cd $ROOTFS
echo "Backup from computer $(hostname) made with $0 script." > $TARDIR/$READMEFILENAME
echo $NAME >> $TARDIR/$READMEFILENAME

if test -x $SYSINFOSCRIPT; then
    cd "$SYSINFODIR"
    $SYSINFOSCRIPT
    cd -
fi

echo "Tarring various stuff ..."
# Make sure to adjust the excludes to match your system.
tar -cjf $TARDIR/div.tar.bz2 * --exclude backup --exclude extra --exclude firstdisk --exclude home --exclude sys --exclude music --exclude opt --exclude proc --exclude tmp --exclude usr --exclude var --exclude snapshot --exclude root/snapshot --exclude cdrom

echo "Tarring home ..."
tar -cjf $TARDIR/home.tar.bz2 home

echo "Tarring var various ..."
tar -cjf $TARDIR/var-rest.tar.bz2 var --exclude var/cache/apt --exclude /var/spool/bootcd

echo "Tarring usr/local ..."
tar -cjf $TARDIR/usr-local.tar.bz2 usr/local
echo "Tarring usr/lib ..."
tar -cjf $TARDIR/usr-lib.tar.bz2 usr/lib
echo "Tarring usr/share ..."
# /usr/share/doc is getting way too large and isn't all that important
# in a backup.
tar -cjf $TARDIR/usr-share.tar.bz2 usr/share --exclude usr/share/doc
echo "Tarring usr various ..."
tar -cjf $TARDIR/usr-rest.tar.bz2 usr --exclude usr/local --exclude usr/lib --exclude usr/share

# Make an easy softlink to the latest backup
cd $MAINBACKUP
rm -f latest
ln -s $TARDIR latest

# Make md5sums
echo "md5summing $TARDIR/*bz2 ..."
cd $TARDIR
for i in *bz2; do
    md5sum $i > $i.md5
done

# Put it on cd images. It's trial and error to find out which goes
# where in order to make the images not too large.
mkdir cd1 cd2 cd3
mv div* home* usr-local* var-rest* cd1
mv usr* cd2
# Put some handy info on the cds
for i in cd1 cd2 cd3; do
    cp $READMEFILENAME "$0" $i
done
rm $READMEFILENAME

# Only necessary/handy when you keep a package archive:
echo "Copying var/cache/apt ..."
cp -r /var/cache/apt $TARDIR/cd3
cd cd3
for i in * */* */*/*; do
    if test -f $i; then 
	md5sum $i >> apt.md5
    fi
done
cd ..

# Make iso files for each cd. This is done by my mki script, which
# basically just calls mkisofs
mki *

# The cd directories can be removed now as we have iso files
rm -r cd*/

echo "Backup ended:"
date

# Checking and blanking below are only useful if you use cd
# rewritables.

# Before overwriting the previous backup check if any md5sums on the
# cd are still correct. If not you may have some bit rot on your
# cd. Use it as a frisbee then. ckcdsums is a script that basically
# mounts the cd, does 'md5sum -c *md5*', reports any errors and
# unmounts it again.
echo "Checking CD-RW..."
ckcdsums
echo "Fast blanking CD-Rom..."
cdrecord -blank=fast

# The burncheck script basically calls cdrecord to burn the iso,
# ejects the cd and reloads it (possibly superfluous), then calls the
# ckcdsums script mentioned above.
echo "Burning 1st cd to CD-Rom..."
burncheck cd1.iso
echo "Burning ended:"
date

# Report how large the iso files are:
ls -lh *

# Check if there is enough space left for future backups on the
# filesystem:
/bin/df -h "$MAINBACKUP"

############################################

For laughs: John Cleese at the renowned Institute for Backup Trauma:
http://www.backuptrauma.com/

-- 
Maurits van Rees | http://maurits.vanrees.org/ [Dutch/Nederlands] 
Public GnuPG key: keyserver.net ID 0x1735C5C2
"Let your advance worrying become advance thinking and planning."
 - Winston Churchill

Attachment: signature.asc
Description: Digital signature


Reply to: