Tar Mastery: Archiving & Compression (Artikel 277)
Beherrschung des tar-Werkzeugs unter Linux. Erfahren Sie alles über das Erstellen von Archiven, die Wahl der richtigen Kompression (Gzip, XZ, Zstd) und die effiziente Datensicherung.
# Tar Mastery: Mehr als nur ‘Zusammenpacken’
TL;DR / Management Summary Der Befehl tar (Tape Archiver) ist das Rückgrat des Linux-Datei-Managements. Ob für Software-Distributionen, System-Backups oder den Dateitransfer:
tarbündelt tausende Dateien in einen einzelnen Stream. Ein Senior Admin muss nicht nur die Flags im Schlaf beherrschen, sondern auch wissen, wann er Gzip (schnell), XZ (klein) oder Zstd (modern & effizient) zur Kompression wählt.
# 1. Einführung & Architektur
Archivierung vs. Kompression.
- Archivierung: Fasst viele Dateien zu einer Datei zusammen, behält Berechtigungen und Pfade bei.
- Kompression: Reduziert die Dateigröße durch mathematische Algorithmen.
# Der Tar-Workflow (Mermaid)
graph TD
A[Multiple Files / Folders] --> B[tar -c: Create Archive]
B --> C[Tarball: data.tar]
C --> D{Compression?}
D -->|gzip -z| E[data.tar.gz]
D -->|xz -J| F[data.tar.xz]
D -->|zstd --zstd| G[data.tar.zst]
subgraph "Efficiency"
E --- E1[Fast / Low Ratio]
F --- F1[Slow / High Ratio]
G --- G1[Very Fast / High Ratio]
end
# 2. Die wichtigsten Befehle
Das tägliche Handwerkszeug.
# Archiv erstellen (-c)
# -c: create, -v: verbose, -f: file, -z: gzip
tar -cvzf backup.tar.gz /etc/nginx
# Archiv entpacken (-x)
# -x: extract, -C: Zielverzeichnis
sudo tar -xvzf backup.tar.gz -C /mnt/restore
# Inhalt auflisten (-t)
Wichtig: Schauen Sie immer erst ins Archiv, bevor Sie es entpacken!
tar -tvf backup.tar.gz
# 3. Fortgeschrittene Techniken
Präzision beim Packen.
# Verzeichnisse ausschließen
# Sichert /var/www, aber ohne den Cache-Ordner
tar -cvzf site_backup.tar.gz --exclude='/var/www/html/cache' /var/www/html
# Inkrementelle Backups (Snapshot-File)
Tar kann sich merken, welche Dateien bereits gesichert wurden.
tar -cvzf backup_inc.tar.gz -g /var/log/tar-snapshot.snar /data
# 4. Day-2 Operations: Moderne Kompression (Zstd)
Die Zukunft unter Arch & Fedora.
Zstandard (Zstd) bietet ein ungeschlagenes Verhältnis zwischen Geschwindigkeit und Kompression.
# Erstellen eines Zst-Archivs
tar --zstd -cf archive.tar.zst /my/big/data
# 5. Troubleshooting & “War Stories”
Wenn der Pfad die Falle ist.
# Story 1: “Der absolute Pfad Albtraum”
Symptom: Ein Admin entpackt ein Backup und überschreibt dabei versehentlich sein Live-System.
Ursache: Das Archiv wurde mit absoluten Pfaden erstellt (tar -cf backup.tar /etc). Beim Entpacken landet alles wieder in /etc, egal in welchem Ordner man sich befindet.
Lösung: Nutzen Sie immer relative Pfade (cd / && tar -cf backup.tar etc) oder nutzen Sie das Flag -P (absolute names) nur, wenn Sie genau wissen, was Sie tun. Moderne Tar-Versionen entfernen das führende / standardmäßig.
# Story 2: “Der hängende Mount (NFS)”
Symptom: tar bleibt mitten im Archivieren hängen und verbraucht 100% CPU.
Ursache: Das Archiv liegt auf einem NFS-Share, der die Verbindung verloren hat. Tar wartet auf den I/O-Flush.
Lösung: Nutzen Sie das Flag --checkpoint=1000 --checkpoint-action=echo="%u" um zu sehen, wie weit Tar ist, und nutzen Sie lokale Puffer (SSD), bevor Sie Daten auf langsame Netzlaufwerke schieben.
# 6. Fazit & Empfehlung
- Wahl: Nutzen Sie Zstd für tägliche Backups (Standard in Arch).
- Wahl: Nutzen Sie XZ für Software-Releases, die selten geladen werden, aber minimal klein sein müssen.
- Best Practice: Nutzen Sie immer
-atvf, um den Inhalt eines Archivs zu prüfen, bevor Sie es entpacken. Es verhindert “Zip-Bombs” oder das Zumüllen des aktuellen Verzeichnisses.
# Anhang: Cheatsheet
| Aufgabe | Flag | Beispiel |
|---|---|---|
| Erstellen | -c |
tar -cf ... |
| Entpacken | -x |
tar -xf ... |
| Auflisten | -t |
tar -tf ... |
| Gzip | -z |
.tar.gz |
| Bzip2 | -j |
.tar.bz2 |
| XZ | -J |
.tar.xz |
| Zstd | --zstd |
.tar.zst |
| Verbose | -v |
Zeigt Fortschritt |
| Zielordner | -C |
tar -xf ... -C /target |
| Permission behalten | -p |
Behält chmod/chown |
| Dateiliste aus File | -T |
tar -cf backup.tar -T list.txt |