Datensicherung
Warum sichern
Abschnitt betitelt „Warum sichern“Drei Dinge passieren garantiert, nur der Zeitpunkt ist offen:
- Hardware stirbt. Festplatten und SSDs fallen aus, oft ohne Vorwarnung.
- Menschen machen Fehler.
rm -rfim falschen Verzeichnis, ein Skript mit einer leeren Variable, ein Update, das die Konfiguration überschreibt. - Ransomware verschlüsselt. Und sie verschlüsselt alles, was vom befallenen System aus erreichbar ist, auch die «Sicherung» auf der angeschlossenen USB-Platte oder dem gemounteten Netzlaufwerk.
Eine Datensicherung (Backup) ist eine Kopie, die zu einem anderen Zeitpunkt entstanden ist und an einem anderen Ort liegt. Ein RAID ist kein Backup (es spiegelt den Fehler sofort mit), ein Snapshot ist kein Backup (er liegt auf derselben Platte), und eine Cloud-Synchronisation ist kein Backup (sie synchronisiert auch das Löschen).
Sicherungsarten
Abschnitt betitelt „Sicherungsarten“| Art | Was wird gesichert | Vorteile | Nachteile |
|---|---|---|---|
| Vollsicherung | Alles | Ein einziges Set, einfacher Restore | Viel Zeit, viel Platz |
| Inkrementell | Alles seit der letzten Sicherung (egal welcher Art) | Schnell, wenig Platz | Restore braucht die Vollsicherung und alle Inkremente in der richtigen Reihenfolge |
| Differenziell | Alles seit der letzten Vollsicherung | Restore braucht nur zwei Sets (Voll + letztes Differenzial) | Jeden Tag etwas grösser und langsamer als inkrementell |
flowchart LR
subgraph inkrementell
direction LR
A1[So<br/>Voll] --> A2[Mo<br/>seit So]
A2 --> A3[Di<br/>seit Mo]
A3 --> A4[Mi<br/>seit Di]
end
subgraph differenziell
direction LR
B1[So<br/>Voll]
B1 --> B2[Mo<br/>seit So]
B1 --> B3[Di<br/>seit So]
B1 --> B4[Mi<br/>seit So]
end
Der Pfeil zeigt jeweils, worauf sich eine Sicherung bezieht. Fällt bei der inkrementellen Kette ein Glied aus, fehlt ab dort alles. Beim differenziellen Verfahren ist jedes Set für sich zusammen mit der Vollsicherung vollständig. Das Backup-Skript in Teil 4 arbeitet darum differenziell: eine Vollsicherung pro Monat, dazwischen täglich die Differenz.
Die 3-2-1-Regel
Abschnitt betitelt „Die 3-2-1-Regel“- 3 Kopien der Daten (das Original zählt mit).
- Auf 2 verschiedenen Medien oder Systemen.
- 1 davon an einem anderen Ort (andere Brandzone, anderes Rechenzentrum, anderes Haus).
Für deine Server-VM heisst das zum Beispiel: Daten auf der VM, Archiv auf einer zweiten Disk oder im Proxmox-Backup, und eine Kopie per rsync auf ein System, das nicht am selben Ort steht.
tar: das Archivwerkzeug
Abschnitt betitelt „tar: das Archivwerkzeug“tar («tape archiver», aus der Zeit der Magnetbänder) packt Verzeichnisbäume mit allen Rechten, Besitzern und Zeitstempeln in eine Datei. Es ist auf jedem Unix vorhanden und das Standardformat für Linux-Archive. Die wichtigsten Optionen:
| Option | Bedeutung |
|---|---|
-c / -x / -t |
create, extract, list (eine davon, immer) |
-f DATEI |
Archivdatei (sonst versucht tar ein Bandlaufwerk) |
-v |
verbose, zeigt die Dateien an |
-z / -j / -J |
komprimieren mit gzip (.tar.gz), bzip2 (.tar.bz2), xz (.tar.xz) |
--zstd |
komprimieren mit zstd (.tar.zst), schnell und gut |
--exclude=MUSTER |
auslassen, Muster wird auf jeden Pfadteil angewendet |
--newer=DATEI |
nur Dateien, die neuer sind als diese Datei (oder ein Datum) |
-C VERZ |
vor der Arbeit nach VERZ wechseln |
Hands-on: Sichere dein Home-Verzeichnis. Das Ziel liegt für die Übung unter /tmp/backup, in echt wäre es eine andere Disk.
- Eine Datei anlegen, an der du den Restore später erkennst:
Server-VM echo "wichtige Notiz vom $(date)" > ~/notiz.txtmkdir -p /tmp/backup - Archiv erstellen.
-C /homeplus$USERergibt Pfade wiealice/notiz.txtim Archiv:Server-VM tar -czvf "/tmp/backup/home-$(date +%F).tar.gz" -C /home --exclude=.cache "$USER"ls -lh /tmp/backup/ - Inhalt ansehen, ohne auszupacken. Das machst du vor jedem Restore:
Server-VM tar -tzvf "/tmp/backup/home-$(date +%F).tar.gz" | headtar -tzf "/tmp/backup/home-$(date +%F).tar.gz" | grep notiz - Datei löschen und aus dem Archiv zurückholen. Nicht direkt nach
/home, sondern in ein Restore-Verzeichnis, von dort kopierst du gezielt zurück:Server-VM rm ~/notiz.txtmkdir -p /tmp/restoretar -xzvf "/tmp/backup/home-$(date +%F).tar.gz" -C /tmp/restore "$USER/notiz.txt"cat "/tmp/restore/$USER/notiz.txt"cp "/tmp/restore/$USER/notiz.txt" ~/ - Differenz seit der Vollsicherung. Die Zeitstempeldatei markiert den Zeitpunkt der Vollsicherung:
Verzeichnisse erscheinen immer (tar sichert ihre Metadaten mit), Dateien nur die geänderte
Server-VM touch /tmp/backup/vollsicherung.stampecho "zweite Zeile" >> ~/notiz.txttar -czvf /tmp/backup/home-diff.tar.gz -C /home --newer=/tmp/backup/vollsicherung.stamp "$USER"tar -tzf /tmp/backup/home-diff.tar.gznotiz.txt.
Was erwartest du bei Schritt 4, wenn du den Pfad notiz.txt ohne $USER/ angibst? Probiere es aus und lies die Fehlermeldung.
gzip und zstd
Abschnitt betitelt „gzip und zstd“tar -z ruft intern gzip auf. Du kannst die Programme auch direkt verwenden, zum Beispiel für Logdateien oder Datenbank-Dumps:
cp /var/log/dpkg.log /tmp/dpkg.loggzip /tmp/dpkg.log # ergibt dpkg.log.gz, Original ist wegzcat /tmp/dpkg.log.gz | head # lesen ohne auszupackengunzip /tmp/dpkg.log.gzzstd (sudo apt install zstd) komprimiert bei gleicher Grösse deutlich schneller als gzip und wird von tar --zstd unterstützt. Für neue Skripte ist es die bessere Wahl, gzip ist überall vorhanden.
dd: ganze Datenträger
Abschnitt betitelt „dd: ganze Datenträger“dd kopiert Blöcke, nicht Dateien. Damit klonst du eine ganze Disk oder Partition, inklusive Bootsektor:
sudo dd if=/dev/sdb of=/backup/sdb.img bs=4M status=progressDatenbanken: dumpen statt kopieren
Abschnitt betitelt „Datenbanken: dumpen statt kopieren“Eine laufende Datenbank schreibt dauernd. Kopierst du ihre Dateien unter /var/lib/mysql oder /var/lib/postgresql, erwischst du einen inkonsistenten Zwischenstand, der sich oft nicht mehr laden lässt. Stattdessen erzeugst du mit dem Werkzeug der Datenbank einen Dump, eine SQL-Textdatei, und sicherst diese wie jede andere Datei:
mysqldump --single-transaction meinedb | gzip > /backup/meinedb.sql.gzpg_dump meinedb | gzip > /backup/meinedb.sql.gzDer Restore ist der umgekehrte Weg: zcat meinedb.sql.gz | mysql meinedb beziehungsweise psql meinedb. In Modul 11 kommt das mit einem Container-Projekt zum Einsatz.
Komplettlösungen
Abschnitt betitelt „Komplettlösungen“Für mehr als ein paar Verzeichnisse nimmst du ein fertiges Werkzeug, statt alles selbst zu bauen:
- restic und BorgBackup: Deduplizierung, Verschlüsselung, Versionierung, Ziel kann ein lokaler Pfad, SSH oder Objektspeicher sein. Erste Wahl für eigene Server.
- BackupPC: Zentraler Backup-Server mit Weboberfläche, holt sich die Daten von den Clients.
- Proxmox Backup Server: Sichert ganze VMs und Container des Proxmox-Clusters, inkrementell und dedupliziert.
- Snapshots (Proxmox, LVM, ZFS, btrfs): Ideal vor einem Update, um in einer Minute zurück zu sein. Aber kein Backup: Sie liegen auf derselben Platte wie die Daten.
Lösung anzeigen
script labs/linux/10-remote-backup/tar.txtmkdir -p ~/projekt/altecho eins > ~/projekt/a.txt; echo zwei > ~/projekt/b.txt; echo alt > ~/projekt/alt/c.txtmkdir -p /tmp/backup /tmp/restoretar -czvf /tmp/backup/projekt.tar.gz -C ~ --exclude=projekt/alt projekttar -tzvf /tmp/backup/projekt.tar.gzrm ~/projekt/a.txttar -xzvf /tmp/backup/projekt.tar.gz -C /tmp/restore projekt/a.txtcat /tmp/restore/projekt/a.txt# 5: Der Snapshot liegt auf demselben Storage wie die VM; stirbt der, ist beides weg.# Eine Kopie gehört auf ein anderes System und eine davon an einen anderen Ort.exitSelbstcheck · 5 Fragen
Weiterführend
Abschnitt betitelt „Weiterführend“man tar, besonders der Abschnitt zu--excludeund--newer- restic-Dokumentation