Jump to content
Zatarra

Backup Script 2

Recommended Posts

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

Link to comment
Share on other sites

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...