Author: jfthomps Date: Thu Mar 15 19:57:37 2012 New Revision: 1301171 URL: http://svn.apache.org/viewvc?rev=1301171&view=rev Log: added code to better handle when the node only has one disk but it is detected as /dev/sdb instead of /dev/sda corrected and improved some error messages added loop at end of script to sleep forever if 'reboot' was not passed on the kernel command line
Modified: incubator/vcl/sandbox/xcat2partimageng/partimageng Modified: incubator/vcl/sandbox/xcat2partimageng/partimageng URL: http://svn.apache.org/viewvc/incubator/vcl/sandbox/xcat2partimageng/partimageng?rev=1301171&r1=1301170&r2=1301171&view=diff ============================================================================== --- incubator/vcl/sandbox/xcat2partimageng/partimageng (original) +++ incubator/vcl/sandbox/xcat2partimageng/partimageng Thu Mar 15 19:57:37 2012 @@ -1,6 +1,5 @@ #!/bin/bash export PATH=/bin:/usr/bin:/sbin:/usr/sbin -unalias ls partimageinstall () { # based on install.sh from xcat 1.3 by Egan Ford @@ -9,31 +8,41 @@ partimageinstall () { myimage=$(basename $1 .img) # needs to be image without path or .gz disk=$(basename $2) # needs to be disk - i.e. sda + altdisk=$disk + if [[ "$disk" = "sdb" ]] && + dmesg | grep -q 'SCSI device sdb' && + ! dmesg | grep -q 'SCSI device sda' && + [[ -f $myimage-sda.sfdisk ]] && + [[ ! -f $myimage-sdb.sfdisk ]] ; then + altdisk="sda" + fi + DONE=0 OLD="" cd $imgpath - NUMPART=$(cat $myimage-$disk.sfdisk | grep "^/dev/$disk" | grep -v Win95 | grep -v Extended | grep -v Empty | grep -v "Id= 0" | grep -v "Id= 5" | grep -v "Id=82" | grep -v swap | awk '{print $1}' | wc -l) - for i in $(cat $myimage-$disk.sfdisk | grep "^/dev/$disk" | grep -v Win95 | grep -v Extended | grep -v Empty | grep -v "Id= 0" | grep -v "Id= 5" | grep -v "Id=82" | grep -v swap | awk '{print $1}') + NUMPART=$(cat $myimage-$altdisk.sfdisk | grep "^/dev/$altdisk" | grep -v Win95 | grep -v Extended | grep -v Empty | grep -v "Id= 0" | grep -v "Id= 5" | grep -v "Id=82" | grep -v swap | awk '{print $1}' | wc -l) + for i in $(cat $myimage-$altdisk.sfdisk | grep "^/dev/$altdisk" | grep -v Win95 | grep -v Extended | grep -v Empty | grep -v "Id= 0" | grep -v "Id= 5" | grep -v "Id=82" | grep -v swap | awk '{print $1}') do - PARTNAME=$(basename $i) + PARTNAME=$(basename ${i/$altdisk/$disk}) if (("$NUMPART" > "1")) then - PARTNAMEIMG=${PARTNAME/#??/part} + #PARTNAMEIMG=${PARTNAME/#??/part} + PARTNAMEIMG=$(basename $i | sed 's/^../part/') INPUTFILE=$myimage-$PARTNAMEIMG.gz else INPUTFILE=$myimage.gz fi if [ "$DONE" = "0" ] then - if [ -r $myimage-$disk.sfdisk ] + if [ -r $myimage-$altdisk.sfdisk ] then - sfdisk /dev/$disk <$myimage-$disk.sfdisk + sfdisk /dev/$disk <$myimage-$altdisk.sfdisk fi - if [ -r $myimage-$disk.mbr ] + if [ -r $myimage-$altdisk.mbr ] then - dd if=$myimage-$disk.mbr of=/dev/$disk - sfdisk /dev/$disk <$myimage-$disk.sfdisk + dd if=$myimage-$altdisk.mbr of=/dev/$disk + sfdisk /dev/$disk <$myimage-$altdisk.sfdisk else OLD=".6.0" partimage$OLD -b -f3 restmbr $INPUTFILE @@ -74,6 +83,13 @@ partimagesave () { myimage=$(basename $1 .img) # needs to be image without path or .gz disk=$(basename $2) # needs to be disk - i.e. sda + altdisk=$disk + if [[ "$disk" = "sdb" ]] && + dmesg | grep -q 'SCSI device sdb' && + ! dmesg | grep -q 'SCSI device sda' ; then + altdisk="sda" + fi + logger -t xcat "Getting partitons for $disk" echo "Partitions for $disk" sfdisk -l /dev/$disk @@ -82,11 +98,15 @@ partimagesave () { NUMPART=$(sfdisk -l /dev/$disk | grep "^/dev/$disk" | grep -v Win95 | grep -v Extended | grep -v Empty | grep -v "Id= 0" | grep -v swap | awk '{print $1}' | wc -l) logger -t xcat "number of partitions found: $NUMPART" - dd if=/dev/$disk of=$imgpath/$myimage-$disk.mbr count=1 bs=512 + dd if=/dev/$disk of=$imgpath/$myimage-$altdisk.mbr count=1 bs=512 sfdisk /dev/$disk -d >$imgpath/$myimage-$disk.sfdisk.tmp if [ -s $imgpath/$myimage-$disk.sfdisk.tmp ] then mv -f $imgpath/$myimage-$disk.sfdisk.tmp $imgpath/$myimage-$disk.sfdisk + if [[ "$disk" != "$altdisk" ]]; then + cat $imgpath/$myimage-$disk.sfdisk | sed "s/$disk/$altdisk/" > $imgpath/$myimage-$altdisk.sfdisk + rm -f $imgpath/$myimage-$disk.sfdisk + fi else rm -f $imgpath/$myimage-$disk.sfdisk.tmp fi @@ -108,6 +128,7 @@ partimagesave () { if ! partimage -z1 -f3 -odbc save /dev/$PARTNAME $OUTPUTFILE; then echo partimage exited with a non-zero status, failing logger -t xcat "partimage exited with a non-zero status, failing" + exit # do we exit or return a value to fail? return 1 fi done @@ -141,6 +162,8 @@ if ! ping -c 1 $MASTER &> /dev/null; the /sbin/reboot exit fi + +logger -t xcat "mounting $IMAGELIBSERVER:$IMAGELIBINSTALLDIR --> /install" mount -o nfsvers=3,tcp,nolock,rw $IMAGELIBSERVER:$IMAGELIBINSTALLDIR /install reboot='' @@ -172,16 +195,16 @@ done sleep 10 -devices=`ls -l /dev/disk/by-id | awk '{print $11}'` +devices=`\ls -l /dev/disk/by-id | awk '{print $11}'` logger -t xcat "disks: $devices" if [ "x$device" == "x" ] ; then - device=$(ls /dev/disk/by-id -l | grep -v total | head -1 | awk '{print $11}' | sed 's/[\.\/]//g') + device=$(\ls /dev/disk/by-id -l | grep -v total | head -1 | awk '{print $11}' | sed 's/[\.\/]//g') if ! echo $device | egrep -q '(sda|hda)'; then device=$(cat /proc/partitions | egrep -v '(ram|major)' | egrep '\w' | head -1 | awk '{print $4}') fi if ! echo $device | egrep -q '(sda|hda)'; then - device=$(ls /dev/disk/by-id -l | grep -v total | head -1 | awk '{print $11}' | sed 's/[\.\/]//g') + device=$(\ls /dev/disk/by-id -l | grep -v total | head -1 | awk '{print $11}' | sed 's/[\.\/]//g') if ! echo $device | egrep -q '(sdb|hdb)'; then device=$(cat /proc/partitions | egrep -v '(ram|major)' | egrep '\w' | head -1 | awk '{print $4}') fi @@ -202,36 +225,48 @@ fi if [ "x$action" == "xsave" ] ; then touch /tmp/save if [ "$usepartimageng" = "0" ]; then + cmd="partimage" partimagesave $image $device rc=$? + if [ "$rc" = "0" ]; then + echo "partimage successfully saved image" + logger -t xcat "partimage successfully saved image" + else + echo "partimage failed to saved image" + logger -t xcat "partimage failed to saved image" + fi else + cmd="partimage-ng" echo running /sbin/partimage-ng -b $blocks save $device $image logger -t xcat "running /sbin/partimage-ng -p -b $blocks save $device $image" /sbin/partimage-ng -p -b $blocks save $device $image > /tmp/partimageng - echo gzipping $image - logger -t xcat "gzipping $image" - touch /tmp/savegzip - if gzip $image; then - echo gzipping finished, removing .gz extension from filename - logger -t xcat "gzipping finished, removing .gz extension from filename" - mv $image.gz $image - else - echo "gzipping failed" - logger -t xcat "gzipping failed" - fi rc=$? + if [ "$rc" = "0" ]; then + echo gzipping $image + logger -t xcat "gzipping $image" + touch /tmp/savegzip + if gzip $image; then + echo gzipping finished, removing .gz extension from filename + logger -t xcat "gzipping finished, removing .gz extension from filename" + mv $image.gz $image + else + echo "gzipping failed" + logger -t xcat "gzipping failed" + fi + fi fi if [ "$rc" = "0" ]; then touch $image.capturedone - logger -t xcat "partimage-ng exited normally" + logger -t xcat "$cmd exited normally" else touch $image.capturefailed - logger -t xcat "partimage-ng failed with exit code $rc" + logger -t xcat "$cmd failed with exit code $rc" fi elif [ "x$action" == "xrestore" ] ; then touch /tmp/restore testfile=$(echo $image | awk -F '.' '{print $1}') - if ls -1 $testfile*.mbr > /dev/null; then + if \ls -1 $testfile*.mbr > /dev/null; then + partimageinstall $image $device partimageinstall $image $device rc=$? if [ "$rc" = "0" ]; then @@ -271,4 +306,6 @@ fi if [ "x$reboot" == "xreboot" ] ; then /sbin/reboot +else + while : ; do sleep 3600 ; done fi