time-walker
New Member
Ich bin gerade dabei mein Backup script zu schreiben...
weiter unten findet ihr meine Script, welche auf Basis von diesem Howto aufgebaut wurde...
Heinlein - Professional Linux Support GmbH - Howto: Backups mit rsync
Was ich noch gerne hätte ist das backup zu verschlüsseln.
Ich habe mein backup nun abgeändert damit das backup local abgespeichert wird. Aber ich habe einen FTP Server der intern erreichbar ist.
Somit würde ich es gerne ins Dateiverzeichnis Mounten.
Habe mir gestern Curlftpfs angeschaut, leider ist es aber etwas bugy...
Habt ihr sonst erfahrungen oder vorschläge ??
Aktuellerstand:
weiter unten findet ihr meine Script, welche auf Basis von diesem Howto aufgebaut wurde...
Heinlein - Professional Linux Support GmbH - Howto: Backups mit rsync
Was ich noch gerne hätte ist das backup zu verschlüsseln.
Ich habe mein backup nun abgeändert damit das backup local abgespeichert wird. Aber ich habe einen FTP Server der intern erreichbar ist.
Somit würde ich es gerne ins Dateiverzeichnis Mounten.
Habe mir gestern Curlftpfs angeschaut, leider ist es aber etwas bugy...
Habt ihr sonst erfahrungen oder vorschläge ??
Aktuellerstand:
back.sh
Code:
#!/bin/bash
#
# Script zieht per rsync Backups
# http://www.heinlein-partner.de
#
# Aufruf: backup-rsync <fqdn-servername>
#
# ### Aufrufparameter des Scripts ist ein FQDN-Hostname
if [ -n "$1" ] ; then
SERVER="$1"
else
echo "Error: Usage $0 <fqdn-hostname>"
exit
fi
#VARIABLEN
MYSQLADMIN=""
MYSQLPASS=""
datum=$(date +%d-%m-%G)
# ### Konfiguration
# Sollen wir pruefen, ob noch ein gewisser Prozentsatz
# an Plattenplatz und Inodes frei ist?
CHECK_HDMINFREE=true
HDMINFREE=95
# Unter welchem Pfad wird gesichert?
DATA_PATH=/BACKUP
# Liste von Dateipattern, die nicht gebackupt werden sollen
EXCLUDES=/etc/.exclude_backup
# Weitere Optionen für rsync. Ggf. macht eine Limitierung
# der Bandbreite Sinn, Angabe in kbyte/sec:
# EXTRAOPT="--bwlimit=256"
EXTRAOPT=""
# ### Let´s Rock`n`Roll
# Pruefe auf freien Plattenplatz
GETPERCENTAGE='s/.* \([0-9]\{1,3\}\)%.*/\1/'
if $CHECK_HDMINFREE ; then
KBISFREE=`df /$DATA_PATH | tail -n1 | sed -e "$GETPERCENTAGE"`
INODEISFREE=`df -i /$DATA_PATH | tail -n1 | sed -e "$GETPERCENTAGE"`
if [ $KBISFREE -ge $HDMINFREE -o $INODEISFREE -ge $HDMINFREE ] ; then
echo "Fatal: Not enough space left for rsyncing backups!"
logger "Fatal: Not enough space left for rsyncing backups!"
exit
fi
fi
# Ggf. Verzeichnis anlegen
if ! [ -d $DATA_PATH/$SERVER/weekly.1/daily.1 ] ; then
mkdir -p $DATA_PATH/$SERVER/weekly.1/daily.1
fi
# Los geht`s: rsync zieht ein Vollbackup
echo "Starting rsync backup from $SERVER..."
logger "Starting rsync backup from $SERVER..."
rsync -avz --numeric-ids --delete --delete-excluded \
--exclude-from="$EXCLUDES" $EXTRAOPT \
/$DATA_PATH/$SERVER/weekly.1/daily.1
# MYSQL Backup Jede Datenbank Einzeln
for i in $(mysql -u$MYSQLADMIN -p$MYSQLPASS -Bs -e "show databases")
do
mysqldump -u$MYSQLADMIN -p$MYSQLPASS --opt --quote-names --triggers --routines --flush-logs --force --delete-master-logs --master-data "$i" | bzip2 -c >
"$DATA_PATH/weekly.1/daily.1/MySQL" >/dev/null 2>&1
done
echo "MySQL-Dump done..."
logger "MySQL-Dump done..."
# Rückgabewert prüfen.
# 0 = fehlerfrei,
# 24 ist harmlos; tritt auf, wenn während der Laufzeit
# von rsync noch (/tmp?) Dateien verändert oder gelöscht wurden.
# Alles andere ist fatal -- siehe man (1) rsync
if ! [ $? = 24 -o $? = 0 ] ; then
echo "Fatal: rsync finished $SERVER with errors!"
logger "Fatal: rsync finished $SERVER with errors!"
fi
# Verzeichnis anfassen, um Backup-Datum zu speichern
touch $DATA_PATH/$SERVER/weekly.1/daily.1
# Fertig!
echo "Finished rsync backup from $SERVER..."
logger "Finished rsync backup from $SERVER..."
# Sicher ist sicher...
sync
exclude_backup
Code:
/proc/*
/tmp/*
/backup/*
backup_retate.sh
Code:
#!/bin/bash
#
# Script rotiert Backup-Verzeichnisse
# http://www.heinlein-partner.de
#
# Aufruf: backup-rotate <fqdn-servername>
#
# ### Aufrufparameter des Scripts ist ein FQDN-Hostname
if [ -n "$1" ] ; then
SERVER="$1"
else
echo "Error: Usage $0 <fqdn-hostname>"
exit
fi
# ### Konfiguration
# Sollen wir pruefen, ob noch ein gewisser Prozentsatz
# an Plattenplatz und Inodes frei ist?
CHECK_HDMINFREE=true
HDMINFREE=95
# Unter welchem Pfad wird gesichert?
DATA_PATH=/BACKUP
# ### Let`s Rock`n`Roll....
# Pruefe auf freien Plattenplatz
GETPERCENTAGE='s/.* \([0-9]\{1,3\}\)%.*/\1/'
if $CHECK_HDMINFREE ; then
KBISFREE=`df /$DATA_PATH | tail -n1 | sed -e "$GETPERCENTAGE"`
INODEISFREE=`df -i /$DATA_PATH | tail -n1 | sed -e "$GETPERCENTAGE"`
if [ $KBISFREE -ge $HDMINFREE -o $INODEISFREE -ge $HDMINFREE ] ; then
echo "Fatal: Not enough space left for rotating backups!"
logger "Fatal: Not enough space left for rotating backups!"
exit
fi
fi
# Ggf. Verzeichnis anlegen
if ! [ -d $DATA_PATH/$SERVER/weekly.1/daily.1 ] ; then
mkdir -p $DATA_PATH/$SERVER/weekly.1/daily.1
fi
echo "Rotating snapshots of $SERVER..."
logger "Rotating snapshots of $SERVER..."
# Das hoechste Snapshot abloeschen
if [ -d $DATA_PATH/$SERVER/weekly.1/daily.8 ] ; then
rm -rf $DATA_PATH/$SERVER/weekly.1/daily.8
fi
# Alle anderen Snapshots eine Nummer nach oben verschieben
for OLD in 7 6 5 4 3 2 ; do
if [ -d $DATA_PATH/$SERVER/weekly.1/daily.$OLD ] ; then
NEW=$[ $OLD + 1 ]
# Datum sichern
touch $DATA_PATH/weekly.1/.timestamp -r $DATA_PATH/$SERVER/weekly.1/daily.$OLD
mv $DATA_PATH/$SERVER/weekly.1/daily.$OLD $DATA_PATH/$SERVER/weekly.1/daily.$NEW
# Datum zurueckspielen
touch $DATA_PATH/$SERVER/weekly.1/daily.$NEW -r $DATA_PATH/weekly.1/.timestamp
fi
done
# Snapshot von Level-0 per hardlink-Kopie nach Level-1 kopieren
if [ -d $DATA_PATH/$SERVER/weekly.1/daily.1 ] ; then
cp -al $DATA_PATH/$SERVER/weekly.1/daily.1 $DATA_PATH/$SERVER/weekly.1/daily.2
fi
backup-rotate-weekly
Code:
#!/bin/bash
#
# Script rotiert Backup-Verzeichnisse
# http://www.heinlein-partner.de
#
# Aufruf: backup-rotate <fqdn-servername>
#
# ### Aufrufparameter des Scripts ist ein FQDN-Hostname
if [ -n "$1" ] ; then
SERVER="$1"
else
echo "Error: Usage $0 <fqdn-hostname>"
exit
fi
# ### Konfiguration
# Sollen wir pruefen, ob noch ein gewisser Prozentsatz
# an Plattenplatz und Inodes frei ist?
CHECK_HDMINFREE=true
HDMINFREE=95
# Unter welchem Pfad wird gesichert?
DATA_PATH=/BACKUP
# ### Let`s Rock`n`Roll....
# Pruefe auf freien Plattenplatz
GETPERCENTAGE='s/.* \([0-9]\{1,3\}\)%.*/\1/'
if $CHECK_HDMINFREE ; then
KBISFREE=`df /$DATA_PATH | tail -n1 | sed -e "$GETPERCENTAGE"`
INODEISFREE=`df -i /$DATA_PATH | tail -n1 | sed -e "$GETPERCENTAGE"`
if [ $KBISFREE -ge $HDMINFREE -o $INODEISFREE -ge $HDMINFREE ] ; then
echo "Fatal: Not enough space left for rotating backups!"
logger "Fatal: Not enough space left for rotating backups!"
exit
fi
fi
# Ggf. Verzeichnis anlegen
if ! [ -d $DATA_PATH/$SERVER/weekly.1/ ] ; then
mkdir -p $DATA_PATH/$SERVER/weekly.1
fi
echo "Rotating snapshots of $SERVER..."
logger "Rotating snapshots of $SERVER..."
# Das hoechste Snapshot abloeschen
if [ -d $DATA_PATH/$SERVER/weekly.5 ] ; then
rm -rf $DATA_PATH/$SERVER/weekly.5
fi
# Alle anderen Snapshots eine Nummer nach oben verschieben
for OLD in 4 3 2 ; do
if [ -d $DATA_PATH/$SERVER/weekly.$OLD ] ; then
NEW=$[ $OLD + 1 ]
# Datum sichern
touch $DATA_PATH/.timestamp -r $DATA_PATH/$SERVER/weekly.$OLD
mv $DATA_PATH/$SERVER/weekly.$OLD $DATA_PATH/$SERVER/weekly.$NEW
# Datum zurueckspielen
touch $DATA_PATH/$SERVER/weekly.$NEW -r $DATA_PATH/.timestamp
fi
done
# Snapshot von Level-0 per hardlink-Kopie nach Level-1 kopieren
if [ -d $DATA_PATH/$SERVER/weekly.1 ] ; then
cp -al $DATA_PATH/$SERVER/weekly.1 $DATA_PATH/$SERVER/weekly.2
fi