#! /bin/bash # this builds a new disk from backups made with rsync # note - this probably doesn't work if the NEWDISK # is differently sized than the backup disk # KHL 10-29-2003 # # This will eventually become four programs. # # The first will build a user edited table from the df and sfdisk output, # and the new disk size. # # Then user hand edits the table to match the new disk, changing partitions # and sizes. # # The second program checks this against the size of the disk and the amount # of space needed. # # The third program builds and mkfs's partitions # # The fourth program does the big rsync. If it crashes, it can be restarted # BDIR=2003-1105-0300 S=/backup/dirvish/gate T=/new DISK=/dev/sda SFD=$S/sfdisk. MKFS='/sbin/mkfs.ext3 ' MOUNT=/bin/mount ECHO=/bin/echo # COPY='/bin/cp -a' # E='/*' # slow down rsync with strace, because of funky USB2 driver # rsync: -a == archive # COPY='/usr/bin/rsync -a' E='/' # time it /bin/date /bin/sleep 10 /bin/date > /tmp/recoverlog # ============================================== # WHAT WILL BE THE THIRD PROGRAM IS BELOW # this will be controlled from a user edited table # =============================================== #--------------------------- # first, set up partitions on target drive # THIS IS VERY DISK DEPENDENT /bin/cat $SFD | sfdisk $DISK /bin/sleep 1 #--------------------------- # second, build partitions # THIS IS VERY PARTITION DEPENDENT $ECHO "${DISK}1 / ------------------------" $MKFS ${DISK}1 $ECHO "${DISK}5 /usr ------------------------" $MKFS ${DISK}5 $ECHO "${DISK}6 /var ------------------------" $MKFS ${DISK}6 $ECHO "${DISK}7 /var/log ------------------------" $MKFS ${DISK}7 $ECHO "${DISK}8 /var/spool ------------------------" $MKFS ${DISK}8 $ECHO "${DISK}9 /var/spool/mail ------------------------" $MKFS ${DISK}9 $ECHO "${DISK}10 /tmp ------------------------" $MKFS ${DISK}10 $ECHO "${DISK}11 /spareRoot ------------------------" $MKFS ${DISK}11 $ECHO "${DISK}12 /home ------------------------" $MKFS ${DISK}12 $ECHO "${DISK}13 /opt ------------------------" $MKFS ${DISK}13 $ECHO "${DISK}14 /spare ------------------------" $MKFS ${DISK}14 # make the swap partition /sbin/mkswap ${DISK}15 # ============================================== # WHAT WILL BE THE FOURTH PROGRAM IS BELOW # this will be controlled from a user edited table # =============================================== $ECHO ---------------------------------------------------------------------- #--------------------------- # third, mount and fill partitions # THIS IS VERY PARTITION DEPENDENT $ECHO "now copying root" $MOUNT ${DISK}1 $T $COPY $S/root/$BDIR/tree$E $T $ECHO "now copying usr" $MOUNT ${DISK}5 $T/usr $COPY $S/usr/$BDIR/tree$E $T/usr $ECHO "now copying var" $MOUNT ${DISK}6 $T/var $COPY $S/var/$BDIR/tree$E $T/var $ECHO "now copying var/log" $MOUNT ${DISK}7 $T/var/log $COPY $S/varlog/$BDIR/tree$E $T/var/log $ECHO "now copying var/spool" $MOUNT ${DISK}8 $T/var/spool $COPY $S/varspool/$BDIR/tree$E $T/var/spool $ECHO "now copying var/spool/mail" $MOUNT ${DISK}9 $T/var/spool/mail $COPY $S/varspoolmail/$BDIR/tree$E $T/var/spool/mail $ECHO "now making tmp" # nothing to restore to temp, but it must be world-writable $MOUNT ${DISK}10 $T/tmp /bin/chmod 1777 $T/tmp $ECHO "now copying SpareRoot" $MOUNT ${DISK}11 $T/spareRoot $COPY $S/spareRoot/$BDIR/tree$E $T/spareRoot $ECHO "now copying home" $MOUNT ${DISK}12 $T/home $COPY $S/home/$BDIR/tree$E $T/home $ECHO "now copying opt" $MOUNT ${DISK}13 $T/opt $COPY $S/opt/$BDIR/tree$E $T/opt $ECHO "now copying spare" $MOUNT ${DISK}14 $T/spare $COPY $S/spare/$BDIR/tree$E $T/spare #--------------------------- # fourth, make /proc /bin/mkdir $T/proc #--------------------------- # fifth, install grub boot loader /sbin/grub --batch --device-map=/dev/null << EOF device (hd1) ${DISK} root (hd1,0) setup (hd1) quit EOF #--------------------------- # time it again /bin/date /bin/date >> /tmp/recoverlog #--------------------------- # finish up exit 0