Komprimierung mit „tar“ und „pigz“ beschleunigen
In der Softwareentwicklung ist effizientes Archivieren von Dateien entscheidend, um Projekte zu
verwalten und Workflows zu optimieren. Der Befehl tar ist ein leistungsstarkes Werkzeug, mit dem
Entwickler mehrere Dateien und Verzeichnisse in einer einzigen Archivdatei bündeln können. Wenn wir
fortgeschrittene Techniken von tar beherrschen, können wir unsere Archivierungsprozesse
verbessern, Zeit sparen und unsere Entwicklungs-Workflows verschlanken.
tar und seine Bedeutung verstehen
Der Befehl tar (tape archive) gehört in Unix-artigen Systemen zum Standard, wenn es um das
Erstellen und Bearbeiten von Archivdateien geht. Er wird häufig für Backups, für die
Softwareverteilung und zum Zusammenfassen mehrerer Dateien zu einer einzigen verwendet, um die
Handhabung zu erleichtern. Dieser Leitfaden verwendet GNU tar v1.34 und pigz v2.8.
Grundlegende Befehle von tar
-
Ein Archiv erstellen:
tar -cf archive.tar /path/to/directory -
Ein Archiv entpacken:
tar -xf archive.tar -
Den Inhalt eines Archivs auflisten:
tar -tf archive.tar
Erweiterte Komprimierungsoptionen mit tar
Das Komprimieren von Archiven spart Speicherplatz und verkürzt die Übertragungszeiten. tar
unterstützt verschiedene Komprimierungsmethoden, sodass Sie zwischen Komprimierungsgeschwindigkeit
und Kompressionsrate abwägen können.
gzip verwenden
Die gebräuchlichste Komprimierungsmethode bei tar ist die Verwendung von gzip:
tar -czf archive.tar.gz /path/to/directory
Die Option -z weist tar an, das Archiv mit gzip zu komprimieren.
bzip2 verwenden
Für eine bessere Komprimierung auf Kosten der Geschwindigkeit verwenden Sie bzip2:
tar -cjf archive.tar.bz2 /path/to/directory
Die Option -j verwendet bzip2 für die Komprimierung.
xz verwenden
Für die maximale Kompressionsrate:
tar -cJf archive.tar.xz /path/to/directory
Die Option -J verwendet xz, das höhere Kompressionsraten als gzip oder bzip2 bietet,
allerdings bei geringerer Komprimierungsgeschwindigkeit.
Komprimierung mit pigz beschleunigen
Herkömmliche Komprimierungswerkzeuge wie gzip nutzen nur einen einzigen CPU-Kern, was auf
modernen Mehrkernsystemen zum Engpass werden kann. pigz (Parallel Implementation of GZip) löst
dies, indem es mehrere Kerne für die Komprimierung nutzt.
pigz installieren
Unter Ubuntu/Debian
sudo apt-get update
sudo apt-get install pigz
Unter macOS (mit Homebrew)
brew install pigz
Unter CentOS/RHEL
sudo yum update
sudo yum install pigz
tar mit pigz verwenden
Um pigz mit tar zu verwenden, geben Sie es als Komprimierungsprogramm an:
tar -I pigz -cf archive.tar.gz /path/to/directory
Für maximale Komprimierung können Sie die Komprimierungsstufe angeben:
tar -I 'pigz -9' -cf archive.tar.gz /path/to/directory
Dateien und Verzeichnisse ausschließen
Beim Erstellen von Archiven möchten Sie möglicherweise bestimmte Dateien oder Verzeichnisse ausschließen, die nicht benötigt werden oder zu groß sind.
Eine einzelne Datei oder ein einzelnes Verzeichnis ausschließen
tar -czf archive.tar.gz --exclude='*.log' /path/to/directory
Dieser Befehl schließt alle Dateien aus, die auf .log enden.
Eine Ausschlussdatei verwenden
Erstellen Sie eine Datei exclude.txt mit den auszuschließenden Mustern:
*.log
node_modules
.git
Verwenden Sie dann die Option --exclude-from:
tar -czf archive.tar.gz --exclude-from='exclude.txt' /path/to/directory
Inkrementelle Backups mit tar
tar kann inkrementelle Backups durchführen, indem nur Dateien archiviert werden, die sich seit
dem letzten Backup geändert haben. Die Snapshot-Datei, etwa backup.snar, muss zwischen den Backups
erhalten bleiben, damit der inkrementelle Verlauf bestehen bleibt.
Ein vollständiges Backup erstellen
tar --listed-incremental=backup.snar -czf backup-full.tar.gz /path/to/directory
Ein inkrementelles Backup durchführen
tar --listed-incremental=backup.snar -czf backup-incremental-$(date +%F).tar.gz /path/to/directory
Stellen Sie sicher, dass die Snapshot-Datei (z. B. backup.snar) zwischen den
Backups nicht gelöscht wird; andernfalls werden nachfolgende Backups zu vollständigen statt zu
inkrementellen Backups.
Archivieren über ssh: Remote-Backups
Sie können mit SSH Archive auf entfernten Systemen erstellen oder Archive über das Netzwerk übertragen.
Ein entferntes Verzeichnis lokal archivieren
Erstellen Sie ein Archiv eines entfernten Verzeichnisses mit maximaler Komprimierung und speichern Sie es lokal:
ssh user@remote "tar -I 'pigz -9' -cf - /path/to/remote/directory" > archive.tar.gz
Wenn Sie pv (Pipe Viewer) installiert haben, können Sie die Übertragung zur Fortschrittsanzeige
überwachen:
ssh user@remote "tar -I 'pigz -9' -cf - /path/to/remote/directory" | pv > archive.tar.gz
Ein lokales Verzeichnis auf einem entfernten Host archivieren
Erstellen Sie ein Archiv eines lokalen Verzeichnisses und speichern Sie es auf einem entfernten Host:
tar -I 'pigz -9' -cf - /path/to/directory | ssh user@remote "cat > /path/to/save/archive.tar.gz"
Oder mit Fortschrittsüberwachung mithilfe von pv:
tar -I 'pigz -9' -cf - /path/to/directory | pv | ssh user@remote "cat > /path/to/archive.tar.gz"
tar mit find für selektives Archivieren kombinieren
Mit find können Sie Dateien anhand von Kriterien wie Änderungszeit oder Größe gezielt in ein
Archiv aufnehmen.
Beispiel: Dateien archivieren, die in den letzten 7 Tagen geändert wurden
find /path/to/directory -type f -mtime -7 -print0 | tar -czf archive.tar.gz --null -T -
Die Optionen --null -T - weisen tar an, Dateinamen von der Standardeingabe zu lesen, getrennt durch
Nullzeichen.
Große Archive in kleinere Teile aufteilen
Bei sehr großen Archiven müssen Sie diese unter Umständen in kleinere Teile aufteilen, um sie zu speichern oder zu übertragen.
Ein Archiv aufteilen
tar -czf - /path/to/directory | split -b 500M - archive_part_
Dieser Befehl erstellt komprimierte Archivteile von jeweils 500 MB mit den Namen archive_part_aa,
archive_part_ab usw.
Das Archiv wieder zusammensetzen
cat archive_part_* > archive.tar.gz
Aufgaben mit tar in Ihrem Entwicklungs-Workflow automatisieren
Das Automatisieren von Archivierungsaufgaben spart Zeit und sorgt für Konsistenz.
Beispiel für ein Bash-Skript
Erstellen Sie ein Skript backup.sh:
#!/bin/bash
TIMESTAMP=$(date +%F)
BACKUP_DIR="/path/to/backup"
SOURCE_DIR="/path/to/directory"
EXCLUDE_FILE="/path/to/exclude.txt"
tar -I 'pigz -9' -cf "$BACKUP_DIR/backup-$TIMESTAMP.tar.gz" \
--exclude-from="$EXCLUDE_FILE" "$SOURCE_DIR"
if [ $? -ne 0 ]; then
echo "Backup failed" >&2
exit 1
fi
echo "Backup successful: $BACKUP_DIR/backup-$TIMESTAMP.tar.gz"
Machen Sie das Skript ausführbar:
chmod +x backup.sh
Planung mit cron
Planen Sie das Skript so, dass es täglich um Mitternacht ausgeführt wird, indem Sie Ihre crontab bearbeiten:
crontab -e
Fügen Sie dann die folgende Zeile hinzu:
0 0 * * * /path/to/backup.sh
Bewährte Verfahren für effizientes Archivieren von Dateien
- Regelmäßige Backups: Planen Sie Backups regelmäßig ein, um sich vor Datenverlust zu schützen.
- Unnötige Dateien ausschließen: Verwenden Sie die Optionen
--exclude, um zu vermeiden, dass nicht benötigte Dateien archiviert werden. - Backup-Prozesse überwachen: Prüfen Sie Logs oder richten Sie Benachrichtigungen ein, um sicherzustellen, dass Backups erfolgreich abgeschlossen werden.
- Backups sicher speichern: Speichern Sie Backups an sicheren, redundanten Speicherorten.
- Archive verifizieren: Prüfen Sie nach dem Erstellen eines Archivs dessen Integrität mit einem
Befehl wie
tar -tf archive.tar.gz. - Parallele Komprimierung nutzen: Setzen Sie
pigzauf Mehrkernsystemen für eine schnellere Komprimierung ein. - Speicherbedarf beachten: Hohe Komprimierungsstufen mit
pigzkönnen den Speicherverbrauch erhöhen. Passen Sie die Komprimierungsstufe an (z. B. von -9 auf eine niedrigere Stufe), wenn der Speicher knapp ist. - Abläufe dokumentieren: Pflegen Sie eine klare Dokumentation für Backup- und Wiederherstellungsprozesse.
Mit diesen fortgeschrittenen Techniken von tar können Sie effiziente, automatisierte
Backup-Lösungen erstellen, die Ihre Daten schützen und gleichzeitig die Systemressourcen optimal
nutzen.
