#!/bin/sh # # /etc/inid.d/RestoreWindows.sh # # Script used for restoring Windows image backup e.g. from CD-ROM # # Developed by Lubomir Host 'rajo' # Copyright (c) 2003 Platon SDG # Licensed under terms of GNU General Public License. # All rights reserved. # # $Platon: scripts/shell/Windows-backup/RestoreWindows.sh,v 1.1 2003/01/24 20:16:39 rajo Exp $ # # # To restore your Windows, boot linux with these parameters # (GRUB /boot/grub/menu.lst example, for others bootloaders # read documentation of your bootloader): # # title Restore Windows # password # kernel (hd0,4)/boot/vmlinuz-2.4.19-xfs-OW init=/etc/init.d/RestoreWindows root=/dev/hda5 rw # initrd (hd0,4)/boot/initrd-2.4.19-xfs-OW # # Ignore signals - security! # TODO: Think also about 'Magic SysRg Key' trap '' 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 # Log mount /proc mount -o remount,rw / echo "`date` -- `cat /proc/cmdline`" >> /RestoreWindows.log chown root.root /RestoreWindows.log chmod 600 /RestoreWindows.log # # User setup: # # {{{ # here specify your Windows partition, which will be overwriten # with backup # VERY IMPORTANT -- be CAREFULL !! RESTORE_PARTITION="/dev/hda1" BACKUP_DRIVE="/cdrom" BACKUP_IMAGE_DIR="$BACKUP_DRIVE/Windows-image-backup-03-01-22/" IMAGE="$BACKUP_IMAGE_DIR/Windows-image-backup.img.bz2" PACKER="bzip2" UNPACKER="bunzip2" # here set md5sum of allowed backup IMAGE_MD5SUM="9ff855b712508d71705230a2b0ad34a4" # Here add list of files, which you will save # use '' for files with special chars, better for all files FROM_DRIVE="/c" TO_DRIVE="/d" SAVE_DATA="$FROM_DRIVE/Moje dokumenty/ $FROM_DRIVE/Program Files/WhereIsIt/Katalog" # # End of user setup # }}} echo; echo echo "Do you wish to restore Windows? [yes/N]" echo "Answer 'yes' to restore" read answer if [ "X$answer" != "Xyes" ]; then reboot fi echo "Mounting $BACKUP_DRIVE, $FROM_DRIVE, $TO_DRIVE" mount "$BACKUP_DRIVE" mount "$FROM_DRIVE" mount "$TO_DRIVE" # test, ci je zaloha povolena: {{{ if [ -r "$IMAGE.md5sum" ]; then CD_MD5SUM="`cut -d ' ' -f 1 $IMAGE.md5sum`" else echo "File $IMAGE.md5sum not found, can't restore Windows ..." sleep 10 reboot fi echo "Testing backup ..." if [ "X$IMAGE_MD5SUM" != "X$CD_MD5SUM" ]; then echo "Usage of these backup is not allowed !!" echo "rebooting ..." sleep 10 reboot fi if [ -r "$IMAGE" ]; then CD_MD5SUM="`md5sum $IMAGE | cut -d ' ' -f 1`" else echo "File $IMAGE not found, can't restore Windows ..." sleep 10 reboot fi if [ "X$IMAGE_MD5SUM" != "X$CD_MD5SUM" ]; then echo "Windows backup is probably bad, can't use it..." echo "rebooting ..." sleep 10 reboot fi # }}} # Backup data: {{{ echo "Creating backup of needed data" cd / # we must save list of files to file, because there is no way # how to store filenames containig spaces to variable RETVAL=0 echo "$SAVE_DATA" > /files \ && tar cvf $TO_DRIVE/DataBackup.tar --files-from=/files RETVAL=$? rm -f /files if [ $RETVAL -ne 0 ]; then echo "Can't save data, please free some space on $TO_DRIVE ..."; sleep 10; reboot; fi # }}} echo "Unmounting $RESTORE_PARTITION" umount "$RESTORE_PARTITION" echo "Writing image to disc, please wait ..." RETVAL=0 $UNPACKER -c -f "$IMAGE" | dd "of=$RESTORE_PARTITION" RETVAL=$? if [ $RETVAL -ne 0 ]; then echo "Error writing image to disc ... ehmm?? (error $RETVAL)" sleep 20; reboot fi RETVAL=0 echo "Restoring saved data..." cd / mount "$RESTORE_PARTITION" tar xvf $TO_DRIVE/DataBackup.tar RETVAL=$? if [ $RETVAL -ne 0 ]; then echo "Error restoring data .. ehmm?? (error $RETVAL)" sleep 20 else echo "`date` -- OK -- `cat /proc/cmdline` " >> /RestoreWindows.log echo "OK, restarting in 10 seconds ..." sleep 10 fi reboot # vim: ts=4 # vim600: fdm=marker fdl=0 fdc=3