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

script makes kernel panic



Got a laptop here (Samsung X22), WinXP Pro and data partition in /dev/sda[23].
Wrote this script to backup both partitions 1:1 to an external USB disk.
Teh script itself works absolutely as intended.

BUT: I added an entry to GRUB's menu.lst like that:

title           Windows XP Backup
root            (hd0,4)
kernel          /boot/vmlinuz-2.6.18-6-686 root=/dev/sda5 rw init=/sbin/windows_backup
initrd          /boot/initrd.img-2.6.18-6-686
savedefault

When I select that entry, kernel comes up, script is executed alright, but after the script called
"halt" it just sits there and eventually throws a kernel panic - and I have no clue why.

If someone has pointers?
(Messages partly in german but I added comments. If anything is unclear just ask.
 But not about that it's newbie-ish, I know that :) )

Dex





####################################################################
#!/bin/bash
#kernel message to tty10
CONSOLE=10
openvt -c "$CONSOLE" -- /bin/true || true
setlogcons "$CONSOLE" || true

#...
/usr/bin/clear


#wait a couple of seconds so the kernel sees usb disks
echo Warte, bis alle Platten da sind....
sleep 5

# Variables
BACKUP_DST=/mnt/backup          #set backup dest
GREP=/bin/grep
MOUNT=/bin/mount
UMOUNT=/bin/umount
BKP_PART_MNTPOINTS="/mnt/daten /mnt/windows" #mount points to partitions to backup
BKP_PART[0]=/dev/sda2           #backup src 0
BKP_PART_NAME[0]="windowsxp"    #name for src 0
BKP_PART[1]=/dev/sda3           #and so on
BKP_PART_NAME[1]="daten"
BKP_MBR_DISK=/dev/sda           #disk that hold the mbr to backup
HALT=/sbin/halt

#i18n
not_mounted="ist nicht angeschlossen oder eingehängt"
error_msg="Fehler"
STILL_MOUNTED="Kann Quellpartitionen nicht aushängen."
RETRY="Nochmal versuchen"
SHUTDOWN="Abbrechen und herunterfahren."
UNKN_OPT="Unbekannte Option"
ATTACH_OR_BUST="Schliessen Sie die Platte an oder fahren Sie herunter"


function chk_backup_disk { # check if the destination disk is mounted
$UMOUNT $BACKUP_DST >/dev/null 2>&1 #umount backup disk to avoid stale mounts (greetings to USB subsys)
sync
$MOUNT $BACKUP_DST >/dev/null 2>&1 #mount backup disk again

$MOUNT | $GREP "$BACKUP_DST" > /dev/null 2>&1

if [ $? -eq 1 ]; then
     echo "$error_msg: Backupmedium $not_mounted"
     chk_backup_menu
     fi
}

function chk_backup_menu {  # called if the backup disk isn't attached
echo $ATTACH_OR_BUST
echo
echo "1. "$RETRY
echo "2. "$SHUTDOWN
read choice

case $choice in

1)
 sync                   #just retry
 chk_backup_disk
;;

2)                      #quit and pack it in
 sys_shutdown
;;

*)                      #user entered bull
 echo $error_msg : $UNKN_OPT
 chk_backup_menu
;;
esac
}

function chk_src_not_mounted {
MOUNTED=0               #helper var. if 1 sources are still mounted
for i in $BKP_PART_MNTPOINTS; do   #try and umount all sources
 $UMOUNT $i > /dev/null 2>&1
done

for i in $BKP_PART_MNTPOINTS; do   #now check if they are released
 $MOUNT | $GREP $i > /dev/null 2>&1
 if [ $? -eq 0 ]; then
 MOUNTED=1
 fi
done

if [ $MOUNTED -eq 1 ]; then        #nag if not...
 echo $error_msg : $STILL_MOUNTED
 src_menu
fi
}


function src_menu {     #...and ask what to do about it
echo
echo "1. "$RETRY
echo "2. "$SHUTDOWN

read choice
case $choice in
1)
 sync
 chk_src_not_mounted    #check sources again
;;

2)
 sys_shutdown           #call it a day
;;

*)                      #user nutty
 echo $error_msg : $UNKN_OPT
 src_menu
;;
esac
}


function sys_shutdown {
echo Fahre System herunter...
$HALT
exit 0
}


function backup_win {  # mainly what this is all about
TESTBETRIEB="-m 1M" # only a meg for testing
for i in `seq 0 10`; do  # check and remove old backups
        if [ -f $BACKUP_DST/${BKP_PART_NAME[$i]} ]; then
         rm -f $BACKUP_DST/${BKP_PART_NAME[$i]}
        fi
if [ ! ${BKP_PART[$i]} == ""  ]; then # only those that exist
dd_rescue $TESTBETRIEB ${BKP_PART[$i]} $BACKUP_DST/${BKP_PART_NAME[$i]}
fi

done
sync

save_mbr  # save the boot sector
sync

$UMOUNT $BACKUP_DST
sys_shutdown

}

function save_mbr {
i=1
while [ -f $BACKUP_DST/mbr$i ]; do (( i++ )); done # check available file names
dd if=$BKP_MBR_DISK of=$BACKUP_DST/mbr$i bs=512 count=1
}


################
#MAIN PART
chk_backup_disk
chk_src_not_mounted
backup_win

################### END ####################


Reply to: