Zatarra Posted February 10, 2011 Report Share Posted February 10, 2011 Dupa old`ulhttp://rstcenter.com/forum/25439-backup-script.rstRevin cu un nou script "ciordit" (again) pentru cei interesati de backup under linux!#!/bin/bashunalias -aunset LANGPGMVERSION="1.4.1"MNTDIR="/mnt"BACKUPFILE="/backup/system-backup"BACKUPLIST="$MNTDIR/var/lib/backups/sysbackups.list"BACKUPCONF="$MNTDIR/var/lib/backups/sysbackups.conf"BACKUPLOG="$MNTDIR/var/lib/backups/sysbackups.log"EXCLUDEFILE="$MNTDIR/var/lib/backups/sysbackups.exclude"RESTORECONF="$MNTDIR/var/lib/backups/sysrestore.conf"RESTORELOG="$MNTDIR/var/lib/backups/sysbackups.log"MAXBACKUPS=2DATETIME="`date -u +%Y%m%d-%H%M`"EXCLUDEDEFAULT="/tmp/*/var/tmp/*/var/run/*.pid"DeleteOldFiles(){ local keepfiles="$1" local filemask="$2" local f while read -s f; do keepfiles=$((keepfiles-1)) test $keepfiles -gt 0 && continue rm -fv "$f" done < <(ls -1 -r $filemask 2>/dev/null) return 0}SystemBackup(){ local elist="/tmp/exclude$$" local backup="$BACKUPFILE-$DATETIME.tgz" local cmd i rc echo "System Backup V$PGMVERSION $DATETIME" echo if ! mount 2>&1 | grep -q "$MNTDIR "; then echo "Mounting system disk ROOT on $MNTDIR" mount LABEL=ROOT $MNTDIR || return 1 fi if ! mount 2>&1 | grep -q "$MNTDIR/var "; then echo "Mounting system disk DATA1 on $MNTDIR/var" mount LABEL=DATA1 $MNTDIR/var || return 1 fi echo echo "Mounted filesystems:" mount echo echo "Current disk usage:" df -m echo if [ -f $BACKUPCONF ]; then eval "`grep "^MAXBACKUPS=" < $BACKUPCONF`" fi mkdir -p $(dirname $BACKUPFILE) echo "Deleting old backups (maxbackups=$MAXBACKUPS)" DeleteOldFiles "$MAXBACKUPS" "$BACKUPFILE-*.tgz" DeleteOldFiles "$MAXBACKUPS" "$BACKUPFILE-*.log" echo echo "Current stored backups:" ls -l $BACKUPFILE*.tgz echo echo "$EXCLUDEDEFAULT" | sed -- 's#^/##' | grep -v "^$" > $elist if [ -f $EXCLUDEFILE ]; then echo "Using exclude list $EXCLUDEFILE" sed -- 's#^/##' < $EXCLUDEFILE | grep -v "^$" > $elist fi echo "Data excluded from Backup:" echo "------------------------------------" cat $elist echo "------------------------------------" echo umask 027 cmd="tar -cvzf $backup --one-file-system --exclude-from=$elist -C $MNTDIR . va r" echo "$cmd" $cmd; rc=$? echo "tar rc=$rc" df -m echo rm -f $elist if [ $rc -ne 0 ]; then rm -fv $backup echo "$(date -u "+%Z %F-%T") Backup Error $backup" >> $BACKUPLOG else echo "$(date -u "+%Z %F-%T") Backup Ok $backup" >> $BACKUPLOG fi echo echo "unmounting filesystems" umount $MNTDIR/var umount $MNTDIR echo return $rc}SystemRestore(){ local backup="$1" local option="$2" local disk="" local hdROOT="" local hdDATA="" local aw echo "System Restore V$PGMVERSION $DATETIME" echo disk="$(mount | grep "/dev/.... on / " | awk '{print $1}')" case $disk in /dev/hda3) disk="/dev/hda";; /dev/sda3) disk="/dev/sda";; *) echo "Error: unsupported Harddisk configuration (rescue boot disk=$di sk)" return 1;; esac hdROOT="${disk}2" hdDATA="${disk}4" if [ -z "$backup" ]; then echo "Searching for $RESTORECONF on $hdROOT" mount $hdROOT $MNTDIR if [ -s $RESTORECONF ]; then read backup aw < $RESTORECONF backup="$(dirname $BACKUPFILE)/$(basename "$backup")" fi umount $MNTDIR if [ -z "$backup" ]; then echo "Backup file not specified, searching for last backup..." backup="`ls -1 -r $BACKUPFILE-*.tgz 2>/dev/null | head -n 1`" if [ -z "$backup" ]; then echo "Error: No backup found ($BACKUPFILE-*.tgz)" return 1 fi fi fi if [ ! -f "$backup" ]; then echo "Error: Backup file not found: $backup" return 1 fi if mount 2>&1 | grep -q "on $MNTDIR "; then echo "Error: Directory $MNTDIR is in use:" mount return 1 fi echo "-----------------------------------------------------------------" echo "Restoring System from Backup:" find $backup -printf "%p %s\n" echo echo "WARNING: all data on system partition $hdROOT will be deleted !" echo "-----------------------------------------------------------------" if [[ "$option" != "--yes" ]]; then aw="" read -p -t 60 "Do you want to restore system (Yes/no) [no] ? " aw if [[ "$aw" != "Yes" ]]; then echo "Response '$aw', system restore terminated" return 1 fi fi echo "Checking Backup file $backup" if ! tar -tzf $backup > "$backup.testlog" 2>&1; then echo "Error in Backup file" return 1 fi rm -f "$backup.testlog" echo "Formatting system partition $hdROOT..." mke2fs -L ROOT -j -O dir_index $hdROOT echo echo "Mounting system partition $hdROOT on $MNTDIR" mount $hdROOT $MNTDIR || return 1 mkdir -p "$MNTDIR/var"#### echo "Formatting data partition on $hdDATA..."#### mke2fs -L DATA1 -j -O dir_index "$hdDATA" echo echo "Mounting data partition $hdDATA on $MNTDIR/var" mount $hdDATA $MNTDIR/var || return 1 sync echo echo "Mounted filesystems:" mount echo df -m echo cmd="tar -xvzf $backup -C $MNTDIR" echo "$cmd" $cmd rc=$? echo "tar rc=$rc" echo df -m echo sync echo "Installing GRUB boot manager" grub --batch <<-EOF device (hd0) $disk root (hd0,1) setup (hd0) quit EOF if [ $? -ne 0 ]; then echo "Error installing GRUB, try manual installation" return 1 fi mkdir -p $(dirname $RESTORELOG) if [ $rc -ne 0 ]; then echo "$(date -u "+%Z %F-%T") Restore Error $backup" >> $RESTORELOG else echo "$(date -u "+%Z %F-%T") Restore Ok $backup" >> $RESTORELOG fi sync echo "unmounting filesystems" umount $MNTDIR/var umount $MNTDIR echo return $rc}MakeBackup(){ local logfile="$BACKUPFILE-$DATETIME.log" local t="`date +%s`" local rc echo mkdir -p $(dirname $BACKUPFILE) SystemBackup > $logfile 2>&1 rc=$PIPESTATUS t="$((`date +%s` - t))" if [ $rc -ne 0 ]; then echo "System backup error ($t sec)" | tee -a $logfile else echo "System backup complete ($t sec)" | tee -a $logfile fi echo echo "Backup logfile: $logfile" echo return $rc}MakeRestore(){ local backup="" local option="" local logfile="$(dirname $BACKUPFILE)/system-restore-$DATETIME.log" local t="`date +%s`" local p local rc for p in "$@"; do case $p in --yes) option="$p";; *) backup="$p";; esac done mkdir -p $(dirname $logfile) SystemRestore "$backup" "$option" > $logfile 2>&1 rc=$PIPESTATUS t="$((`date +%s` - t))" if [ $rc -ne 0 ]; then echo "System restore error ($t sec)" | tee -a $logfile else echo "System restore complete ($t sec)" | tee -a $logfile fi echo echo "Restore logfile: $logfile" echo return $rc}Help(){ cat <<-EOF Use: $0 {backup}|{restore [tgzfile]} Sample: $0 backup $0 restore /somewhere/testbackup.tgz EOF echo "Current stored Backups in $(dirname $BACKUPFILE):" echo "------------------------------------------------------------------------ -" find $(dirname $BACKUPFILE) -name "*.tgz" -printf "%p %s\n" | sort echo "------------------------------------------------------------------------ -" return 1}case $1 in backup) shift; MakeBackup "$@";; restore) shift; MakeRestore "$@";; *) Help;;esac#eofOrice intrebare aveti legata de script.. Feel free to ask ;-)Pace Quote Link to comment Share on other sites More sharing options...