Dieser Anleitung fehlen noch einige Informationen. Wenn Du etwas verbessern kannst, dann editiere den Beitrag, um die Qualität des Wikis noch weiter zu verbessern.
Anmerkung: Das im Artikel enthaltene Skript könnte überarbeitet werden (siehe Diskussion).
Ubuntu 16.04 Xenial Xerus
Ubuntu 12.04 Precise Pangolin
Wie wertvoll ein Backup der persönlichen Daten sein kann, erkennt man meist erst, wenn der Ernstfall eingetreten ist. Einige lehnen sich dann entspannt zurück und schreiben die "verlorenen Daten" mit einer kurzen Befehlszeile zurück, andere beißen vor Wut in die Tischkante, weil sie vergessen haben, ein Backup zu machen. Mittels des hier vorgestellten kleinen Skriptes sollte jeder in der Lage sein, sich im Ernstfall entspannt zurückzulehnen.
Dieses Backupskript erstellt ein Grundbackup und eine tägliche Sicherung der geänderten Daten. Dazu bedient es sich des Programmes tar und des Dienstes anacron. Der Dienst anacron sorgt dafür, dass immer ein Backup nach dem ersten Rechnereinschalten des Tages gemacht wird. Somit ist sichergestellt, dass nicht vergessen wird, ein Backup anzulegen bzw. dass ein Backup nicht angelegt wird, weil die Ausführungszeit vor Einschalten des Rechners liegt, was z.B. der Fall bei cron wäre. Nach jedem Backupvorgang wird eine Mail an root
gesendet, in der mitgeteilt wird ob das Backup von Erfolg gekrönt war oder ob ein Fehler aufgetreten ist.
Folgendes Paket sollte bei Bedarf installiert werden [4]:
mailutils
mit apturl
Paketliste zum Kopieren:
sudo apt-get install mailutils
sudo aptitude install mailutils
(nur notwendig wenn man keinen anderen MTA installiert hat und sich Mails über den Backup-Erfolg senden lassen möchte)
Zuerst öffnet man einen Texteditor [2] und kopiert den folgenden Text hinein:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 | #!/bin/bash # Script fuer inkrementelles Backup mit 30 taegigem Vollbackup ### Einstellungen ## BACKUPDIR="media/backup" ## Pfad zum Backupverzeichnis ROTATEDIR="media/backup/rotate" ## Pfad wo die Backups nach 30 Tagen konserviert werden TIMESTAMP="timestamp.dat" ## Zeitstempel SOURCE="home/user" ## Verzeichnis(se) welche(s) gesichert werden soll(en) DATUM="$(date +%d-%m-%Y)" ## Datumsformat einstellen ZEIT="$(date +%H:%M)" ## Zeitformat einstellen >>Edit bei NTFS und Verwendung auch unter Windows : durch . ersetzen ### Verzeichnisse/Dateien welche nicht gesichert werden sollen ! Achtung keinen Zeilenumbruch ! ## EXCLUDE="--exclude=home/user/Filme --exclude=home/user/Musik --exclude=home/user/Spiele --exclude=home/user/.VirtualBox --exclude=home/user/.local/share/Trash" ### Wechsel in root damit die Pfade stimmen ## cd / ### Backupverzeichnis anlegen ## mkdir -p ${BACKUPDIR} ### Test ob Backupverzeichnis existiert und Mail an Admin bei fehlschlagen ## if [ ! -d "${BACKUPDIR}" ]; then mail -s "Backupverzeichnis nicht vorhanden!" root <<EOM Hallo Admin, das Backup am ${DATUM} konnte nicht erstellt werden. Das Verzeichnis ${BACKUPDIR} wurde nicht gefunden und konnte auch nicht angelegt werden. Mit freundlichem Gruss Backupscript EOM . exit 1 fi ### Alle Variablen einlesen und letzte Backupdateinummer herausfinden ## set -- ${BACKUPDIR}/backup-???.tgz lastname=${!#} backupnr=${lastname##*backup-} backupnr=${backupnr%%.*} backupnr=${backupnr//\?/0} backupnr=$[10#${backupnr}] ### Backupdateinummer automatisch um +1 bis maximal 30 erhoehen ## if [ "$[backupnr++]" -ge 30 ]; then mkdir -p ${ROTATEDIR}/${DATUM}-${ZEIT} ### Test ob Rotateverzeichnis existiert und Mail an Admin bei fehlschlagen ## if [ ! -d "${ROTATEDIR}/${DATUM}-${ZEIT}" ]; then mail -s "Rotateverzeichnis nicht vorhanden!" root <<EOM Hallo Admin, die alten Backups konnten am ${DATUM} nicht verschoben werden. Das Verzeichnis ${ROTATEDIR} wurde nicht gefunden und konnte auch nicht angelegt werden. Mit freundlichem Gruss Backupscript EOM . exit 1 else ### alter Code: mv ${BACKUPDIR}/* ${ROTATEDIR}/${DATUM}-${ZEIT} Damit verschiebt er die Dateien in sich selbst weil rotate ein Unterverzeichnis von backup ist. Es kommt zur Fehlermeldung ## ### /b* und /t* weil die Dateien nur mit b und t beginnen ## mv ${BACKUPDIR}/b* ${ROTATEDIR}/${DATUM}-${ZEIT} mv ${BACKUPDIR}/t* ${ROTATEDIR}/${DATUM}-${ZEIT} fi ### Abfragen ob das Backupverschieben erfolgreich war ## if [ $? -ne 0 ]; then mail -s "Backupverschieben fehlerhaft!" root <<EOM Hallo Admin, die alten Backups konnte am ${DATUM} nicht verschoben werden. Mit freundlichem Gruss Backupscript EOM exit 1 else mail -s "Backupverschieben erfolgreich" root <<EOM Hallo Admin, die alten Backups wurde am ${DATUM} erfolgreich nach ${ROTATEDIR}/${DATUM}-${ZEIT} verschoben. Mit freundlichem Gruss Backupscript EOM ### die Backupnummer wieder auf 1 stellen ## backupnr=1 fi fi backupnr=000${backupnr} backupnr=${backupnr: -3} filename=backup-${backupnr}.tgz ### Nun wird das eigentliche Backup ausgefuehrt ## tar -cpzf ${BACKUPDIR}/${filename} -g ${BACKUPDIR}/${TIMESTAMP} ${SOURCE} ${EXCLUDE} ### Abfragen ob das Backup erfolgreich war ## if [ $? -ne 0 ]; then mail -s "Backup (${SOURCE}) war fehlerhaft!" root <<EOM Hallo Admin, das Backup ${filename} am ${DATUM} wurde mit Fehler(n) beendet. Mit freundlichem Gruss Backupscript EOM else mail -s "Backup (${SOURCE}) war erfolgreich" root <<EOM Hallo Admin, das Backup ${filename} am ${DATUM} wurde erfolgreich beendet. Mit freundlichem Gruss Backupscript EOM fi |
Die wenigen Einstellungen, welche man im Skript vornehmen muss, sind eigentlich hinreichend beschrieben. Wichtig sind:
BACKUPDIR="media/backup"
- Pfad zum Backupverzeichnis
ROTATEDIR="media/backup/rotate"
- Pfad, wo die Backups nach 30 Tagen konserviert werden
SOURCE="home/user"
- Verzeichnis(se), welche(s) gesichert werden soll(en)
Weiterhin sollte man die Unterverzeichnisse des Source-Verzeichnisses, welche nicht gesichert werden sollen anpassen.
EXCLUDE="--exclude=home/user/Filme ........ "
Das Skript speichert man im Homeverzeichnis unter dem Namen backup. Der Dateiname darf keine Punkte enthalten, sonst wird das Script von Anacron nicht regelmäßig automatisch ausgeführt!
Wie das tar-Handbuch empfiehlt, sollte man beim Backup eines LVM-Snapshots mit tar die Option --no-check-device
übergeben. Möchte man den Inhalt von Mountpoints, die auf andere Dateisysteme zeigen, nicht sichern, so fügt man die Option --one-file-system
hinzu; diese Option kann z.B. für Backups des gesamten Dateisystems, also von /
benutzt werden, um temporäre Dateisysteme wie /proc
auszuschließen. All diese Optionen sollten vor -czf
stehen, da nach f
der Dateiname des Backups folgen muss.
Nun wird ein Terminal geöffnet [1] und das Skript ausführbar gemacht [3]
sudo chmod +x ~/backup
Anschließend wird das Skript dann mit Root-Rechten verschoben, um es täglich automatisch ausführen zu lassen:
sudo mv backup /etc/cron.daily
Das Skript überprüft nicht, ob im Backupverzeichnis genügend freier Speicher vorhanden ist. Sollte der Platz zu gering sein, bricht das Skript mit einer Fehlermeldung ab. Wer sich keine automatische Statusmail schicken lässt, sollte daher immer mal das Backupverzeichnis kontrollieren.
Alle 30 Tage wird der Inhalt des Backupordners verschoben und ein neues Komplettbackup angelegt. Die "alten Backups" werden nicht automatisch gelöscht, sondern müssen bei Bedarf manuell gelöscht werden. Zu finden sind diese im {ROTATEDIR}/{DATUM}
.
Das Backup wird erstellt, um im Ernstfall die Daten wiederherstellen zu können. Dies funktioniert dann ganz einfach per Terminal [1]:
BACKUPDIR=/media/backup # Pfad zum Backupverzeichnis cd / # Dies sollte trotz des Parameters -C ausgeführt werden, da ansonsten u. U. mittlerweile gelöschte Dateien eines inkrementellen Backups dennoch wiederhergestellt werden. for archiv in ${BACKUPDIR}/backup-*.tgz; do tar --listed-incremental=/dev/null -xpzf $archiv -C / done
Erfolgt die Wiederherstellung nicht vom ursprünglichen System aus, sondern z.B. von einer Live-CD, sollte man den Parameter --numeric-owner
in Betracht ziehen.
tar löscht alle Dateien, die zum Zeitpunkt der Sicherung nicht existiert haben!
Wenn man dies als eine ausführbare Datei [3] speichert (z.B. ruecksicher.sh), so kann man später einfach per Terminal [1] die Daten wiederherstellen:
chmod +x ./ruecksicher.sh # vor dem ersten Ausführen ./ruecksicher.sh
Will man nur einzelne Dateien zurücksichern, so bedient man sich des folgenden Tricks. Dies ist notwendig, da mit inkrementellen Backups gearbeitet wird und die letzte Sicherung der verlorenen Datei benötigt wird.
Zuerst sucht man die Datei:
BACKUPDIR=media/backup ls -l ${BACKUPDIR} for archiv in ${BACKUPDIR}/backup-*.tgz; do tar -tzf $archiv -C / | grep Name_der_Datei; done
Nun merkt man sich den Pfad und stellt die Datei wieder her:
for archiv in ${BACKUPDIR}/backup-*.tgz; do tar -xpzf $archiv -C / home/user/pfad/zur/datei/Name_der_Datei done
Die Datei wird nun im ursprünglichem Pfad wiederhergestellt.
Using tar to Perform Incremental Dumps im tar-Handbuch
Backup Your System - tar - nützliche tar-Parameter im englischen Ubuntu-Wiki
Diese Revision wurde am 18. Februar 2017 20:36 von asfuerst erstellt.