From: "Bill Royds" To: "Zachary Uram" Subject: RE: hack Date: Sun, 22 Jul 2001 23:46:11 -0400 .... > This script is designed for Solaris and it needs a directories /var/backups and /backups to exist first. > > #!/bin/sh > #create script for restoring disks onto a tape drive > # $1 is restore script name, $2 is backup script name > # $Id: restnew.sh,v 1.2 1999/11/15 16:12:34 root Exp $ > # $Log: restnew.sh,v $ > # Revision 1.2 1999/11/15 16:12:34 root > # Add entries for RCS ident > # WGR > # > makeline() > { > df -F ufs -k | sort -k 6 | nawk '/\/dev/{print $6,$1}' > } > host=${1:-`hostname`} > restname=${1:-r-`hostname`.sh} > # show this to be a bourne shell script > echo '#!/usr/bin/sh' >$restname > echo "#script to recreate files systems from backup tape for `hostname`" >>$restname > echo "# script created on `date`" >>$restname > echo '# run script by:' >>$restname > echo '# 1. boot CDROM -s' >>$restname > echo '# 2. mount -F pcfs /dev/diskette /mnt' >>$restname > echo "# 3. sh /mnt/$restname" >> $restname > echo '#partition the hard disks to original format' >> $restname > cat >/tmp/newfs.$$ <<'NAWK' > / \//{printf "echo y |newfs -v /dev/rdsk/%s%1d\n",DSKNAME,$1} > NAWK > cat >/tmp/newdir.$$ <<'NAWK' > / \//{printf "mkdir /tmp/tmproot%s\nmount -F ufs /dev/dsk/%s%1d /tmp/tmproot%s\n",$7,DSKNAME,$1,$7} > NAWK > bootdisk='/dev/dsk/c0t0d0s0' > for disk in `df -F ufs -k | tail +2 | cut -f1 -d' ' | sed 's/s.$/s2/' | sort -u` > do > dskname=`(basename $disk|sed 's/s2$/s/')` > fmtdata=/tmp/$dskname.fmt > echo "cat >$fmtdata <>$restname > prtvtoc $disk >/tmp/$dskname.vtoc > root=`grep '/$' /tmp/$dskname.vtoc|sed 's/^ *//' | cut -f1 -d' '` > if [ 'x' != "x$root" ] > then bootdisk="/dev/dsk/$dskname$root" > fi > cat /tmp/$dskname.vtoc >> $restname > echo 'FORMAT' >> $restname > echo "if [ -c $disk ] " >>$restname > echo " then " >> $restname > echo "fmthard -s $fmtdata $disk" >>$restname > echo "fi" >> $restname > echo '#new file systems for this disk then mount at temporary mount point' >> $restname > #generate a new file system part of script > cat /tmp/$dskname.vtoc| grep -v '^\*' \ > | sort -k 1 | nawk -v DSKNAME="$dskname" -f /tmp/newfs.$$ >>$restname > cat /tmp/$dskname.vtoc| grep -v '^\*' \ > | sort -k 7 | nawk -v DSKNAME="$dskname" -f /tmp/newdir.$$ >>$restname > done > # include header lines > cat >>$restname <<'HEADER' > cd /tmp > # find where tape drive is mounted > if test -c /dev/rmt/0 > then tapedrv=/dev/rmt/0 > elif test -c /dev/rmt/1 > then tapedrv=/dev/rmt/1 > else > echo "No tape drive found, please call firewall operations personnel " > exit 5 > fi > /usr/bin/mt -f $tapedrv rewind > until [ $?0 ] > do > sleep 20 > /usr/bin/mt -f $tapedrv status > done > HEADER > # now make a restore line for each file system on this machine > cat >/tmp/nawk.$$ <<'NAWK' > /\/dev/{printf "cd /tmp/tmproot%s\n /usr/sbin/ufsrestore rfs \$tapedrv %d\nsleep 40\n sync\n echo partition %s restored\n" ,$1,NR,$1} > NAWK > ( makeline | nawk -f /tmp/nawk.$$ ) >> $restname > echo '/usr/bin/mt -f $tapedrv offline' >>$restname > echo "installboot /usr/platform/`uname -i`/lib/fs/ufs/bootblk $bootdisk" >> $restname > echo 'reboot -- -r' >>$restname > echo 'exit' >>$restname > chmod u+x $restname > #######create a baseline MD5 sum for all directories > makeline | nawk '{printf "/backups/checksum.sh %s %s",$2,$1}' >/backups/$host.md5 > /backups/$host.md5 > ################Make corresponding backup script > #### > ################### > scriptname=${2:-back-`hostname`.sh} > echo '#!/bin/sh' >$scriptname > echo 'if test -c /dev/rmt/0' >> $scriptname > echo 'then TAPE=/dev/rmt/0' >> $scriptname > echo 'elif test -c /dev/rmt/1' >> $scriptname > echo 'then TAPE=/dev/rmt/1' >> $scriptname > echo 'else' >> $scriptname > echo ' echo "No tape drive found, please type "' >> $scriptname > echo ' echo "call firewall personnel "' >> $scriptname > echo ' exit 5' >> $scriptname > echo 'fi' >> $scriptname > echo 'export TAPE' >> $scriptname > echo 'echo -c "Please enter the backup tape label:" ' >> $scriptname > echo 'read tapelabel' >> $scriptname > echo '/usr/bin/mt rewind' >> $scriptname > echo 'until [ $?0 ]' >> $scriptname > echo 'do' >> $scriptname > echo ' /usr/bin/mt status' >> $scriptname > echo 'done' >> $scriptname > echo 'TMPDIR=${2:-/var/tmp}' >> $scriptname > echo 'export TMPDIR' >> $scriptname > echo 'backuplog=${1:-$TMPDIR/backup.log}' >> $scriptname > echo 'echo "Backup of `hostname` using $tapelabel on `date`" >$backuplog ' >> $scriptname > tapeloc='${TAPE}' > ( makeline | nawk -v tapeloc="$tapeloc" \ > '{printf "/usr/bin/sh /backups/checksum.sh %s %d %s\n/usr/sbin/ufsdump 0cuf %scn %s 2>&1 | tee -a $backuplog\necho Backup of %s on %s `date` >> $backuplog \nsleep 30\n",$1,NR,$2,tapeloc,$2,$1,$2}' ) >> $scriptname > echo "/usr/bin/mt -f $tapeloc offline" >> $scriptname > echo "# Move backup information to /var/backups/ directory" >> $scriptname > echo 'BACKUPDIR=/var/backups/`date "+%h%d_%H_%Y" `' >> $scriptname > echo 'if [ -d $BACKUPDIR ] ' >> $scriptname > echo ' then $BACKUPDIR="$BACKUPDIR_$$" ' >> $scriptname > echo 'fi' >>$scriptname > echo 'mkdir $BACKUPDIR' >> $scriptname > echo "mv \$TMPDIR/`hostname`.? \$BACKUPDIR" >> $scriptname > echo 'mv $backuplog $BACKUPDIR' >> $scriptname > echo 'cp /etc/dumpdates $BACKUPDIR' >> $scriptname > echo 'wait ' >> $scriptname > echo '(echo ;echo "Dumpdates file for `date`";cat /etc/dumpdates)>> $BACKUPDIR/backup.log' >>$scriptname > echo 'mailx -s "dump log from `hostname` on `date` " backups < $BACKUPDIR/backup.log ' >> $scriptname > echo 'echo "please remove backup tape for tape drive and logoff " >/dev/console ' >>$scriptname > chmod u+x $scriptname >