Jump to content
Zatarra

Backup Script 2

Recommended Posts

Posted

Dupa old`ul

http://rstcenter.com/forum/25439-backup-script.rst

Revin cu un nou script "ciordit" (again) pentru cei interesati de backup under linux!

#!/bin/bash

unalias -a
unset LANG

PGMVERSION="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=2
DATETIME="`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

#eof

Orice intrebare aveti legata de script.. Feel free to ask ;-)

Pace

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...