Advertising
- belt16ag
- Tuesday, November 18th, 2008 at 6:27:31pm UTC
- #Written by Manuel Iglesias. [email protected]
- #Notes:
- SystemDirectory=/sbin
- # This file should be copied (by CopySystemFiles) to its corresponding Directory (see above).
- # Exit codes at the end of this file.
- CommandName=`basename $0`
- #########################################################
- # BACKUP SETUP. BEGIN. Read Dar Doc before modification.
- #########################################################
- # Permissions.
- ##################
- # Allow use only in run level 1.
- CheckRunLevel=false
- #
- # Allow use only by root (Super user).
- CheckUser=true
- #
- #########################################################
- # Paths and files.
- ##################
- # Directories.
- #########
- # Backup files Directory: Absolute path (Should start with '/'!!). Don't end it with '/' unless it is '/'.
- DestinationDir=/media/Backup/gabriel/daily
- #
- # Origin of Backup/Restore Directory: Absolute path (Should start with '/'!!).
- # Don't end it with '/' unless it is '/'.
- OriginDir=/
- #
- # Directories to backup. Relative to Origin of Backup Dir! Empty means: all dirs
- # (Except those in Directories to ignore. See below.). Separate with spaces.
- SubDirsToBackup="home"
- #
- # Directories to ignore. Relative to Origin of Backup Dir! Separate with spaces.
- SubDirsToIgnore=" */.Trash* .Trash*\
- */.mozilla/*/[Cc]ache */.opera/[Cc]ache* */.pan/*/[Cc]ache */.thumbnails */.VirtualBox */vbox */.sheep */.mcop */backgrounds"
- #
- # DestinationDir will be automatically included in SubDirsToIgnore if DestinationDir is a subdirectory
- # of OriginDir. If you want to include the base (IE.: Temp if DestinationDir: OriginDir/Temp/Backup) of
- # DestinationDir instead, set constant IgnoreBaseOfDestinationDir to true. Value (true | false).
- IgnoreBaseOfDestinationDir=true
- #
- # File systems that should be mounted for a correct backup. If any of them has to be mounted,
- # it will be umounted before this shellscript exits. Please mind mounting order!!
- # Absolute path (Should start with '/'!!). Separate with spaces.
- DirsToMount=""
- #
- ##################
- # Files.
- #########
- # Files to backup. Empty: all files (Except those in Files to ignore. See below.).
- # No Path. Separate with spaces.
- FilesToBackup=""
- #
- # Files that should not be included in backup. No Path. Separate with spaces.
- FilesToIgnore="*~ .*~ cryptfile0.crypt cryptfile1.crypt"
- #
- # Files that should not to be compressed. No Path. Separate with spaces.
- FilesNotToCompress="*.dar *.crypt *.arj *.bz2 *.bz *.Z *.tgz *.taz *.cpio *.deb\
- *.gtar *.gz *.lzh *.lhz *.rar *.rpm *.shar *.sv4cpi *.sv4crc *.tar *.ustar *.zoo\
- *.zip *.jar *.jpg *.gif *.mpg *.mpeg *.avi *.ram *.rm"
- #
- #########################################################
- # Parameters used to choose Differential Backup level.
- ##################
- BlockSize=1024
- #
- # When Diffbackup > (MaxDiffPercentOfFullBackup% of FullBackup): New FullBackup recommended.
- MaxDiffPercentOfFullBackup=30
- #
- # When Diffbackup < (MinDiffPercentOfFullBackup% of FullBackup): Rewrite first DiffBackup recommended.
- MinDiffPercentOfFullBackup=3
- #
- # Max 99. If (Nr of DiffBackups) > MaxNrOfDiffBackups: Rewrite first DiffBackup recommended.
- MaxNrOfDiffBackups=20
- #
- #########################################################
- # Dar settings and options.
- ##################
- #Used dar suite program names.
- DarManagerName=dar_manager
- DarName=dar
- #
- # Directory where dar usually resides. Absolute path (Should start with '/'!!). Don't end it with '/'.
- DarDir=/usr/local/bin
- #
- # Create empty sub-directories in backup instead of those not saved. Value (true | false).
- BackupIgnoredDirsEmpty=true
- #
- # CompressWithBZip2=false -> no compression. Value (true | false).
- CompressWithBZip2=true
- #
- # Compress Files > 100Mb. Only valid if CompressWithBZip2=true. Value (true | false).
- CompressBigFiles=true
- #
- # Value (true | false).
- VerboseMode=true
- #
- # Value (true | false).
- MakeSlices=true
- #
- # StopAfterSlices: Only valid if MakeSlices=true. Value (true | false).
- StopAfterSlices=false
- #
- # SizeOfDarStatic: dar_static + DocFiles + Restore shell + etc (To calculate first slize size).
- SizeOfDarStatic=4
- #
- SliceSize=4000
- #
- #########################################################
- # BACKUP SETUP. END. Read Dar Doc before modification.
- #########################################################
- #########################################################
- # SUBROUTINES. BEGIN.
- #########################################################
- echoE()
- {
- # echo to standard error. Remove leading/trailing blanks and double spaces.
- echo $* 1>&2
- return 0
- }
- Usage()
- {
- echoE "$CommandName creates (Using '$DarName'), in directory"
- echoE "'$DestinationDir',"
- echoE "a backup of all files and directories in"
- echoE "'$OriginDir'."
- echoE "It analyzes current backup files and recommends the most suitable new"
- echoE "backup level to the user. It also creates/updates a database with backup"
- echoE "information for future Backup management (Using '$DarManagerName')."
- echoE
- echoE "The backup will be split in files of $SliceSize Mb to fit in removable media."
- echoE
- echoE "Usage: $CommandName. (User can choose backup level)."
- echoE "or"
- echoE "Usage: $CommandName -auto. ($CommandName selects backup level automatically)."
- echoE
- return 0
- }
- UmountDirs ()
- {
- if [ "$DirsToUMount" != "" ]
- then
- echo "############"
- echo "$CommandName: Unmounting file systems:"
- for i in $DirsToUMount
- do
- mount | grep -w $i &> /dev/null
- if [ $? -eq 0 ]
- then
- if (umount $i &> /dev/null)
- then
- echo "$CommandName: $i unmounted."
- else
- echoE "$CommandName: $i could not be unmounted."
- fi
- else
- echo "$CommandName: $i was already unmounted."
- fi
- done
- fi
- echo "############"
- return 0
- }
- TwoDigits ()
- {
- #Add leftmost 0
- if [ $1 -lt 10 ]
- then
- echo 0$1
- else
- echo $1
- fi
- return 0
- }
- Stream()
- {
- # Output String(s) without letting the Shell interpret metacharacters.
- # Remove leading/trailing blanks and double spaces.
- # Enclose arguments in "" when calling. I.E.: Stream "$Var1 $Var2"
- Length=${#TempStr}
- if [ $Length -eq 0 ]
- then
- return
- else
- CharNum=0
- while [ $CharNum -lt $Length ]
- do
- echo -n "${TempStr:$CharNum:1}"
- let CharNum++
- done
- echo
- fi
- return
- }
- #########################################################
- # SUBROUTINES. END.
- #########################################################
- NoUserChoice=false
- if [ $# -ne 0 ]
- then
- if [ "$1" == "-auto" ]
- then
- NoUserChoice=true
- else
- Usage
- exit 1
- fi
- fi
- if $CheckRunLevel
- then
- RunLevel=`runlevel | sed 's/.* //'`
- if [ $RunLevel != S ]
- then
- echoE "$CommandName: RunLevel: $RunLevel. Please change to RunLevel 1 (init 1) and try again."
- exit 1
- fi
- fi
- if $CheckUser
- then
- CurrentUser=`whoami`
- if [ "$CurrentUser" != "root" ]
- then
- echoE "$CommandName: User: '$CurrentUser'. Please login as 'root' and try again."
- exit 1
- fi
- fi
- echo "############"
- DirsToUMount=""
- if [ "$DirsToMount" != "" ]
- then
- echo "$CommandName: Mounting file systems:"
- for i in $DirsToMount
- do
- mount | grep -w $i &> /dev/null
- if [ $? -ne 0 ]
- then
- if (mount $i &> /dev/null)
- then
- echo "$CommandName: $i mounted."
- DirsToUMount=" $i"$DirsToUMount
- else
- echoE "$CommandName: $i could not be mounted. Aborting."
- UmountDirs
- exit 2
- fi
- else
- echo "$CommandName: $i was already mounted."
- fi
- done
- echo "############"
- fi
- if [ "$OriginDir" != "/" ]
- then
- # if first character is not '/'.
- if [ "${OriginDir:0:1}" != "/" ]
- then
- echoE "$CommandName: 'Origin' directory:"
- echoE "$CommandName: $OriginDir."
- echoE "$CommandName: Must be an absolute path (Should start with '/'!)."
- echoE "$CommandName: Please edit '$CommandName' and try again."
- UmountDirs
- exit 3
- else
- # if last character is '/'.
- if [ "${OriginDir:${#OriginDir}-1:1}" == "/" ]
- then
- echoE "$CommandName: 'Origin' directory:"
- echoE "$CommandName: $OriginDir."
- echoE "$CommandName: Should not end with '/'!."
- echoE "$CommandName: Please edit '$CommandName' and try again."
- UmountDirs
- exit 3
- else
- if test ! -d $OriginDir
- then
- echoE "$CommandName: 'Origin' directory:"
- echoE "$CommandName: $OriginDir."
- echoE "$CommandName: Does not exist. Please edit '$CommandName' and try again."
- UmountDirs
- exit 3
- fi
- fi
- fi
- fi
- if [ "$DestinationDir" != "/" ]
- then
- # if first character is not '/'.
- if [ "${DestinationDir:0:1}" != "/" ]
- then
- echoE "$CommandName: 'DestinationDir' directory:"
- echoE "$CommandName: $DestinationDir."
- echoE "$CommandName: Must be an absolute path (Should start with '/'!)."
- echoE "$CommandName: Please edit '$CommandName' and try again."
- UmountDirs
- exit 3
- else
- # if last character is '/'.
- if [ "${DestinationDir:${#DestinationDir}-1:1}" == "/" ]
- then
- echoE "$CommandName: 'DestinationDir' directory:"
- echoE "$CommandName: $DestinationDir."
- echoE "$CommandName: Should not end with '/'!."
- echoE "$CommandName: Please edit '$CommandName' and try again."
- UmountDirs
- exit 3
- else
- if test ! -d $DestinationDir
- then
- echoE "$CommandName: 'DestinationDir' directory:"
- echoE "$CommandName: $DestinationDir."
- echoE "$CommandName: Does not exist. Please edit '$CommandName' and try again."
- UmountDirs
- exit 3
- fi
- fi
- fi
- fi
- if [ $OriginDir == $DestinationDir ]
- then
- echoE "$CommandName: 'DestinationDir' and 'OriginDir' can not be the same directory!"
- echoE "$CommandName: Please edit '$CommandName' and try again."
- UmountDirs
- exit 3
- fi
- # Find dar & dar_manager
- if type >/dev/null 2>&1 $DarName
- then
- DarFound=true
- else
- DarFound=false
- fi
- if type >/dev/null 2>&1 $DarManagerName
- then
- DarManagerFound=true
- else
- DarManagerFound=false
- fi
- if ! ($DarFound && $DarManagerFound)
- then
- if [ "$DarDir" != "/" ]
- then
- # if first character is not '/'.
- if [ "${DarDir:0:1}" != "/" ]
- then
- echoE "$CommandName: 'DarDir' directory:"
- echoE "$CommandName: $DarDir."
- echoE "$CommandName: Must be an absolute path (Should start with '/'!)."
- echoE "$CommandName: Please edit '$CommandName' and try again."
- UmountDirs
- exit 3
- else
- # if last character is '/'.
- if [ "${DarDir:${#DarDir}-1:1}" == "/" ]
- then
- echoE "$CommandName: 'DarDir' directory:"
- echoE "$CommandName: $DarDir."
- echoE "$CommandName: Should not end with '/'!."
- echoE "$CommandName: Please edit '$CommandName' and try again."
- UmountDirs
- exit 3
- else
- if test ! -d $DarDir
- then
- echoE "$CommandName: 'DarDir' directory:"
- echoE "$CommandName: $DarDir."
- echoE "$CommandName: Does not exist. Please edit '$CommandName' and try again."
- UmountDirs
- exit 3
- fi
- fi
- fi
- fi
- # Include directory, where dar usually resides, in PATH."
- # DarDir not in PATH?
- echo $PATH | grep $DarDir &> /dev/null
- if [ $? -ne 0 ]
- then
- PATH=$DarDir":"$PATH
- fi
- fi
- if ! type >/dev/null 2>&1 $DarName
- then
- echoE "$CommandName: $DarName neither in PATH nor in $DarDir. Aborting."
- UmountDirs
- exit 3
- fi
- if ! type >/dev/null 2>&1 $DarManagerName
- then
- echoE "$CommandName: $DarManagerName neither in PATH nor in $DarDir. Aborting."
- UmountDirs
- exit 3
- fi
- #########################################################
- # VARIABLES INITIALIZATION. BEGIN.
- #########################################################
- # Backup Paths.
- ###############
- #Backup base names & DataBase name.
- FullBackupBaseName=$CommandName"Full"
- DiffBackupBaseName=$CommandName"Diff"
- DataBaseName=$CommandName"DataBase"
- #
- FullBackupPath=$DestinationDir/$FullBackupBaseName
- DiffBackupPath=$DestinationDir/$DiffBackupBaseName
- DataBasePath=$DestinationDir/$DataBaseName
- #
- #########################################################
- # Set dar options.
- ###############
- # Backup base name (Will be set later): -c PathBackUpBaseName
- BackupNameOption="-c "
- #
- # Reference backup (Will be set later) for differential backups: -A PathBackUpBaseName
- ReferenceBackupOption="-A "
- #
- # Origin of Backup: -R /.
- DarOptions="-R "$OriginDir
- #
- # Compress data inside the backup using bzip2: -y[CompressLevel].
- # CompressLevel: 0 minimum; 9 maximun. Compress Files > 100Mb: -m 0.
- if $CompressWithBZip2
- then
- DarOptions=$DarOptions" -y9"
- if $CompressBigFiles
- then
- DarOptions=$DarOptions" -m 0"
- fi
- fi
- #
- # Verbose mode: -v
- if $VerboseMode
- then
- DarOptions=$DarOptions" -v"
- fi
- #
- # Create empty sub-directories in backup instead of those not saved: -D
- if $BackupIgnoredDirsEmpty
- then
- DarOptions=$DarOptions" -D"
- fi
- #
- # Do not read ~/.darrc nor /etc/darrc configuration file: -N
- DarOptions=$DarOptions" -N"
- #
- #########################################################
- #Set Slice options.
- ###############
- if [ $SliceSize -gt $SizeOfDarStatic ]
- then
- let FirstSliceSize=$SliceSize-$SizeOfDarStatic
- else
- FirstSliceSize=$SliceSize
- fi
- #
- # All sizes in Mb; Stop after each slize.
- if $MakeSlices
- then
- FirstSliceSizeOption="-S "$FirstSliceSize"M"
- SliceSizeOption="-s "$SliceSize"M"
- # Pause between slices to change removable media. Ring bell: -p -b
- if $StopAfterSlices
- then
- DarOptions=$DarOptions" -p -b"
- fi
- else
- FirstSliceSizeOption=""
- SliceSizeOption=""
- fi
- #
- #########################################################
- #Set Include/Exclude Files Options.
- ###############
- # Files you don't want to backup: -X "*~" -X ".*~"
- if [ "$FilesToIgnore" != "" ]
- then
- InclExclFilesOption='-X "'`Stream "$FilesToIgnore" | sed 's/ /" -X "/g'`'"'
- else
- InclExclFilesOption=""
- fi
- #
- # Files you want to backup without compression: -Z "*.zip"
- if $CompressWithBZip2
- then
- if [ "$FilesNotToCompress" != "" ]
- then
- InclExclFilesOption=$InclExclFilesOption' -Z "'`Stream "$FilesNotToCompress" | sed 's/ /" -Z "/g'`'"'
- fi
- fi
- #
- # Files to include in backup: -I "*.html".
- if [ "$FilesToBackup" != "" ]
- then
- InclExclFilesOption=' -I "'`Stream "$FilesToBackup" | sed 's/ /" -I "/g'`'" '$InclExclFilesOption
- fi
- #
- #########################################################
- #Set Include/Exclude directories Options.
- ###############
- # $OriginDir in $DestinationDir?
- echo $DestinationDir | grep $OriginDir &> /dev/null
- if [ $? -eq 0 ]
- then
- # TempDir= $DestinationDir-$OriginDir
- TempDir=`echo $DestinationDir | sed s%$OriginDir%%`
- if $IgnoreBaseOfDestinationDir
- then
- # Include BaseDir of DestinationDir (Without first '/') in SubDirsToIgnore.
- # if first character, in TempDir, is not '/'.
- if [ "${DestinationDir:0:1}" != "/" ]
- then
- # Add '/' in front.
- TempDir="/"$TempDir
- fi
- TempPath=$TempDir
- while [ $TempPath != `dirname $TempPath` ]
- do
- BasePath=$TempPath
- TempPath=`dirname $TempPath`
- done
- BasePath=`basename $BasePath`
- if [ "$SubDirsToIgnore" != "" ]
- then
- SubDirsToIgnore=$SubDirsToIgnore" $BasePath"
- else
- SubDirsToIgnore=$BasePath
- fi
- else
- # Include DestinationDir (Without first '/') in SubDirsToIgnore.
- # if first character, in TempDir, is '/'.
- if [ "${TempDir:0:1}" == "/" ]
- then
- # Remove first '/'.
- TempDir=${TempDir:1:${#TempDir}-1}
- fi
- if [ "$SubDirsToIgnore" != "" ]
- then
- SubDirsToIgnore=$SubDirsToIgnore" $TempDir"
- else
- SubDirsToIgnore=$TempDir
- fi
- fi
- fi
- #
- # Sub-trees you must not save: -P dev/pts -P proc. Path must be relative to -R option
- # Enclose each directory in "" just in case there are metacharacters in the name.
- if [ "$SubDirsToIgnore" != "" ]
- then
- IncludeExclDirsOption='-P "'`Stream "$SubDirsToIgnore" | sed 's/ /" -P "/g'`'"'
- else
- IncludeExclDirsOption=""
- fi
- #
- # Sub-trees you must save: Add without any option in front.
- # Enclose each directory in "" just in case there are metacharacters in the name.
- if [ "$SubDirsToBackup" != "" ]
- then
- IncludeExclDirsOption='-g"'`Stream "$SubDirsToBackup" | sed 's/ /" -g "/g'`'" '$IncludeExclDirsOption
- fi
- #
- #########################################################
- # Set dar_manager options.
- ###############
- # Create DataBase: -C PathBaseName
- CreateDataBaseOption="-C "$DataBasePath
- #
- # DataBase used as reference: -B PathBaseName
- DataBaseNameOption="-B "$DataBasePath
- #
- # Add Archive to DataBase (Will be set later): -A PathArchiveName
- AddToDataBaseOption="-A "
- #
- #########################################################
- # VARIABLES INITIALIZATION. END.
- #########################################################
- FullDiffBackupSize=`ls -1 -s --block-size=$BlockSize $FullBackupPath.* 2> /dev/null | awk '{s = s + $1}
- END {print s}'`
- if [ "$FullDiffBackupSize" == "" ]
- then
- FullDiffBackupSize=0
- fi
- TotalDiffBackupSize=`ls -1 -s --block-size=$BlockSize $DiffBackupPath??.* 2> /dev/null | awk '{s = s + $1}
- END {print s}'`
- if [ "$TotalDiffBackupSize" == "" ]
- then
- TotalDiffBackupSize=0
- fi
- echo "$CommandName: ### `date --rfc-822` ###"
- echo "$CommandName: Current backup information (Size in $BlockSize bytes blocks.):"
- if [ $FullDiffBackupSize -eq 0 ]
- then
- echo "$CommandName: No $FullBackupBaseName files found!"
- echo "############"
- echo "$CommandName: Preparing to Create $FullBackupBaseName."
- DiffBackupNr=0
- LastDiffBackup=$DiffBackupNr
- else
- echo "$CommandName: ..$FullBackupBaseName: $FullDiffBackupSize."
- if [ $TotalDiffBackupSize -eq 0 ]
- then
- DiffBackupNr=1
- LastDiffBackup=0
- BaseName=$DiffBackupBaseName`TwoDigits $DiffBackupNr`
- echo "############"
- echo "$CommandName: Preparing to Create $BaseName."
- else
- echo "$CommandName: ..$DiffBackupBaseName: $TotalDiffBackupSize:"
- DiffBackupNr=0
- LastDiffBackup=$DiffBackupNr
- BestChoiceDiffLevel=""
- RemainingDiffSize=$TotalDiffBackupSize
- CurrentSize=1
- while [ $CurrentSize -ne 0 ]
- do
- let DiffBackupNr++
- BaseName=$DiffBackupPath`TwoDigits $DiffBackupNr`
- CurrentSize=`ls -1 -s --block-size=$BlockSize $BaseName.* 2> /dev/null | awk '{s = s + $1}
- END {print s}'`
- if [ "$CurrentSize" == "" ]
- then
- CurrentSize=0
- fi
- if [ $CurrentSize -ne 0 ]
- then
- LastDiffBackup=$DiffBackupNr
- let RemainingDiffSize=$RemainingDiffSize-$CurrentSize
- if [ "$BestChoiceDiffLevel" == "" ] && [ $CurrentSize -lt $RemainingDiffSize ]
- then
- BestChoiceDiffLevel=$DiffBackupNr
- fi
- BaseName=$DiffBackupBaseName`TwoDigits $DiffBackupNr`
- echo "$CommandName: ....$BaseName: $CurrentSize."
- fi
- done
- echo "############"
- let NextDiffBackup=$LastDiffBackup+1
- if [ "$BestChoiceDiffLevel" == "" ]
- then
- BestChoiceDiffLevel=$NextDiffBackup
- fi
- Choice[4]="Exit $CommandName."
- let MinDiffBackupSize=$FullDiffBackupSize*$MinDiffPercentOfFullBackup/100
- if [ $TotalDiffBackupSize -lt $MinDiffBackupSize ]
- then
- BestChoiceDiffLevel=1
- Choice[1]=" ($DiffBackupBaseName<$MinDiffPercentOfFullBackup%$FullBackupBaseName)."
- fi
- if [ $LastDiffBackup -gt $MaxNrOfDiffBackups ]
- then
- BestChoiceDiffLevel=1
- Choice[1]=${Choice[1]}" (NrOfDiffBackups>$MaxNrOfDiffBackups)."
- fi
- BaseName=$DiffBackupBaseName`TwoDigits $BestChoiceDiffLevel`
- Choice[1]=" $BaseName."${Choice[1]}
- BaseName=$DiffBackupBaseName`TwoDigits $NextDiffBackup`
- Choice[2]="Create $BaseName. Faster."
- Choice[3]="Rewrite $FullBackupBaseName ($DiffBackupBaseName>$MaxDiffPercentOfFullBackup%$FullBackupBaseName). Recommended!"
- let MaxDiffBackupSize=$FullDiffBackupSize*$MaxDiffPercentOfFullBackup/100
- if [ $NextDiffBackup -eq $BestChoiceDiffLevel ]
- then
- if [ $TotalDiffBackupSize -gt $MaxDiffBackupSize ]
- then
- Choices="1 3"
- CreateRewriteMode="Create"
- Choice[1]=${Choice[1]}" Faster."
- else
- Choices=""
- fi
- else
- CreateRewriteMode="Rewrite"
- if [ $TotalDiffBackupSize -gt $MaxDiffBackupSize ]
- then
- Choices="1 2 3"
- else
- Choices="1 2"
- Choice[1]=${Choice[1]}" Recommended!"
- fi
- fi
- Choice[1]=$CreateRewriteMode${Choice[1]}
- if [ "$Choices" == "" ]
- then
- DiffBackupNr=$BestChoiceDiffLevel
- BaseName=$DiffBackupBaseName`TwoDigits $DiffBackupNr`
- echo "$CommandName: Preparing to Create $BaseName."
- else
- Choices=$Choices" 4"
- echo "$CommandName: Options:"
- ChoiceNr=1
- for i in $Choices
- do
- echo "$CommandName: $ChoiceNr.${Choice[$i]}"
- let ChoiceNr++
- done
- echo "############"
- if $NoUserChoice
- then
- echo $Choices | grep "3" &> /dev/null
- if [ $? -eq 0 ]
- then
- Choice=3
- else
- Choice=1
- fi
- else
- let ChoiceNr--
- ValidNumber=false
- until $ValidNumber
- do
- read -p "$CommandName: Please choose a number: " UserChoice
- case $UserChoice in
- [a-zA-Z-_.,]* | *[a-zA-Z-_.,] | *[a-zA-Z-_.,]*)
- echoE "$CommandName: No alpha characters allowed. Please try again.";;
- "") ;;
- *)
- ValidNumber=true;;
- esac
- if $ValidNumber
- then
- if [ $UserChoice -lt 1 ] || [ $UserChoice -gt $ChoiceNr ]
- then
- echoE "$CommandName: Allowed number range: 1..$ChoiceNr. Please try again."
- ValidNumber=false
- fi
- fi
- done
- ChoiceNr=0
- for i in $Choices
- do
- let ChoiceNr++
- if [ $ChoiceNr -eq $UserChoice ]
- then
- Choice=$i
- fi
- done
- echo "############"
- fi
- case $Choice in
- 1)
- DiffBackupNr=$BestChoiceDiffLevel
- BaseName=$DiffBackupBaseName`TwoDigits $DiffBackupNr`
- echo "$CommandName: Preparing to $CreateRewriteMode $BaseName.";;
- 2)
- DiffBackupNr=$NextDiffBackup
- BaseName=$DiffBackupBaseName`TwoDigits $DiffBackupNr`
- echo "$CommandName: Preparing to Create $BaseName.";;
- 3)
- echo "$CommandName: Preparing to Rewrite $FullBackupBaseName."
- DiffBackupNr=0;;
- 4)
- echoE "$CommandName: Program exits at user request."
- UmountDirs
- exit 4;;
- *)
- echoE "$CommandName:Warning: Incorrect choice: $Choice. Aborting."
- UmountDirs
- exit 5;;
- esac
- fi
- fi
- fi
- if [ $DiffBackupNr -eq 0 ]
- then
- FullBackup=true
- else
- FullBackup=false
- fi
- if $FullBackup
- then
- BackupNameOption=$BackupNameOption$FullBackupPath
- if [ $FullDiffBackupSize -ne 0 ]
- then
- echo "############"
- echo "$CommandName: Removing previous $FullBackupBaseName files."
- for i in $FullBackupPath.*
- do
- if test -f $i
- then
- if (rm $i)
- then
- echo "$CommandName: $i removed."
- else
- echoE "$CommandName:Warning: Failure to remove $i."
- fi
- fi
- done
- fi
- if [ $TotalDiffBackupSize -ne 0 ]
- then
- echo "############"
- echo "$CommandName: Removing previous $DiffBackupBaseName files."
- for i in $DiffBackupPath??.*
- do
- if test -f $i
- then
- if (rm $i)
- then
- echo "$CommandName: $i removed."
- else
- echoE "$CommandName:Warning: Failure to remove $i."
- fi
- fi
- done
- fi
- if test -f $DataBasePath
- then
- echo "############"
- echo "$CommandName: Removing previous $DataBaseName file."
- if (rm $DataBasePath)
- then
- echo "$CommandName: $DataBasePath removed."
- else
- echoE "$CommandName:Warning: Failure to remove $DataBasePath."
- fi
- fi
- echo "############"
- echo "$CommandName: creating $FullBackupBaseName. Please wait."
- echo "###"
- sh <<End
- $DarName $FirstSliceSizeOption $SliceSizeOption $BackupNameOption $DarOptions $IncludeExclDirsOption $InclExclFilesOption
- End
- ExitCode=$?
- if [ $ExitCode -eq 0 ]
- then
- echo "###"
- echo "$CommandName: $FullBackupBaseName created successfully."
- echo "############"
- echo "$CommandName: Creating $DataBaseName."
- AddToDataBaseOption=$AddToDataBaseOption$FullBackupPath
- if ($DarManagerName $CreateDataBaseOption)
- then
- echo "$CommandName: Adding $FullBackupBaseName to $DataBaseName. Please wait."
- if ($DarManagerName $DataBaseNameOption $AddToDataBaseOption)
- then
- echo "$CommandName: $FullBackupBaseName added to $DataBaseName successfully."
- else
- echoE "$CommandName: Warning: Adding $FullBackupBaseName to $DataBaseName failed."
- fi
- else
- echoE "$CommandName: Warning: Creation of $DataBaseName failed."
- fi
- else
- echoE "$CommandName: Sorry. '$DarName' failed with exit code $ExitCode. $FullBackupBaseName backup aborted."
- UmountDirs
- fi
- else
- BackupName=$DiffBackupBaseName`TwoDigits $DiffBackupNr`
- BackupPath=$DiffBackupPath`TwoDigits $DiffBackupNr`
- BackupNameOption=$BackupNameOption$BackupPath
- if [ $DiffBackupNr -gt 1 ]
- then
- PrevDiffBackup=$DiffBackupNr
- let PrevDiffBackup--
- ReferenceBackupOption=$ReferenceBackupOption$DiffBackupPath`TwoDigits $PrevDiffBackup`
- else
- ReferenceBackupOption=$ReferenceBackupOption$FullBackupPath
- fi
- # In fact $DiffBackupNr+1 because FullBackup=1. Set to $DiffBackupNr for use in 'Erase .. from DataBase' loop below.
- DataBaseLastValidArchive=$DiffBackupNr
- if [ $LastDiffBackup -ne 0 ]
- then
- if [ $DiffBackupNr -le $LastDiffBackup ]
- then
- echo "############"
- echo "$CommandName: Removing previous $DiffBackupBaseName files."
- fi
- let DiffBackupNr--
- while [ $DiffBackupNr -lt $LastDiffBackup ]
- do
- let DiffBackupNr++
- BaseName=$DiffBackupPath`TwoDigits $DiffBackupNr`
- for i in $BaseName.*
- do
- if test -f $i
- then
- if (rm $i)
- then
- echo "$CommandName: $i removed."
- else
- echoE "$CommandName:Warning: Failure to remove $i."
- fi
- fi
- done
- done
- fi
- if test -f $DataBasePath
- then
- # $DarManagerName -l outputs to standard error.
- LastArchiveInDB=`$DarManagerName $DataBaseNameOption -l 2>&1 | awk 'END {print $1}'`
- case $LastArchiveInDB in
- [a-zA-Z-_.,]* | *[a-zA-Z-_.,] | *[a-zA-Z-_.,]*)
- # If DataBase empty last line produced by 'dar_manager -l' is full of '--'
- echoE "$CommandName: Warning: $DataBaseName is empty. Aborting."
- UmountDirs
- exit 6;;
- *)
- if [ $LastArchiveInDB -gt $DataBaseLastValidArchive ]
- then
- echo "############"
- echo "$CommandName: Erasing previous Differential backups from $DataBaseName."
- while [ $LastArchiveInDB -gt $DataBaseLastValidArchive ]
- do
- let ArchiveBaseName=$LastArchiveInDB-1
- BaseName=`TwoDigits $ArchiveBaseName`
- ArchiveBaseName=$DiffBackupBaseName$BaseName
- if ($DarManagerName $DataBaseNameOption -D $LastArchiveInDB)
- then
- echo "$CommandName: Archive $LastArchiveInDB ($ArchiveBaseName) erased from $DataBaseName."
- else
- echoE "$CommandName: Warning: Erasing of Archive $LastArchiveInDB ($ArchiveBaseName)\
- from $DataBaseName failed."
- fi
- let LastArchiveInDB--
- done
- fi;;
- esac
- else
- echoE "$CommandName: Warning! $DataBaseName does not exist. Aborting."
- UmountDirs
- exit 7
- fi
- echo "############"
- echo "$CommandName: creating $BackupName. Please wait."
- echo "###"
- sh <<End
- $DarName $SliceSizeOption $BackupNameOption $ReferenceBackupOption $DarOptions $IncludeExclDirsOption $InclExclFilesOption
- End
- ExitCode=$?
- if [ $ExitCode -eq 0 ]
- then
- echo "###"
- echo "$CommandName: $BackupName created successfully."
- echo "############"
- echo "$CommandName: Updating $DataBaseName. Please wait."
- AddToDataBaseOption=$AddToDataBaseOption$BackupPath
- if ($DarManagerName $DataBaseNameOption $AddToDataBaseOption)
- then
- echo "$CommandName: $BackupName added to $DataBaseName successfully."
- else
- echoE "$CommandName: Warning: Adding $BackupName to $DataBaseName failed."
- fi
- else
- echoE "$CommandName: Sorry. '$DarName' failed with exit code $ExitCode. $BackupName backup aborted."
- fi
- fi
- UmountDirs
- exit 0
- Exit codes:
- 0 Sucessful run.
- 1 Wrong arguments;
- || Not root;
- || Wrong runlevel.
- 2 File system could not be mounted.
- 3 Incorrect Origin directory or it does not exist;
- || Incorrect Destination directory or it does not exist;
- || $DarName or $DarManagerName not in $PATH or $DarDir.
- 4 User request exit.
- 5 Wrong user choice.
- 6 Database empty.
- 7 Database does not exist.
advertising
Update the Post
Either update this post and resubmit it with changes, or make a new post.
You may also comment on this post.
Please note that information posted here will not expire by default. If you do not want it to expire, please set the expiry time above. If it is set to expire, web search engines will not be allowed to index it prior to it expiring. Items that are not marked to expire will be indexable by search engines. Be careful with your passwords. All illegal activities will be reported and any information will be handed over to the authorities, so be good.