Backupscript
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Ubuntu 20.04 Focal Fossa
Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
Mit diesem Skript lassen sich leicht mehrere Verzeichnisse packen und in ein anderes Verzeichnis kopieren. Dieses Verzeichnis sollte auf einer anderen Festplatte oder auf einem Server liegen. Die Verzeichnisse werden mit tar in ein Archiv gepackt und bzip2-komprimiert. Für regelmäßige Datensicherungen siehe auch Inkrementelles Backup.
Erstellen des Skripts¶
Zuerst erstellt man ein neues Verzeichnis bin im Home-Verzeichnis für das Skript, falls dieses noch nicht existiert. Danach ö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 | #!/bin/bash DATE=$(date +%Y-%m-%d-%H%M%S) # pfad sollte nicht mit "/" enden! # Dies ist nur ein Beispiel - bitte an eigene Bedürfnisse anpassen. # Man muss im entsprechenden Verzeichnis schreibberechtigt sein. BACKUP_DIR="/mnt/backup" # Hier Verzeichnisse auflisten, die gesichert werden sollen. # Dies ist nur ein Beispiel - bitte an eigene Bedürfnisse anpassen. # Bei Verzeichnissen, für die der User keine durchgehenden Leserechte hat (z.B. /etc), treten Fehler auf. # Pfade sollten nicht mit "/" enden! SOURCE="$HOME/bin $HOME/.gaim " tar -cjpf $BACKUP_DIR/backup-$DATE.tar.bz2 $SOURCE |
Diese Datei speichert man im bin-Verzeichnis unter dem Namen backup. Nun exportiert man entweder einmalig den Pfad
export PATH=$PATH:$HOME/bin
oder öffnet ein neues Terminal, der Pfad wird dann automatisch hinzugefügt.
Konfiguration¶
Das Backup-Verzeichnis (im Skript BACKUP_DIR genannt) gibt das Verzeichnis an in dem das Archiv erstellt werden soll. Es sollte zumindest auf einer anderen Festplatte liegen, besser noch auf einem anderen PC, welcher ins Dateisystem eingebunden wurde.
Achtung!
Sollen Verzeichnisse wie /etc gesichert werden, für die nur root durchgehende Leserechte hat, so muss das Skript mit sudo gestartet werden.
Die zu sichernden Verzeichnisse werden in der Variablen SOURCE
angegeben. Es sollte kein "/" am Ende der Verzeichnisse stehen und es muss ein Leerzeichen vor dem abschließenden " sein.
Manchmal möchte man bestimmte Unterverzeichnisse aus /home/$user vom Backup ausschliessen, weil sie z.B. zu groß sind oder anderweitig in Backup-Prozesse eingebunden sind. Dazu kann die Option --exclude
verwendet werden, mit den Namen der auszuschliessenden Verzeichnisse:
tar -cjpf $BACKUP_DIR/backup-$DATE.tar.bz2 $SOURCE --exclude="VirtualBox VMs" --exclude=".icedove"
Aufrufen des Skripts¶
Das Skript muss vor der Nutzung noch ausführbar gemacht werden [3], dazu im Terminal [1] folgendes eingeben:
chmod u+x $HOME/bin/backup
Das Skript lässt sich jetzt mit folgendem Befehl starten:
backup
Backup automatisch verschlüsseln¶
Bei der Erstellung eines Backups bietet es sich aus verschiedenen Gründen an, dieses automatisch zu verschlüsseln. Dazu gibt es mehrere Möglichkeiten:
Truecrypt/dm_crypt¶
Wer verschlüsselte Dateisysteme, z.B. mit Hilfe von Truecrypt oder LUKS benutzt, kann einfach ein Verzeichnis auf dem verschlüsselten Laufwerk als Zielort für das Backup (s.o.) angeben.
Symmetrisch mit GnuPG¶
Um eine verschlüsselte Backup-Datei zu erstellen, kann man das Tar-Archiv im Skript direkt in die symmetrische Verschlüsselung von GnuPG pipen. Dazu ersetzt man im Skript einfach die Tar-Zeile mit dieser:
1 | tar -cjp $SOURCE | gpg -z 0 -c > $BACKUP_DIR/backup-$DATE.tar.bz2.gpg |
Man wird beim Ausführen des Backup-Skriptes dann nach einem Passwort gefragt, mit welchem das Backup verschlüsselt wird. Dadurch erhält man dann zum Beispiel eine Datei backup-2007-11-24-170024.tar.bz2.gpg. Diese entschlüsselt man wieder mit dem Befehl:
gpg --output backup-2007-11-24-170024.tar.bz2 --decrypt backup-2007-11-24-170024.tar.bz2.gpg
Weitere Optionen zur symmetrischen Verschlüsselung von GnuPG findet man in den Manpages von gpg.
Asymmetrisch mit GnuPG¶
Achtung!
Es ist sinnlos, auf diese Weise auch die GnuPG-Schlüssel zu sichern. Im Falle eines Datenverlusts wird zum zurückspielen (bzw. entschlüsseln) des Backups der eigene GnuPG-Schlüssel benötigt. Wenn man seine GnuPG-Schlüssel sichern möchte sollte man also eine symmetrische Verschlüsselung wählen.
Wer einen GnuPG-Schlüssel hat, kann das Backup mit dem eigenen öffentlichen Schlüssel verschlüsseln. Dann ist im Vergleich zur symetrischen Methode zum erstellen des Backups keine Passworteingabe nötig. Die tar- Zeile im Skript lautet dafür:
1 | tar -cjp $SOURCE | gpg -z 0 --encrypt -r DEINE_SCHLÜSSEL_KENNUNG > $BACKUP_DIR/backup-$DATE.tar.bz2.gpg |
Wobei die Schlüssel-Kennung zum Beispiel in Form der Email-Adresse eingegeben werden kann.
tar - Entferne führende „/“ von Elementnamen¶
(engl. "tar: Removing leading '/' from member names")
Wenn diese Meldung erscheint, bedeutet es, dass man mit absoluten Pfadnamen arbeitet, wie zB /etc, /usr/share aber auch die $HOME-Variable ist ein absoluter Pfad. Tar liefet eine Meldung diesbezüglich, weil es bei absoluten Pfaden passieren kann, dass beim Entpacken des Backups automatisch die alten Ordner überschrieben werden, was nicht immer gewünscht ist. Um diese Meldung zu entfernen, verwendet man relative Pfadnamen also etc und usr/share und benutzt anstatt $HOME eine eigene Variable HOMEPATH="home/$USER"
. Vor dem Ausführen von Tar in dem Skript muss man jetzt noch, damit die Ordner gefunden werden, ins Root-Verzeichnis wechseln mit cd /
. Ein Skript, welches diese Warnung nicht bringt, könnte zum Beispiel so aussehen:
1 2 3 4 5 6 7 | #!/bin/bash DATE=$(date +%Y-%m-%d-%H%M%S) BACKUP_DIR="mnt/backup" HOMEPATH="home/$USER" SOURCE="$HOMEPATH/bin $HOMEPATH/.gaim " cd / tar -cjpf $BACKUP_DIR/backup-$DATE.tar.bz2 $SOURCE |
Das entfernen des führenden "/" könnte man mit der Option "-P" ausschalten, aber Vorsicht wenn man sich entschließt dies zu tun kann man die Dateien und Ordner nicht mehr an einem beliebigen Ort wieder herstellen. Tar wird sie dann nämlich immer vom Root-Verzeichnis "/" ausgehend entpacken.
Um die Meldung zu umgehen kann man die Option "-C /" benutzen um ins Root-Verzeichnis zu wechseln und dann beim Quellordner den anführenden / weglassen. Beispiel:
1 | tar -cjpf /home/$(whoami)/pidgin-backup.tar.bz2 -C / home/$(whoami)/.purple |