Vorstellen eines Backup- und Restore Scripts

Hey,

ich weiß nicht ob ich hier richtig bin, aber ich fand es am logistischen ihr den Thread auf zu machen.

Ich habe ein Backup und ein Restore Skript in bash geschrieben und wollte einfach mal eure Meinung dazu hören.

Die Scripte sind fuer ein Linux OS geschrieben.
Backup kann auf einem externen Speichermedium, oder auf einer Netzwerkplatte, FTP-Server, etc. gespeichert werden.

Ich habe auch versucht auf die Sicherheit zu achten.

Backup:
Code:
#!/bin/bash 
#
# 	file:	/home/laterne/scripts/backup.sh
# 	date:	Mi 23. Feb 2012
#   who:    Laterne
# 	what:	safe /home/*; /etc; /var;


## Script darf nur als root laufen 
if [ ! $UID -eq 0 ]
then
	echo "Script must be run as root"
	exit 1
fi

## erstellt ein Verzeichniss und ueberprueft ob es schon vorhanden sind
function createdir()
{
	DIR=$1

	if [ ! -d ${DIR} ]
	then
		mkdir ${DIR}
	else
		echo "ERROR: ${DIR} gibt es bereits"
		exit 1
	fi
}


#----------------------------------------------------------------------------------------------------------------------------------
## Sekundenzaehler starten
anfang=$(date +%s)

## SUFFIX erstellen
SUFFIX="tar.gz"

## temporaeres_Verzeichniss erstellen, kann eigentlich nie schiefgehen...
TEMPDIR=$(mktemp -d)


## etwas header-foo
DATUM=$(date "+%Y%m%d")
BACKUPFILE="backup_$DATUM.$SUFFIX"

## Backup Verzeichnis mit Datum erstellen
TARGET=$TEMPDIR/$DATUM
mkdir $TARGET


## Backup der angebenen Daten erstellen
BACKUPME=(/home/rosorio /etc /var/log /var/www)
for i in "${BACKUPME[@]}"
do
        aname=$(echo $i | sed 's#^/##' | sed 's#/#_#g')
        tar -czPf $TARGET/${aname}_${BACKUPFILE} --exclude=.gvfs $i
done

## Liste aller Programme die ueber den Paketmanger installiert wurden, erstellen
dpkg -l >$TARGET/INSTALLED.apps.txt

## Backup der Datenbank
## MySQL Backupuser kann mit folgendem Befehl anlegen werden:
## GRANT SELECT,RELOAD,LOCK TABLES,SHOW VIEW ON *.* to 'dbbackup'@'localhost' IDENTIFIED BY 'geheim';
mysqldump --user=dbbackup --password=geheim --compress --all-databases > $TARGET/rosorio_databases.sql || exit 1


#----------------------------------------------------------------------------------------------------------------------------------
## gesicherte Dateien ausgeben
echo ""
echo "Sicherungen:"


## fuer jedes Backup die Anzahl der Dateien ausgeben
printf "%10s | %s\n" "Anzahl" "Dateiname"
echo   "-----------+-------------------------------------------"
for i in $TARGET/*.$SUFFIX
do
	FILECOUNT=$(tar tvvf $i 2>/dev/null | grep -v "/$" | wc -l)
	FILE=$(echo $i | awk -F"/" '{ print $NF }')
	printf "%10s | %s\n" "$FILECOUNT" "$FILE"
done



#----------------------------------------------------------------------------------------------------------------------------------

## mount_Verzeichniss erstellen, kann eigentlich nie schiefgehen...
MOUNTDIR=$(mktemp -d)

## UUID des Datentraegers mit "blkid" herrausfinden
mount UUID=8626-22E8 $MOUNTDIR || exit 1

## komprimierte Dateien in das mount_Verzeichniss verschieben
cp -R $TARGET $MOUNTDIR 

OLDPWD=$(pwd)

cd $MOUNTDIR 

COUNT=$(ls | wc -l)

if [ $COUNT -gt 6 ]
then
	for i in $(ls | sort -n | head -1) 	
	do
		cd $i 
		rm * 
		cd .. 
		rmdir $i
	done	
fi

sync

cd $OLDPWD 

## unmount
umount $MOUNTDIR
rmdir  $MOUNTDIR

## cleanup
rm    $TARGET/*
rmdir $TARGET
rmdir $TEMPDIR

#----------------------------------------------------------------------------------------------------------------------------------
## Sekundenzaehler stoppen
ende=$(date +%s)

## benoetigte Zeit in Sekunden berechnen
diff=$(echo "$ende-$anfang" | bc )

echo ""
## Sekunden mit "bc" umrechnen
RESULT=$(echo "obase=60; $diff" | bc | xargs | tr ' ' :)

## Backupdauer ausgeben
echo "Dauer der Sicherung: $RESULT"
RESTORE:
Code:
#!/bin/bash 
#
#    file:     /home/laterne/scripts/restore.sh
#   date:    Mi 23. Feb 2012
#   who:    Laterne
#   what:   restore /home/*; /etc; /var/www; /var/log;


## Script darf nur als root laufen 
if [ ! $UID -eq 0 ]
then
        echo "Script must be run as root"
        exit 1
fi





#----------------------------------------------------------------------------------------------------------------------------------
## Error Flag
EC=0

## Sortiert nach Datum(neustes oben)
DATE=$(find /media/ROSORIO/ -maxdepth 1 -type d -name 2\* -exec basename {} \; | sort -nr | head -1)

## In das Ausgansverzeichniss wechseln
cd /

## Quelle in der die Backup-Dateien liegen
TARGET="/media/ROSORIO/$DATE"

if [ ! -d $TARGET ]
then
    echo "Restore Souce unavailable: $TARGET"
    exit 1
fi

## TAR Parameter
TAROPTS=xzf
## Restore starten
## MySQl restore, darf nur eine .sql-Datei vorhanden sein
mysql -u root -p < $TARGET/*.sql

for i in $(ls $TARGET/*.gz | grep -v log)
do
    echo tar $TAROPTS $i
    if [ ! $? -eq 0 ]
    then
        echo "         restore fehlgeschlagen!"
        EC=1
    fi
done

# Erfolgsmeldung nur im erfolgreichen Erfolgsfall :)
if [ $EC -eq 0 ]
then
    echo "         restore erfolgreich ausgeführt!"
fi
Anbei:
Scripte als Datei
(mit Notepad++ oeffnen)

Laterne
 
Zuletzt bearbeitet:
Du könntest schon auf eine Menge Code verzichten, wenn du dein temporäres Verzeichnis so anlegst:

Code:
mktemp -d
 
hey,

sry habe zurzeit leider sehr viel zu tun, hoffe ich finde am Wochenende endlich mal Zeit mein Script anzupassen und mich mit "afio" zu beschäftigen.

Danke euch für die Vorschläge!

Laterne
 
endlich angepasst...

afio, lass ich weg weil meine Priorität da nicht so hoch liegt und es eine zusätzliche Installation benötigt.
Werde es aber eventuell noch optional einbauen.

"mktemp -d" hinzugefügt und auf Funktion geprüft.
Danke für die Hilfe, sry das es soooo lange gedauert hat.


Laterne
 
Zurück
Oben