|
Gh*st For Linux
这个*应该是o.
用dialog整的.
我看了一下.马上传上来了.
我觉得他的主要方面就是支持网络ghost比较爽,当然没有测试过
有条件的朋友可以帮忙测试一下
版主给我加精啦
- #!/bin/sh
- : ${DIALOG=dialog}
- : ${DIALOG_OK=0}
- : ${DIALOG_CANCEL=1}
- : ${DIALOG_ESC=255}
- # global vars
- author="Frank Stephen"
- version="v0.14"
- year="2004"
- website="http://freshmeat.net/projects/g4l"
- # path to images on ftp server
- ftppath=img
- # window title
- backtitle="g4l $version, $author $year"
- # parse info about devices to tempfiles
- netdevices=`cat /proc/net/dev |grep eth |sed -e 's/://g' |awk '{print $1}'`
- partitions=`cat /proc/partitions |grep .d |awk '{print $4}'`
- # write systeminfo file
- echo "Drive/Partition sizes: " >> /tmp/sysinfo
- cat /proc/partitions |grep .d | awk '{print $4,$3}' |sort >>/tmp/sysinfo
- echo >> /tmp/sysinfo
- echo "Drive models: " >> /tmp/sysinfo
- for h in $partitions
- do
- length=`echo $h |wc -c`
- if [ $length -lt 5 ]; then
- echo $h >> /tmp/sysinfo
- cat /proc/ide/$h/model >> /tmp/sysinfo 2>/dev/null
- fi
- done
- # write menulists
- partlist=""
- netlist=""
- for i in $partitions
- do partlist="$partlist `echo $i detected...OK off`"
- done
- for j in $netdevices
- do netlist="$netlist `echo $j detected...OK off`"
- done
- function createTemp ()
- {
- export tempfile${1}="/tmp/test${1}$$"
- }
- #
- # create tempfiles for menu structure
- #
- #main menu
- createTemp main
- #raw mode menu
- createTemp rawmenu
- # net menu
- createTemp netmenu
- # net config
- createTemp device
- # net device
- createTemp ip
- # net ftp
- createTemp ftp
- # net filename
- createTemp netname
- # net zip
- createTemp netzip
- # netbackup menu
- createTemp netback
- # netrestore menu
- createTemp netrest
- # local menu
- createTemp localmenu
- # local drive
- createTemp localdrive
- # local filename
- createTemp localname
- # local split
- createTemp localsplit
- # local zip
- createTemp localzip
- # local backup menu
- createTemp localback
- # local restore menu
- createTemp localrest
- # clone menu
- createTemp clonemenu
- # clone source
- createTemp clonesource
- # clone target
- createTemp clonetarget
- # file mode menu
- createTemp filemenu
- # file mode eth device
- createTemp fileip
- # file mode ip address
- createTemp filedevice
- # file mode partition
- createTemp filepart
- # util menu
- createTemp utilmenu
- # util hdparm
- createTemp hdparm
- # util zero
- createTemp utilzero
- # util dd_rescue
- createTemp ddres
- # util dd_rescue source
- createTemp ddressource
- # util dd_rescue target
- createTemp ddrestarget
- $DIALOG --backtitle "$backtitle" \
- --title "INFORMATION" --clear \
- --yesno "g4l - Gh*st for Linux \n \
- $author $year \n\n \
- g4l comes with ABSOLUTELY NO WARRANTY ! \n \
- This is free Software, and you are welcome \n \
- to redistribute it freely. Read the online Help\n \
- for more info on this delicate topic. \n\n \
- USE AT OWN RISK! \n\n \
- Also, g4l has NOTHING to do with the famous\n \
- "Norton GHOST" (c) and (tm) by Symantec!\n \
- visit [url]www.symantec.com[/url] to get their product.\n\n \
- Accept these conditions? YES to proceed, NO to quit. " 20 60
- case $? in
- $DIALOG_OK)
- while [ "$retvalmain" != "1" ]
- do
- retvalrawmenu=0
- retvalfilemenu=0
- retvalnetmenu=0
- retvalclonemenu=0
- retvallocalmenu=0
- retvalutilmenu=0
- $DIALOG --backtitle "$backtitle" \
- --title "MAIN MENU" \
- --menu "Choose your desired mode:" 0 0 0 \
- "RAW Mode" "ANY filesystem, every bit, local+ftp" \
- "File Mode" "Some filesystems only, only files, local+special server" \
- "Utilities" "System info and tools" \
- "Show Help" "Show IMPORTANT help" 2> $tempfilemain
- retvalmain=$?
- choicemain=`cat $tempfilemain`
- case $retvalmain in
- $DIALOG_OK)
- case $choicemain in
- "RAW Mode")
- while [ "$retvalrawmenu" != "1" ]
- do
- $DIALOG --backtitle "$backtitle" \
- --title "RAW MODE" \
- --menu "Choose one of the following options: \n\n" 0 0 0\
- "Network use" "Backup/Restore to/from network" \
- "Local use" "Backup/Restore to/from local drive" \
- "Click'n'Clone" "Directly clone a drive" \
- "Show Help" "Show IMPORTANT helpfile" 2> $tempfilerawmenu
- retvalrawmenu=$?
- choicerawmenu=`cat $tempfilerawmenu`
- case $retvalrawmenu in
- $DIALOG_OK)
- case $choicerawmenu in
- "Network use")
- retvalnetmenu=0
- while [ "$retvalnetmenu" != "1" ]
- do
- $DIALOG --clear --backtitle "$backtitle" \
- --title "NETWORK USE" \
- --menu "Choose one of the following options: \n\n" 0 0 0 \
- "Pick device" "Select ethernet device" \
- "Config device" "Set IP address" \
- "Config FTP" "Set IP for FTP server" \
- "Config filename" "Set filename on FTP" \
- "Toggle compression" "Select compression types" \
- "Backup" "Backup drive/partition to FTP server" \
- "Restore" "Restore drive/partition from FTP server" 2> $tempfilenetmenu
- retvalnetmenu=$?
- choicenetmenu=`cat $tempfilenetmenu`
- case $retvalnetmenu in
- $DIALOG_OK)
- case $choicenetmenu in
- "Pick device")
- $DIALOG --backtitle "$backtitle" \
- --title "PICK DEVICE" \
- --radiolist "Choose network device \n\
- Select from:" 0 0 0 \
- $netlist 2> $tempfiledevice
- retvaldevice=$?
- choicedevice=`cat $tempfiledevice`
- case $retvaldevice in
- $DIALOG_OK)
- device=$choicedevice
- ;;
- $DIALOG_CANCEL)
- ;;
- $DIALOG_ESC)
- ;;
- esac
- ;;
- "Config device")
- $DIALOG --backtitle "$backtitle" \
- --title "Set Network" --clear \
- --inputbox "Set IP Address to match your subnet. \
- \nExample: 192.168.0.5 \
- \n\nEnter IP Address:" 0 0 2> $tempfileip
- retvalip=$?
- case $retvalip in
- $DIALOG_OK)
- ipaddress=`cat $tempfileip`
- /sbin/ifconfig $device $ipaddress up
- ;;
- $DIALOG_CANCEL)
- ;;
- $DIALOG_ESC)
- if test -s $tempfileip ; then
- ipaddress=`cat $tempfileip`
- /sbin/ifconfig $device $ipaddress up
- fi
- ;;
- esac
- ;;
- "Config FTP")
- $DIALOG --backtitle "$backtitle" \
- --title "CONFIG FTP" --clear \
- --inputbox "Enter IP Address of FTP Server. \
- \nFTP server musst allow anonymous write access! \
- \nExample: 192.168.0.1 \
- \n\nFTP IP:" 0 0 2> $tempfileftp
- retvalftp=$?
- case $retvalftp in
- $DIALOG_OK)
- server=`cat $tempfileftp`
- ;;
- $DIALOG_CANCEL)
- ;;
- $DIALOG_ESC)
- if test -s $tempfileftp ; then
- server=`cat $tempfileftp`
- fi
- ;;
- esac
- ;;
- "Config filename")
- $DIALOG --backtitle "$backtitle" \
- --title "CONFIG FILENAME" --clear \
- --inputbox "Enter filename of the stored image. \
- \nExample: hda_workstation2.img \
- \n\nFilename:" 0 0 2> $tempfilenetname
- retvalnetname=$?
- case $retvalnetname in
- $DIALOG_OK)
- netimagename=`cat $tempfilenetname`
- ;;
- $DIALOG_CANCEL)
- ;;
- $DIALOG_ESC)
- if test -s $tempfilenetname ; then
- netimagename=`cat $tempfilenetname`
- fi
- ;;
- esac
- ;;
- "Toggle compression")
- $DIALOG --backtitle "$backtitle" \
- --title "TOGGLE COMPRESSION" \
- --radiolist "Choose wether to use compression or not. \
- \nBe careful, compression requires much CPU power!" 0 0 0 \
- "None" "No compression." ON \
- "GZip" "GZip compression." off \
- "BZip2" "BZip2 compression." off 2> $tempfilenetzip
- retvalnetzip=$?
- choicenetzip=`cat $tempfilenetzip`
- case $retvalnetzip in
- $DIALOG_OK)
- netzip=`cat $tempfilenetzip`
- ;;
- $DIALOG_CANCEL)
- ;;
- $DIALOG_ESC)
- if test -s $tempfilenetzip ; then
- netzip=`cat $tempfilenetzip`
- fi
- ;;
- esac
- ;;
- "Backup")
- if [ "$ipaddress" = "" ] ; then
- $DIALOG --backtitle "$backtitle" \
- --title "ERROR" --clear \
- --msgbox "No Networtk IP Address for eth0 set! \n
- ->Back to Main Menu." 0 0
- continue
- fi
- if [ "$server" = "" ] ; then
- $DIALOG --backtitle "$backtitle" \
- --title "ERROR" --clear \
- --msgbox "No FTP IP Address set! \n
- ->Back to Main Menu." 0 0
- continue
- fi
- if [ "$netimagename" = "" ] ; then
- $DIALOG --backtitle "$backtitle" \
- --title "WARNING" --clear \
- --msgbox "No filename for image set, using default \n
- Filename: image.img.gz" 0 0
- netimagename=image.img.gz
- fi
- if [ "$netzip" = "" ] ; then
- $DIALOG --backtitle "$backtitle" \
- --title "WARNING" --clear \
- --msgbox "Compression not defined, using default \n
- Compression: None" 0 0
- netzip=None
- fi
- $DIALOG --backtitle "$backtitle" \
- --title "BACKUP" \
- --radiolist "Choose Drive or Partition to backup\n\
- Select from:" 0 0 0 \
- $partlist 2> $tempfilenetback
- retvalnetback=$?
- choicenetback=`cat $tempfilenetback`
- case $retvalnetback in
- $DIALOG_OK)
- disk=/dev/$choicenetback
- $DIALOG --backtitle "$backtitle" \
- --title "ABOUT TO BACKUP" --clear \
- --yesno "Collected information: \
- \nLocal IP Address: $ipaddress \
- \nFTP IP Address: $server \
- \nTarget imagename: $netimagename \
- \nFTP path: $ftppath \
- \nCompression: $netzip \
- \nSource Drive: $disk \
- \n\nAre you sure?" 0 0
- case $? in
- $DIALOG_OK)
- readsize=`cat /proc/partitions |grep -w $choicenetback |awk '{print $3}'`
- pcnt=0
- if [ "$netzip" = "None" ] ; then
- (dd if=$disk 2>/dev/null | jetcat-mod -p $readsize 2>/tmp/netback.out |ncftpput -c -d /tmp/out $server "/$ftppath/$netimagename") &
- (
- while test "$pcnt" != "100"
- do
- pcnt=`tail -n1 /tmp/netback.out`
- echo "XXX"
- echo $pcnt
- echo "\n"
- echo "g4l is backing up your harddrive.\n"
- echo "Every single bit of the drive is copied, so:\n\n"
- echo "Please stand by, this might take some time!\n"
- echo "XXX"
- sleep 3
- done
- ) | $DIALOG --backtitle "$backtitle" \
- --title "Working..." \
- --gauge "One moment..." 18 60
- rm /tmp/netback.out
- touch /tmp/netback.out
- fi
- if [ "$netzip" = "GZip" ] ; then
- (dd if=$disk 2>/dev/null | jetcat-mod -p $readsize 2>/tmp/netback.out |gzip -c - | ncftpput -c -d /tmp/out $server "/$ftppath/$netimagename") &
- (
- while test "$pcnt" != "100"
- do
- pcnt=`tail -n1 /tmp/netback.out`
- echo "XXX"
- echo $pcnt
- echo "\n"
- echo "g4l is backing up your harddrive.\n"
- echo "Every single bit of the drive is copied, so:\n\n"
- echo "Please stand by, this might take some time!\n"
- echo "XXX"
- sleep 3
- done
- ) | $DIALOG --backtitle "$backtitle" \
- --title "Working..." \
- --gauge "One moment..." 18 60
- rm /tmp/netback.out
- touch /tmp/netback.out
- fi
- if [ "$netzip" = "BZip2" ] ; then
- (dd if=$disk 2>/dev/null | jetcat-mod -p $readsize 2>/tmp/netback.out |bzip2 | ncftpput -c -d /tmp/out $server "/$ftppath/$netimagename") &
- (
- while test "$pcnt" != "100"
- do
- pcnt=`tail -n1 /tmp/netback.out`
- echo "XXX"
- echo $pcnt
- echo "\n"
- echo "g4l is backing up your harddrive.\n"
- echo "Every single bit of the drive is copied, so:\n\n"
- echo "Please stand by, this might take some time!\n"
- echo "XXX"
- sleep 3
- done
- ) | $DIALOG --backtitle "$backtitle" \
- --title "Working..." \
- --gauge "One moment..." 18 60
- rm /tmp/netback.out
- touch /tmp/netback.out
- fi
- ;;
- $DIALOG_CANCEL)
- ;;
- $DIALOG_ESC)
- ;;
- esac
- ;;
- $DIALOG_CANCEL)
- ;;
- $DIALOG_ESC)
- ;;
- esac
- ;;
- "Restore")
- if [ "$ipaddress" = "" ] ; then
- $DIALOG --backtitle "$backtitle" \
- --title "ERROR" --clear \
- --msgbox "No Networtk IP Address for eth0 set! \n
- ->Back to Main Menu." 0 0
- continue
- fi
- if [ "$server" = "" ] ; then
- $DIALOG --backtitle "$backtitle" \
- --title "ERROR" --clear \
- --msgbox "No FTP IP Address set! \n
- ->Back to Main Menu." 0 0
- continue
- fi
- if [ "$netimagename" = "" ] ; then
- $DIALOG --backtitle "$backtitle" \
- --title "WARNING" --clear \
- --msgbox "No filename for image set, using default \n
- Filename: image.img.gz" 0 0
- netimagename=image.img.gz
- fi
- if [ "$netzip" = "" ] ; then
- $DIALOG --backtitle "$backtitle" \
- --title "WARNING" --clear \
- --msgbox "Compression not defined, using default \n
- Compression: None" 0 0
- netzip=None
- fi
- $DIALOG --backtitle "$backtitle" \
- --title "RESTORE" \
- --radiolist "Choose drive or partition to restore the image to \
- \n\nSelect from:" 0 0 0 \
- $partlist 2> $tempfilenetrest
- retvalnetrest=$?
- choicenetrest=`cat $tempfilenetrest`
- case $retvalnetrest in
- $DIALOG_OK)
- rest=/dev/$choicenetrest
- $DIALOG --backtitle "$backtitle" \
- --title "About to restore disk" --clear \
- --yesno "Collected information: \
- \nLocal IP Address: $ipaddress \
- \nFTP IP Address: $server \
- \nSource imagename: $netimagename \
- \nFTP path: $ftppath \
- \nCompression: $netzip \
- \nTarget disk: $rest \n\n \
- \n\nAre you sure?" 0 0
- case $? in
- $DIALOG_OK)
- writesize=`cat /proc/partitions |grep -w $choicenetrest |awk '{print $3}'`
- pcnt=0
- if [ "$netzip" = "None" ] ; then
- (ncftpget -c -V -d /tmp/out $server "/$ftppath/$netimagename" | jetcat-mod -p $writesize 2>/tmp/netrest.out | dd of=$rest 2>/dev/null) &
- (
- while test "$pcnt" != "100"
- do
- pcnt=`tail -n1 /tmp/netrest.out`
- echo "XXX"
- echo $pcnt
- echo "\n"
- echo "g4l is restoring your harddrive.\n"
- echo "\n"
- echo "The progress bar will be inaccurate if you restore\n"
- echo "backups from small drives to large drives.\n\n"
- echo "Every single bit of the drive is written, so:\n\n"
- echo "Please stand by, this might take some time!\n"
- echo "XXX"
- sleep 3
- done
- ) | $DIALOG --backtitle "$backtitle" \
- --title "Working..." \
- --gauge "One moment..." 18 60
- rm /tmp/netrest.out
- touch /tmp/netrest.out
- fi
- if [ "$netzip" = "GZip" ] ; then
- (ncftpget -c -V -d /tmp/out $server "/$ftppath/$netimagename" | gunzip -c -| jetcat-mod -p $writesize 2>/tmp/netrest.out |dd of=$rest 2>/dev/null) &
- (
- while test "$pcnt" != "100"
- do
- pcnt=`tail -n1 /tmp/netrest.out`
- echo "XXX"
- echo $pcnt
- echo "\n"
- echo "g4l is restoring your harddrive.\n"
- echo "\n"
- echo "The progress bar will be inaccurate if you restore\n"
- echo "backups from small drives to large drives.\n\n"
- echo "Every single bit of the drive is written, so:\n\n"
- echo "Please stand by, this might take some time!\n"
- echo "XXX"
- sleep 3
- done
- ) | $DIALOG --backtitle "$backtitle" \
- --title "Working..." \
- --gauge "One moment..." 18 60
- rm /tmp/netrest.out
- touch /tmp/netrest.out
- fi
- if [ "$netzip" = "BZip2" ] ; then
- (ncftpget -c -V -d /tmp/out $server "/$ftppath/$netimagename" | bzcat | jetcat-mod -p $writesize 2>/tmp/netrest.out |dd of=$rest 2>/dev/null) &
- (
- while test "$pcnt" != "100"
- do
- pcnt=`tail -n1 /tmp/netrest.out`
- echo "XXX"
- echo $pcnt
- echo "\n"
- echo "g4l is restoring your harddrive.\n"
- echo "\n"
- echo "The progress bar will be inaccurate if you restore\n"
- echo "backups from small drives to large drives.\n\n"
- echo "Every single bit of the drive is written, so:\n\n"
- echo "Please stand by, this might take some time!\n"
- echo "XXX"
- sleep 3
- done
- ) | $DIALOG --backtitle "$backtitle" \
- --title "Working..." \
- --gauge "One moment..." 18 60
- rm /tmp/netrest.out
- touch /tmp/netrest.out
- fi
- rm /tmp/out
- touch /tmp/out
- ;;
- $DIALOG_CANCEL)
- ;;
- $DIALOG_ESC)
- ;;
- esac
- ;;
- $DIALOG_CANCEL)
- ;;
- $DIALOG_ESC)
- ;;
- esac
- ;;
- esac
- ;;
- $DIALOG_CANCEL)
- ;;
- $DIALOG_ESC)
- ;;
- esac
- done
- ;;
- "Local use")
- retvallocalmenu=0
-
- while [ "$retvallocalmenu" != "1" ]
- do
- $DIALOG --clear --backtitle "$backtitle" \
- --title "LOCAL USE" \
- --menu "Choose one of the following options: \n\n" 0 0 0 \
- "Pick drive" "Select target/source drive" \
- "Config filename" "Set filename" \
- "Toggle split" "Activate file splitting" \
- "Toggle compression" "Select compression types" \
- "Backup" "Backup drive/partition to local drive" \
- "Restore" "Restore drive/partition from local drive" 2> $tempfilelocalmenu
- retvallocalmenu=$?
- choicelocalmenu=`cat $tempfilelocalmenu`
- case $retvallocalmenu in
- $DIALOG_OK)
- case $choicelocalmenu in
- "Pick drive")
- $DIALOG --backtitle "$backtitle" \
- --title "PICK DRIVE" \
- --radiolist "Choose drive to write to/read from.\
- \nSupported FS are:\n\
- ext2 - Linux\n\
- ext3 - Linux\n\
- reiserfs - Linux\n\
- fat32 - Windows95/98/NT/2k/XP\n\
- ntfs - Windows NT/2k/XP\
- \n\nSelect partition (example: /dev/hda1):" 0 0 0 \
- $partlist 2> $tempfilelocaldrive
- retvallocaldrive=$?
- choicelocaldrive=`cat $tempfilelocaldrive`
- case $retvallocaldrive in
- $DIALOG_OK)
- localdrive=$choicelocaldrive
- mount /dev/$localdrive /mnt/local >/tmp/mount 2>&1
- retvalmount=$?
- if [ $retvalmount != 0 ] ; then
- $DIALOG --backtitle "$backtitle" \
- --title "ERROR" \
- --textbox /tmp/mount 0 0
- localdrive=""
- umount /mnt/local
- fi
- ;;
- $DIALOG_CANCEL)
- ;;
- $DIALOG_ESC)
- ;;
- esac
- ;;
- "Config filename")
- $DIALOG --backtitle "$backtitle" \
- --title "CONFIG FILENAME" --clear \
- --inputbox "Enter filename of the stored image. \
- \nExample: hda_workstation2.img \
- \n\nFilename:" 0 0 2> $tempfilelocalname
- retvallocalname=$?
- case $retvallocalname in
- $DIALOG_OK)
- localimagename=`cat $tempfilelocalname`
- ;;
- $DIALOG_CANCEL)
- ;;
- $DIALOG_ESC)
- if test -s $tempfilelocalname ; then
- localimagename=`cat $tempfilelocalname`
- fi
- ;;
- esac
- ;;
- "Toggle split")
- $DIALOG --backtitle "$backtitle" \
- --title "TOGGLE SPLIT" \
- --radiolist "Choose if the imagefile should be split. \
- \nIf the FS limits filesize to 2GB, enable splitting!" 0 0 0 \
- "Off" "Splitting off." ON \
- "On" "Splitting on." off 2> $tempfilelocalsplit
- retvallocalsplit=$?
- choicelocalsplit=`cat $tempfilelocalsplit`
- case $retvallocalsplit in
- $DIALOG_OK)
- localsplit=`cat $tempfilelocalsplit`
- ;;
- $DIALOG_CANCEL)
- ;;
- $DIALOG_ESC)
- if test -s $tempfilelocalsplit ; then
- localsplit=`cat $tempfilelocalsplit`
- fi
- ;;
- esac
- ;;
- "Toggle compression")
- $DIALOG --backtitle "$backtitle" \
- --title "TOGGLE COMPRESSION" \
- --radiolist "Choose wether to use compression or not. \
- \nBe careful, compression requires much CPU power!" 0 0 0 \
- "None" "No compression." ON \
- "GZip" "GZip compression." off \
- "BZip2" "BZip2 compression." off 2> $tempfilelocalzip
- retvallocalzip=$?
- choicelocalzip=`cat $tempfilelocalzip`
- case $retvallocalzip in
- $DIALOG_OK)
- localzip=`cat $tempfilelocalzip`
- ;;
- $DIALOG_CANCEL)
- ;;
- $DIALOG_ESC)
- if test -s $tempfilelocalzip ; then
- localzip=`cat $tempfilelocalzip`
- fi
- ;;
- esac
- ;;
- "Backup")
- if [ "$localdrive" = "" ] ; then
- $DIALOG --backtitle "$backtitle" \
- --title "ERROR" --clear \
- --msgbox "No target drive set! \n
- ->Back to Main Menu." 0 0
- continue
- fi
- if [ "$localimagename" = "" ] ; then
- $DIALOG --backtitle "$backtitle" \
- --title "WARNING" --clear \
- --msgbox "No filename for image set, using default \n
- Filename: image.img.gz" 0 0
- localimagename=image.img.gz
- fi
- if [ "$localsplit" = "" ] ; then
- $DIALOG --backtitle "$backtitle" \
- --title "WARNING" --clear \
- --msgbox "Splitting not defined, using default \n
- Splitting: Off" 0 0
- localsplit=Off
- fi
- if [ "$localzip" = "" ] ; then
- $DIALOG --backtitle "$backtitle" \
- --title "WARNING" --clear \
- --msgbox "Compression not defined, using default \n
- Compression: None" 0 0
- localzip=None
- fi
- $DIALOG --backtitle "$backtitle" \
- --title "BACKUP" \
- --radiolist "Choose Drive or Partition to backup\n\
- Select from:" 0 0 0 \
- $partlist 2> $tempfilelocalback
- retvallocalback=$?
- choicelocalback=`cat $tempfilelocalback`
- case $retvallocalback in
- $DIALOG_OK)
- localback=/dev/$choicelocalback
- $DIALOG --backtitle "$backtitle" \
- --title "ABOUT TO BACKUP" --clear \
- --yesno "Collected information: \
- \nTarget drive in /mnt/local: $localdrive \
- \nFilename for image: $localimagename \
- \nSplitting: $localsplit \
- \nCompression: $localzip \
- \nSource drive: $localback \
- \n\nAre you sure?" 0 0
- case $? in
- $DIALOG_OK)
- localreadsize=`cat /proc/partitions |grep -w $choicelocalback |awk '{print $3}' `
- pcnt=0
- if [ "$localzip" = "None" ] ; then
- if [ "$localsplit" = "Off" ] ; then
- dd if=$localback 2>/dev/null |jetcat-mod -p $localreadsize 2>/tmp/localback.out | dd of=/mnt/local/$localimagename 2>/dev/null &
- (
- while test "$pcnt" != "100"
- do
- pcnt=`tail -n1 /tmp/localback.out`
- echo "XXX"
- echo $pcnt
- echo "\n"
- echo "g4l is backing up your harddrive locally.\n"
- echo "\n"
- echo "Every single bit of the drive is copied, so:\n\n"
- echo "Please stand by, this might take some time!\n"
- echo "XXX"
- sleep 3
- done
- ) | $DIALOG --backtitle "$backtitle" \
- --title "Working..." \
- --gauge "One moment..." 18 60
- rm /tmp/localback.out
- touch /tmp/localback.out
- fi
- if [ "$localsplit" = "On" ] ; then
- (dd if=$localback 2>/dev/null |jetcat-mod -p $localreadsize 2>/tmp/localback.out |split -b 2000m - /mnt/local/$localimagename. ) &
- (
- while test "$pcnt" != "100"
- do
- pcnt=`tail -n1 /tmp/localback.out`
- echo "XXX"
- echo $pcnt
- echo "\n"
- echo "g4l is backing up your harddrive locally.\n"
- echo "\n"
- echo "Every single bit of the drive is copied, so:\n\n"
- echo "Please stand by, this might take some time!\n"
- echo "XXX"
- sleep 3
- done
- ) | $DIALOG --backtitle "$backtitle" \
- --title "Working..." \
- --gauge "One moment..." 18 60
- rm /tmp/localback.out
- touch /tmp/localback.out
- fi
- fi
- if [ "$localzip" = "GZip" ] ; then
- if [ "$localsplit" = "Off" ] ; then
- (dd if=$localback 2>/dev/null |jetcat-mod -p $localreadsize 2>/tmp/localback.out |gzip -c - >/mnt/local/$localimagename) &
- (
- while test "$pcnt" != "100"
- do
- pcnt=`tail -n1 /tmp/localback.out`
- echo "XXX"
- echo $pcnt
- echo "\n"
- echo "g4l is backing up your harddrive locally.\n"
- echo "\n"
- echo "Every single bit of the drive is copied, so:\n\n"
- echo "Please stand by, this might take some time!\n"
- echo "XXX"
- sleep 3
- done
- ) | $DIALOG --backtitle "$backtitle" \
- --title "Working..." \
- --gauge "One moment..." 18 60
- rm /tmp/localback.out
- touch /tmp/localback.out
- fi
- if [ "$localsplit" = "On" ] ; then
- (dd if=$localback 2>/dev/null |jetcat-mod -p $localreadsize 2>/tmp/localback.out | gzip -c - | split -b 2000m - /mnt/local/$localimagename. ) &
- (
- while test "$pcnt" != "100"
- do
- pcnt=`tail -n1 /tmp/localback.out`
- echo "XXX"
- echo $pcnt
- echo "\n"
- echo "g4l is backing up your harddrive locally.\n"
- echo "\n"
- echo "Every single bit of the drive is copied, so:\n\n"
- echo "Please stand by, this might take some time!\n"
- echo "XXX"
- sleep 3
- done
- ) | $DIALOG --backtitle "$backtitle" \
- --title "Working..." \
- --gauge "One moment..." 18 60
- rm /tmp/localback.out
- touch /tmp/localback.out
- fi
- fi
- if [ "$localzip" = "BZip2" ] ; then
- if [ "$localsplit" = "Off" ] ; then
- (dd if=$localback 2>/dev/null |jetcat-mod -p $localreadsize 2>/tmp/localback.out | bzip2 >/mnt/local/$localimagename) &
- (
- while test "$pcnt" != "100"
- do
- pcnt=`tail -n1 /tmp/localback.out`
- echo "XXX"
- echo $pcnt
- echo "\n"
- echo "g4l is backing up your harddrive locally.\n"
- echo "\n"
- echo "Every single bit of the drive is copied, so:\n\n"
- echo "Please stand by, this might take some time!\n"
- echo "XXX"
- sleep 3
- done
- ) | $DIALOG --backtitle "$backtitle" \
- --title "Working..." \
- --gauge "One moment..." 18 60
- rm /tmp/localback.out
- touch /tmp/localback.out
- fi
- if [ "$localsplit" = "On" ] ; then
- (dd if=$localback 2>/dev/null |jetcat-mod -p $localreadsize 2>/tmp/localback.out | bzip2 | split -b 2000m - /mnt/local/$localimagename. ) &
- (
- while test "$pcnt" != "100"
- do
- pcnt=`tail -n1 /tmp/localback.out`
- echo "XXX"
- echo $pcnt
- echo "\n"
- echo "g4l is backing up your harddrive locally.\n"
- echo "\n"
- echo "Every single bit of the drive is copied, so:\n\n"
- echo "Please stand by, this might take some time!\n"
- echo "XXX"
- sleep 3
- done
- ) | $DIALOG --backtitle "$backtitle" \
- --title "Working..." \
- --gauge "One moment..." 18 60
- rm /tmp/localback.out
- touch /tmp/localback.out
- fi
- fi
- umount /mnt/local
- rm /tmp/out
- touch /tmp/out
- ;;
- $DIALOG_CANCEL)
- ;;
- $DIALOG_ESC)
- ;;
- esac
- ;;
- esac
- ;;
- "Restore")
- if [ "$localdrive" = "" ] ; then
- $DIALOG --backtitle "$backtitle" \
- --title "ERROR" --clear \
- --msgbox "No target drive set! \n
- ->Back to Main Menu." 0 0
- continue
- fi
- if [ "$localimagename" = "" ] ; then
- $DIALOG --backtitle "$backtitle" \
- --title "WARNING" --clear \
- --msgbox "No filename for image set, using default \n
- Filename: image.img.gz" 0 0
- localimagename=image.img.gz
- fi
- if [ "$localsplit" = "" ] ; then
- $DIALOG --backtitle "$backtitle" \
- --title "WARNING" --clear \
- --msgbox "Splitting not defined, using default \n
- Splitting: Off" 0 0
- localsplit=Off
- fi
- if [ "$localzip" = "" ] ; then
- $DIALOG --backtitle "$backtitle" \
- --title "WARNING" --clear \
- --msgbox "Compression not defined, using default \n
- Compression: None" 0 0
- localzip=None
- fi
- $DIALOG --backtitle "$backtitle" \
- --title "RESTORE" \
- --radiolist "Choose Drive or Partition to restore\n\
- Select from:" 0 0 0 \
- $partlist 2> $tempfilelocalrest
- retvallocalrest=$?
- choicelocalrest=`cat $tempfilelocalrest`
- case $retvallocalrest in
- $DIALOG_OK)
- localrest=/dev/$choicelocalrest
- $DIALOG --backtitle "$backtitle" \
- --title "ABOUT TO RESTORE" --clear \
- --yesno "Collected information: \
- \nTarget drive in /mnt/local: $localdrive \
- \nFilename for image: $localimagename \
- \nSplitting: $localsplit \
- \nCompression: $localzip \
- \nTarget drive: $localrest \
- \n\nAre you sure?" 0 0
- case $? in
- $DIALOG_OK)
- localwritesize=`cat /proc/partitions |grep -w $choicelocalrest |awk '{print $3}' `
- pcnt=0
- if [ "$localzip" = "None" ] ; then
- if [ "$localsplit" = "Off" ] ; then
- (dd if=/mnt/local/$localimagename 2>/dev/null |jetcat-mod -p $localwritesize 2>/tmp/localrest.out |dd of=$localrest 2>/dev/null) &
- (
- while test "$pcnt" != "100"
- do
- pcnt=`tail -n1 /tmp/localrest.out`
- echo "XXX"
- echo $pcnt
- echo "\n"
- echo "g4l is restoring your harddrive locally.\n"
- echo "\n"
- echo "The progress bar will be inaccurate if you restore\n"
- echo "backups from small drives to large drives.\n\n"
- echo "Every single bit of the drive is written, so:\n\n"
- echo "Please stand by, this might take some time!\n"
- echo "XXX"
- sleep 3
- done
- ) | $DIALOG --backtitle "$backtitle" \
- --title "Working..." \
- --gauge "One moment..." 18 60
- rm /tmp/localrest.out
- touch /tmp/localrest.out
- fi
- if [ "$localsplit" = "On" ] ; then
- (cat /mnt/local/$localimagename.* |jetcat-mod -p $localwritesize 2>/tmp/localrest.out |dd of=$localrest 2>/dev/null) &
- (
- while test "$pcnt" != "100"
- do
- pcnt=`tail -n1 /tmp/localrest.out`
- echo "XXX"
- echo $pcnt
- echo "\n"
- echo "g4l is restoring your harddrive locally.\n"
- echo "\n"
- echo "The progress bar will be inaccurate if you restore\n"
- echo "backups from small drives to large drives.\n\n"
- echo "Every single bit of the drive is written, so:\n\n"
- echo "Please stand by, this might take some time!\n"
- echo "XXX"
- sleep 3
- done
- ) | $DIALOG --backtitle "$backtitle" \
- --title "Working..." \
- --gauge "One moment..." 18 60
- rm /tmp/localrest.out
- touch /tmp/localrest.out
- fi
- fi
- if [ "$localzip" = "GZip" ] ; then
- if [ "$localsplit" = "Off" ] ; then
- (dd if=/mnt/local/$localimagename 2>/dev/null |gunzip -c - |jetcat-mod -p $localwritesize 2>/tmp/localrest.out |dd of=$localrest 2>/dev/null) &
- (
- while test "$pcnt" != "100"
- do
- pcnt=`tail -n1 /tmp/localrest.out`
- echo "XXX"
- echo $pcnt
- echo "\n"
- echo "g4l is restoring your harddrive locally.\n"
- echo "\n"
- echo "The progress bar will be inaccurate if you restore\n"
- echo "backups from small drives to large drives.\n\n"
- echo "Every single bit of the drive is written, so:\n\n"
- echo "Please stand by, this might take some time!\n"
- echo "XXX"
- sleep 3
- done
- ) | $DIALOG --backtitle "$backtitle" \
- --title "Working..." \
- --gauge "One moment..." 18 60
- rm /tmp/localrest.out
- touch /tmp/localrest.out
- fi
- if [ "$localsplit" = "On" ] ; then
- (cat /mnt/local/$localimagename.* |gunzip -c - |jetcat-mod -p $localwritesize 2>/tmp/localrest.out |dd of=$localrest 2>/dev/null) &
- (
- while test "$pcnt" != "100"
- do
- pcnt=`tail -n1 /tmp/localrest.out`
- echo "XXX"
- echo $pcnt
- echo "\n"
- echo "g4l is restoring your harddrive locally.\n"
- echo "\n"
- echo "The progress bar will be inaccurate if you restore\n"
- echo "backups from small drives to large drives.\n\n"
- echo "Every single bit of the drive is written, so:\n\n"
- echo "Please stand by, this might take some time!\n"
- echo "XXX"
- sleep 3
- done
- ) | $DIALOG --backtitle "$backtitle" \
- --title "Working..." \
- --gauge "One moment..." 18 60
- rm /tmp/localrest.out
- touch /tmp/localrest.out
- fi
- fi
- if [ "$localzip" = "BZip2" ] ; then
- if [ "$localsplit" = "Off" ] ; then
- (dd if=/mnt/local/$localimagename 2>/dev/null |bzcat |jetcat-mod -p $localwritesize 2>/tmp/localrest.out |dd of=$localrest 2>/dev/null) &
- (
- while test "$pcnt" != "100"
- do
- pcnt=`tail -n1 /tmp/localrest.out`
- echo "XXX"
- echo $pcnt
- echo "\n"
- echo "g4l is restoring your harddrive locally.\n"
- echo "\n"
- echo "The progress bar will be inaccurate if you restore\n"
- echo "backups from small drives to large drives.\n\n"
- echo "Every single bit of the drive is written, so:\n\n"
- echo "Please stand by, this might take some time!\n"
- echo "XXX"
- sleep 3
- done
- ) | $DIALOG --backtitle "$backtitle" \
- --title "Working..." \
- --gauge "One moment..." 18 60
- rm /tmp/localrest.out
- touch /tmp/localrest.out
- fi
- if [ "$localsplit" = "On" ] ; then
- (bzcat /mnt/local/$localimagename.* |jetcat-mod -p $localwritesize 2>/tmp/localrest.out | dd of=$localrest 2>/dev/null) &
- (
- while test "$pcnt" != "100"
- do
- pcnt=`tail -n1 /tmp/localrest.out`
- echo "XXX"
- echo $pcnt
- echo "\n"
- echo "g4l is restoring your harddrive locally.\n"
- echo "\n"
- echo "The progress bar will be inaccurate if you restore\n"
- echo "backups from small drives to large drives.\n\n"
- echo "Every single bit of the drive is written, so:\n\n"
- echo "Please stand by, this might take some time!\n"
- echo "XXX"
- sleep 3
- done
- ) | $DIALOG --backtitle "$backtitle" \
- --title "Working..." \
- --gauge "One moment..." 18 60
- rm /tmp/localrest.out
- touch /tmp/localrest.out
- fi
- fi
- umount /mnt/local
- rm /tmp/out
- touch /tmp/out
- ;;
- $DIALOG_CANCEL)
- ;;
- $DIALOG_ESC)
- ;;
- esac
- ;;
- esac
- ;;
- esac
- ;;
- $DIALOG_CANCEL)
- ;;
- $DIALOG_ESC)
- ;;
- esac
- done
- ;;
- "Click'n'Clone")
- while [ "$retvalclonemenu" != "1" ]
- do
- $DIALOG --clear --backtitle "$backtitle" \
- --title "CLICK'n'CLONE" \
- --menu "Choose one of the following options: \n\n" 0 0 0 \
- "Select source" "Select source drive" \
- "Select target" "Select target drive" \
- "Click'n'Clone" "Clone the drive now!" 2> $tempfileclonemenu
- retvalclonemenu=$?
- choiceclonemenu=`cat $tempfileclonemenu`
- case $retvalclonemenu in
- $DIALOG_OK)
- case $choiceclonemenu in
- "Select source")
- $DIALOG --backtitle "$backtitle" \
- --title "SELECT SOURCE" \
- --radiolist "Choose source drive to clone.\n\
- Select from:" 0 0 0 \
- $partlist 2> $tempfileclonesource
- retvalclonesource=$?
- choiceclonesource=`cat $tempfileclonesource`
- case $retvalclonesource in
- $DIALOG_OK)
- clonesource=/dev/$choiceclonesource
- ;;
- $DIALOG_CANCEL)
- ;;
- $DIALOG_ESC)
- ;;
- esac
- ;;
- "Select target")
- $DIALOG --backtitle "$backtitle" \
- --title "SELECT TARGET" \
- --radiolist "Choose target drive to clone to.\n\
- Attention: Select a drive with at least\n\
- the same capacity. Higher capacity is OK.\n\
- Select from:" 0 0 0 \
- $partlist 2> $tempfileclonetarget
- retvalclonetarget=$?
- choiceclonetarget=`cat $tempfileclonetarget`
- case $retvalclonetarget in
- $DIALOG_OK)
- clonetarget=/dev/$choiceclonetarget
- ;;
- $DIALOG_CANCEL)
- ;;
- $DIALOG_ESC)
- ;;
- esac
- ;;
- "Click'n'Clone")
- if [ "$clonesource" = "" ] ; then
- $DIALOG --backtitle "$backtitle" \
- --title "ERROR" --clear \
- --msgbox "No source drive for cloning set! \n
- ->Back to Main Menu." 0 0
- continue
- fi
- if [ "$clonetarget" = "" ] ; then
- $DIALOG --backtitle "$backtitle" \
- --title "ERROR" --clear \
- --msgbox "No target drive for cloning set! \n
- ->Back to Main Menu." 0 0
- continue
- fi
- $DIALOG --backtitle "$backtitle" \
- --title "ABOUT TO CLONE" --clear \
- --yesno "Collected information: \
- \nSource drive: $clonesource \
- \nTarget drive: $clonetarget \
- \n\nAre you sure?" 0 0
- case $? in
- $DIALOG_OK)
- clonesize=`cat /proc/partitions |grep -w $choiceclonesource |awk '{print $3}' `
- pcnt=0
- dd if=$clonesource 2>/dev/null |jetcat-mod -p $clonesize 2>/tmp/clone.out |dd of=$clonetarget 2>/dev/null &
- (
- while test "$pcnt" != "100"
- do
- pcnt=`tail -n1 /tmp/clone.out`
- echo "XXX"
- echo $pcnt
- echo "\n"
- echo "g4l is cloning your harddrive.\n"
- echo "\n"
- echo "Every single bit of the drive is written, so:\n\n"
- echo "Please stand by, this might take some time!\n"
- echo "XXX"
- sleep 3
- done
- ) | $DIALOG --backtitle "$backtitle" \
- --title "Working..." \
- --gauge "One moment..." 18 60
- rm /tmp/clone.out
- touch /tmp/clone.out
- rm /tmp/out
- touch /tmp/out
- ;;
- $DIALOG_CANCEL)
- ;;
- $DIALOG_ESC)
- ;;
- esac
- ;;
- esac
- ;;
- $DIALOG_CANCEL)
- ;;
- $DIALOG_ESC)
- ;;
- esac
- done
- ;;
- $DIALOG_CANCEL)
- ;;
- $DIALOG_ESC)
- ;;
- esac
- ;;
- $DIALOG_ESC)
- ;;
- esac
- done
- ;;
- "File Mode")
- while [ "$retvalfilemenu" != "1" ]
- do
- $DIALOG --clear --backtitle "$backtitle" \
- --title "FILE MODE" \
- --menu "Choose one of the following options: \n\n" 0 0 0 \
- "Pick device" "Select ethernet device (client/server mode only)" \
- "Config device" "Set IP address (client/server mode only)" \
- "Select partition" "Select partition to mount (server/local mode only)" \
- "Launch client" "Launch 'partimage' in client/local mode" \
- "Launch server" "Launch 'partimage' in server mode" 2> $tempfilefilemenu
- retvalfilemenu=$?
- choicefilemenu=`cat $tempfilefilemenu`
- case $retvalfilemenu in
- $DIALOG_OK)
- case $choicefilemenu in
- "Pick device")
- $DIALOG --backtitle "$backtitle" \
- --title "PICK DEVICE" \
- --radiolist "Choose network device \n\
- Select from:" 0 0 0 \
- $netlist 2> $tempfilefiledevice
- retvalfiledevice=$?
- choicefiledevice=`cat $tempfilefiledevice`
- case $retvalfiledevice in
- $DIALOG_OK)
- filedevice=$choicefiledevice
- ;;
- $DIALOG_CANCEL)
- ;;
- $DIALOG_ESC)
- ;;
- esac
- ;;
- "Config device")
- $DIALOG --backtitle "$backtitle" \
- --title "CONFIG DEVICE" --clear \
- --inputbox "Set IP Address to match your subnet. \
- \nExample: 192.168.0.5 \
- \n\nEnter IP Address:" 0 0 2> $tempfilefileip
- retvalfileip=$?
- case $retvalfileip in
- $DIALOG_OK)
- fileipaddress=`cat $tempfilefileip`
- /sbin/ifconfig $filedevice $fileipaddress up
- ;;
- $DIALOG_CANCEL)
- ;;
- $DIALOG_ESC)
- if test -s $tempfilefileip ; then
- fileipaddress=`cat $tempfilefileip`
- /sbin/ifconfig $filedevice $fileipaddress up
- fi
- ;;
- esac
- ;;
- "Select partition")
- $DIALOG --backtitle "$backtitle" \
- --title "SELECT PARTITION" \
- --radiolist "Choose drive to mount.\
- \nThe selected drive will be mounted to /mnt/local
- \nand partimage may write to this directory.\n
- \nSupported FS are:\n\
- ext2 - Linux\n\
- ext3 - Linux\n\
- reiserfs - Linux\n\
- fat32 - Windows95/98/NT/2k/XP\n\
- ntfs - Windows NT/2k/XP\n\
- JFS and XFS\
- \n\nSelect partition(!) (example: /dev/hda1):" 0 0 0 \
- $partlist 2> $tempfilefilepart
- retvalfilepart=$?
- choicefilepart=`cat $tempfilefilepart`
- case $retvalfilepart in
- $DIALOG_OK)
- filepart=$choicefilepart
- mount /dev/$filepart /mnt/local >/tmp/filemount 2>&1
- retvalfilemount=$?
- if [ $retvalfilemount != 0 ] ; then
- $DIALOG --backtitle "$backtitle" \
- --title "ERROR" \
- --textbox /tmp/filemount 0 0
- filepart=""
- umount /mnt/local
- else
- $DIALOG --backtitle "$backtitle" \
- --title "STATUS" \
- --msgbox "Partition mounted in /mnt/local. \
- \nYou can now launch partimage to create or restore an image.\
- \nAs target file enter a filename in /mnt/local/, \
- \nfor example: /mnt/local/backup_hda1.img.gz \
- \n\n \
- \nYou can also launch partimage in network mode." 10 50
- fi
- ;;
- $DIALOG_CANCEL)
- ;;
- $DIALOG_ESC)
- ;;
- esac
- ;;
- "Launch client")
- clear
- partimage -f3
- umount /mnt/local
- ;;
- "Launch server")
- $DIALOG --backtitle "$backtitle" \
- --title "INFO" \
- --msgbox "'partimage' server will be launched now. \
- \nAfter it started, remove the CD and use it \
- \nto launch the 'partimage' client on another machine." 10 50
- clear
- partimaged
- umount /mnt/local
- esac
- ;;
- esac
- done
- ;;
- "Utilities")
- while [ "$retvalutilmenu" != "1" ]
- do
- $DIALOG --clear --backtitle "$backtitle" \
- --title "UTILITIES" \
- --menu "Choose one of the following options: \n\n" 0 0 0 \
- "System info" "Show drives, partitions and models" \
- "hdparm" "Set 32-bit I/O and UDMA66 (NEW hardware only!)" \
- "Zero-Tool" "Zero-out free space on a partition" \
- "dd_rescue" "Rescue defective drive and clone to new one" \
- "Parted" "Launch 'parted' partition manager (EXPERT USE!)" 2> $tempfileutilmenu
- retvalutilmenu=$?
- choiceutilmenu=`cat $tempfileutilmenu`
- case $retvalutilmenu in
- $DIALOG_OK)
- case $choiceutilmenu in
- "System info")
- $DIALOG --backtitle "$backtitle" \
- --title "SYSTEM INFO" \
- --textbox /tmp/sysinfo 20 35
- ;;
- "hdparm")
- $DIALOG --backtitle "$backtitle" \
- --title "WARNING" --clear \
- --yesno "This option tries to enable 32-bit I/O mode \
- \nand UDMA/66 mode on your IDE Controller and drive. \
- \n \
- \nThe system might hang and require a reboot! \
- \nUse this option only on quite new computers! \
- \n \
- \nContinue at own risk?" 0 0
- case $? in
- $DIALOG_OK)
- $DIALOG --backtitle "$backtitle" \
- --title "HDPARM" \
- --radiolist "Choose drive(!) to enable.\
- \n\nExample: /dev/hda" 0 0 0 $partlist 2> $tempfilehdparm
- retvalhdparm=$?
- choicehdparm=`cat $tempfilehdparm`
- case $retvalhdparm in
- $DIALOG_OK)
- hdparmdrive=/dev/$choicehdparm
- hdparm -c3 -X66 $hdparmdrive >/tmp/hdparmout
- $DIALOG --backtitle "$backtitle" \
- --title "HDPARM OUTPUT" \
- --textbox /tmp/hdparmout 0 0
- ;;
- $DIALOG_CANCEL)
- ;;
- $DIALOG_ESC)
- ;;
- esac
- ;;
- $DIALOG_CANCEL)
- ;;
- $DIALOG_ESC)
- ;;
- esac
- ;;
- "Zero-Tool")
- $DIALOG --backtitle "$backtitle" \
- --title "ZERO-TOOL" \
- --radiolist "Choose drive to zero-out.\
- \nSupported FS are:\n\
- ext2 - Linux\n\
- ext3 - Linux\n\
- reiserfs - Linux\n\
- fat32 - Windows95/98/NT/2k/XP\n\
- ntfs - Windows NT/2k/XP\
- \n\nSelect partition (example: /dev/hda1):" 0 0 0 \
- $partlist 2> $tempfileutilzero
- retvalutilzero=$?
- choiceutilzero=`cat $tempfileutilzero`
- case $retvalutilzero in
- $DIALOG_OK)
- zerodrive=$choiceutilzero
- mount /dev/$zerodrive /mnt/local >/tmp/zeromount 2>&1
- retvalzeromount=$?
- if [ $retvalzeromount != 0 ] ; then
- $DIALOG --backtitle "$backtitle" \
- --title "ERROR" \
- --textbox /tmp/zeromount 0 0
- zerodrive=""
- umount /mnt/local
- else
- freesize=`df |grep -w $zerodrive |awk '{print $4}'`
- pcnt=0
- (dd if=/dev/zero 2>/dev/null |jetcat-mod -p $freesize 2>/tmp/zero.out |split -b 2000m - /mnt/local/zerofile. 2>/dev/null ) &
- (
- while test "$pcnt" != "100"
- do
- pcnt=`tail -n1 /tmp/zero.out`
- echo "XXX"
- echo $pcnt
- echo "\n"
- echo "Zero-Tool is creating 2GB large files containing\n"
- echo "only zeros. If the harddrive is full, the files will\n"
- echo "be deleted and the drive will be unmount.\n"
- echo "This allows a very good compression of the unused\n"
- echo "space between your files.\n\n"
- echo "Please stand by, this might take some time!\n"
- echo "XXX"
- sleep 3
- done
- ) | $DIALOG --backtitle "$backtitle" \
- --title "Working..." \
- --gauge "One moment..." 18 60
- fi
- rm /mnt/local/zerofile.*
- umount /mnt/local
- rm /tmp/zero.out
- touch /tmp/zero.out
- ;;
- $DIALOG_CANCEL)
- ;;
- $DIALOG_ESC)
- ;;
- esac
- ;;
- "dd_rescue")
- while [ "$retvalddres" != "1" ]
- do
- $DIALOG --clear --backtitle "$backtitle" \
- --title "DD_RECSCUE" \
- --menu "Choose one of the following options: \n\n" 0 0 0 \
- "Select source" "Select (defective) source drive" \
- "Select target" "Select (new/clean) target drive" \
- "Rescue" "Rescue the drive now!" 2> $tempfileddres
- retvalddres=$?
- choiceddres=`cat $tempfileddres`
- case $retvalddres in
- $DIALOG_OK)
- case $choiceddres in
- "Select source")
- $DIALOG --backtitle "$backtitle" \
- --title "SELECT SOURCE" \
- --radiolist "Choose (defective) source drive to clone.\n\
- Select from:" 0 0 0 \
- $partlist 2> $tempfileddressource
- retvalddressource=$?
- choiceddressource=`cat $tempfileddressource`
- case $retvalddressource in
- $DIALOG_OK)
- ddressource=/dev/$choiceddressource
- ;;
- $DIALOG_CANCEL)
- ;;
- $DIALOG_ESC)
- ;;
- esac
- ;;
- "Select target")
- $DIALOG --backtitle "$backtitle" \
- --title "SELECT TARGET" \
- --radiolist "Choose (new/clean) target drive to clone to.\n\
- Attention: Select a drive with at least\n\
- the same capacity. Higher capacity is OK.\n\
- Select from:" 0 0 0 \
- $partlist 2> $tempfileddrestarget
- retvalddrestarget=$?
- choiceddrestarget=`cat $tempfileddrestarget`
- case $retvalddrestarget in
- $DIALOG_OK)
- ddrestarget=/dev/$choiceddrestarget
- ;;
- $DIALOG_CANCEL)
- ;;
- $DIALOG_ESC)
- ;;
- esac
- ;;
- "Rescue")
- if [ "$ddressource" = "" ] ; then
- $DIALOG --backtitle "$backtitle" \
- --title "ERROR" --clear \
- --msgbox "No source drive to rescue set! \n
- ->Back to Main Menu." 0 0
- continue
- fi
- if [ "$ddrestarget" = "" ] ; then
- $DIALOG --backtitle "$backtitle" \
- --title "ERROR" --clear \
- --msgbox "No target drive for rescue set! \n
- ->Back to Main Menu." 0 0
- continue
- fi
- $DIALOG --backtitle "$backtitle" \
- --title "ABOUT TO RESCUE" --clear \
- --yesno "Collected information: \
- \nDefective source drive: $ddressource \
- \nNew/Clean target drive: $ddrestarget \
- \n\
- \nIt might take VERY long to rescue the drive, \
- \nbut as long as you do NOT reboot, you can press \
- \nCTRL-C at any time and dd_rhelp will continue \
- \nfrom the same position it stopped if you re-enter \
- \nthis menu. If dd_rhelp is almost done and is only \
- \ntrying to read the defective sectors, it is OK to CTRL-C. \
- \n\
- \n\nAre you sure?" 0 0
- case $? in
- $DIALOG_OK)
- clear
- dd_rhelp $ddressource $ddrestarget
- ;;
- $DIALOG_CANCEL)
- ;;
- $DIALOG_ESC)
- ;;
- esac
- ;;
- esac
- ;;
- $DIALOG_CANCEL)
- ;;
- $DIALOG_ESC)
- ;;
- esac
- done
- ;;
- "Parted")
- clear
- parted
- ;;
- esac
- ;;
- $DIALOG_CANCEL)
- ;;
- $DIALOG_ESC)
- ;;
- esac
- done
- ;;
- "Show Help")
- $DIALOG --clear --backtitle "$backtitle" \
- --title "HELP" \
- --textbox ./help 20 70
- ;;
- esac
- ;;
- $DIALOG_CANCEL)
- echo "Thanks for using g4l. visit $website"
- rm /tmp/*
- touch /tmp/out
- touch /tmp/zeroout
- ;;
- $DIALOG_ESC)
- echo "ESC pressed."
- ;;
- esac
- done
- ;;
- $DIALOG_CANCEL)
- exit 0
- ;;
- $DIALOG_ESC)
- exit 0
- ;;
- esac
复制代码 |
|