This is shell script to do backup on CDROM and is used in the chapter Quick Steps of this document.
#!/bin/sh
# Author: Al Dev EMail: alavoor@yahoo.com
# Copyright Al Dev, License : GNU/GPL
# Filename: path-list.sh
# Program to back a large partition > 650 MB over
# several cdrom blanks by splitting into chunks.
# This program will create a list of filenames which can be input
# to mkisofs command's -path-list option. See 'man mkisofs'.
DIRNAME=""
while :
do
if [ "$DIRNAME" != "" ]; then
if [ ! -d $DIRNAME ]; then
echo "******"
echo "****** Wrong entry: Directory does not exist. Try again"
echo "******"
else
break;
fi
fi
echo " "
echo "Please enter the directory name which you want to"
echo "backup to multiple cdrom blanks."
echo "Also make sure you have write/read permissions in that directory."
echo "Enter with leading slash, for example, "
echo -n "something like /backups/usr-partition : "
read DIRNAME
done
OUTFILE="path-list.txt"
# Serious problems is - mkisofs complains and gives errors on
# directories and links (because of duplicate listing).
# Hence, soft/hard links need to be removed when doing mkisofs command
# Work around for soft links: Tar all the soft links to
# a file called Softlinks.tgz and then backup this file
tar zcvf $DIRNAME/Softlinks.tgz ` find $DIRNAME -type l `
if [ ! -f $DIRNAME/Softlinks.tgz ]; then
echo " "
echo "****************************************************************"
echo "FATAL ERROR: Enable to create the file $DIRNAME/Softlinks.tgz"
echo "May be you do not have read/write permissions in $DIRNAME"
echo "****************************************************************"
echo " "
exit
fi
# Avoid directories and links
find $DIRNAME -type f -printf "%s %p\n" > $OUTFILE
find $DIRNAME -type b -printf "%s %p\n" >> $OUTFILE
find $DIRNAME -type c -printf "%s %p\n" >> $OUTFILE
find $DIRNAME -type p -printf "%s %p\n" >> $OUTFILE
find $DIRNAME -type s -printf "%s %p\n" >> $OUTFILE
TOTALSIZE=0
FILECOUNTER=1
rm -f CDROM-BACKUP*.txt
rm -f "CDROM-BACKUP"$FILECOUNTER".txt"
cat "$OUTFILE" |
while read LINE
do
SIZE=`echo $LINE | cut -d' ' -f1 `
#echo SIZE $SIZE
FILENAME=`echo $LINE | cut -d' ' -f2 `
TOTALSIZE=$(( $SIZE + $TOTALSIZE ))
#echo TOTALSIZE $TOTALSIZE
# If greater than 650 MB then switch to new group file
# Do upto 649 MB = 649 * 1024 * 1024 = 680525824
if [ $TOTALSIZE -gt 680525824 ]; then
FILECOUNTER=$(( $FILECOUNTER + 1 ))
TOTALSIZE=0
rm -f "CDROM-BACKUP"$FILECOUNTER".txt"
fi
echo $FILENAME >> "CDROM-BACKUP"$FILECOUNTER".txt"
#echo $FILENAME
done
rm "$OUTFILE"
echo " "
echo "********************************* "
echo " Load a new CDROM blank and do :
nice --20 mkisofs -R -path-list CDROM-BACKUP1.txt | cdrecord -v fs=40m speed=2 dev=0,0 -
Load next CDROM blank
nice --20 mkisofs -R -path-list CDROM-BACKUP2.txt | cdrecord -v fs=40m speed=2 dev=0,0 -
Load next CDROM blank
nice --20 mkisofs -R -path-list CDROM-BACKUP3.txt | cdrecord -v fs=40m speed=2 dev=0,0 - "
echo "********************************* "