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:
RESTORE:
Anbei:
Scripte als Datei (mit Notepad++ oeffnen)
Laterne
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"
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
Scripte als Datei (mit Notepad++ oeffnen)
Laterne
Zuletzt bearbeitet: