chrigu
Aktives Mitglied
- Dabei seit
- 08.03.2004
- Beiträge
- 155
- Reaktionspunkte
- 0
Habe mich mittlerweile auch durch den Thread durchgearbeitet, um mir eine Backuplösung zu basteln. Folgendes Shellscript ist dabei entstanden, vielleicht leistet es ja noch anderen gute Dienste.
Es sollte eigentlich nur noch nötig sein die ersten 5 Variablen zu definieren.
Es sollte eigentlich nur noch nötig sein die ersten 5 Variablen zu definieren.
Code:
#!/bin/bash
# Dieses Shellscript erstellt eine Kopie eines Verzeichnisses auf einem beliebigen Volumen mit Hilfe
# von rsync. Das Script kann in periodischen Zeitabständen durch crontab oder launchdaemon gestartet werden.
# Eine Kopie wird erstellt, wenn das vorgegebene Sicherungsintervall überschritten wird.
#
# Die Anzahl der vorhandenen Sicherungskopien können frei definiert werden, wobei die nötigen Verzeichnisse
# automatisch erstellt und für bereits ungeänderte und auf dem Backupvolumen vorhandene Dateien sog. Hardlinks
# erstellt werden, um den benötigten Speicherplatz möglichst gering zu halten.
#
# Das Script verwendet wahlweise folgende Programme im Verzeichniss /usr/local/bin/
# – rsync (version 2.6.0 protocol version 27 Copyright HFS+ filesystem support for OSX)
# – rm
# – mv
# Diese wurden mit den Rechten "sudo chmod 6755", "sudo chown root" und "sudo chgrp staff" versehen, damit
# restlos alle Dateien im Quellenverzeichniss kopiert werden.
#
# Datum: 04.03.06
# Voreinstellungen für rotierendes Backup
# absolute Pfadangabe des Quellenverzeichnisses
declare quelle=""
# absolute Pfadangabe des Backupvolumen
declare backup_volume=""
# Name des Backups
declare backup_name=""
# Sicherungsintervall in Sekunden
declare -i backup_intervall=86400 # 1 Tag
# Anzahl der letzten verfügbaren Sicherungskopien
declare -i backup_rotation=3
# Pfad zu den vorzugweise verwendeten Programmen
PATH=/usr/local/bin:$PATH
# sollvariablen für das sicherungsintervall in sekunden
declare -i sollzeit_users=$backup_intervall
# istvariablen des sicherungsintervalls
if [ -e $quelle"/"backup_protokoll ]
then
declare -i istzeit_users=$(($(date +%s)-$(stat -f %m $quelle"/"backup_protokoll)))
else
declare -i istzeit_users=$(($backup_intervall+10))
date > $quelle"/"backup_protokoll
fi
if [ $istzeit_users -gt $sollzeit_users ]
then
if [ ! -e $backup_volume ]
then
/usr/sbin/diskutil mount /dev/disk1s10
fi
# Backup Disk gemountet ?
if [ -e $backup_volume ]
then
# Ins Backupvolume wechseln
cd $backup_volume
# Verzeichniss des Backups erstellen
if [ ! -e $backup_name ]
then
mkdir $backup_name
fi
# Ins Backupverzeichniss wechseln
cd $backup_name
# Überprüfen ob mac im lokalen Netzwerk verfügbar ist.
#mac=`ping -qn -c 1 192.168.1.4 | grep -c "1 packets received"`
declare -i mac=1
if [ $mac = 1 ]
then
# Backupordner anlegen
mkdir backup.0
#Log Variable schreiben (Anfangszeit)
declare backupBeg=$(date)
# Backup starten
time rsync --rsync-path=/usr/local/bin/rsync -a --eahfs --showtogo --link-dest=""$backup_volume"/"$backup_name"/"backup.1"" ""$quelle"" ""$backup_volume"/"$backup_name"/"backup.0"" > $quelle"/"backup_protokoll
# Wenn Backup erfolgreich (komplett oder teilweise gesichert), dann akzeptieren und ältestes Backup löschen, ansonsten Backup verwerfen. Fehler 23 -> Dateien oft nicht kopiert wegen fehlender Rechte
if test $? = 0 -o $? = 23
then
i=$backup_rotation
while [ $i -ge 0 ]
do
if [ ! -e backup.$i ]
then
mkdir backup.$i
fi
mv -f backup.$i backup.$(($i+1))
i=$(($i-1))
done
rm -rf backup.$(($backup_rotation+1))
#Log schreiben (Endzeit)
echo "Backup begonnen um:" >> backup.log
echo $backupBeg >> backup.log
echo "Backup beendet um:" >> backup.log
date >> backup.log
echo "--------------------------------------" >> backup.log
else
rm -rf backup.0
echo Backup nicht erfolgreich
fi
fi
fi
fi
Zuletzt bearbeitet: