„tar“-Archivierung mit zstd- und LZ4-Kompression beschleunigen
Die Archivierung von Dateien ist in Entwicklungs-Workflows unverzichtbar, etwa für Backups, Deployments und Datenübertragungen. Der Befehl „tar“, ein Standardwerkzeug in Unix-artigen Systemen, wird häufig zur Dateiarchivierung eingesetzt. Während traditionelle Kompressionsverfahren wie gzip oder bzip2 bei großen Dateien langsam sein können, bieten moderne Kompressionsalgorithmen deutliche Leistungsverbesserungen. Dieser Leitfaden stellt fortgeschrittene „tar“-Techniken vor, die auf die Geschwindigkeitsoptimierung mit Zstd und LZ4 ausgerichtet sind.
Kompressionswerkzeuge installieren
Bevor Sie Zstd und LZ4 verwenden, installieren Sie sie auf Ihrem System:
# Ubuntu/Debian
sudo apt-get install zstd lz4
# Centos/rhel
sudo yum install zstd lz4
# macOS
brew install zstd lz4
Grundlegende „tar“-Befehle zum Archivieren und Entpacken von Dateien
Sehen Sie sich die grundlegenden „tar“-Befehle zum Archivieren und Entpacken an.
Ein Archiv erstellen
tar -cf archive.tar /path/to/directory
Erläuterung:
-c: Ein neues Archiv erstellen-f: Den Dateinamen des Archivs angeben
Ein Archiv entpacken
tar -xf archive.tar
Erläuterung:
-x: Dateien aus einem Archiv entpacken-f: Den Dateinamen des Archivs angeben
Vergleich der Kompressionsalgorithmen
Verschiedene Kompressionsverfahren bieten unterschiedliche Kompromisse:
- Zstd: Bietet die beste Balance zwischen Geschwindigkeit und Kompressionsrate
- LZ4: Liefert die schnellste Kompression und Dekompression, allerdings mit einer geringeren Kompressionsrate
- Gzip: Liefert gute Kompression, ist aber langsamer als Zstd oder LZ4
- Bzip2: Erreicht eine hohe Kompression, ist aber deutlich langsamer
Moderne Kompression mit „tar“ verwenden
Die Kompressionsunterstützung hängt von der „tar“-Implementierung ab, nicht nur von deren Version.
GNU tar unterstützt --zstd, während bsdtar zusätzlich --lz4 unterstützt. Prüfen Sie
tar --help; verwenden Sie die Beispiele mit Pipes, wenn eine Kompressionsoption nicht verfügbar ist.
Aktivieren Sie in Bash set -o pipefail, damit eine fehlgeschlagene Stufe die gesamte Pipeline
fehlschlagen lässt.
zstd-Kompression verwenden
Für neuere tar-Versionen mit direkter Zstd-Unterstützung:
tar --zstd -cf archive.tar.zst /path/to/directory
Für ältere tar-Versionen:
tar -cf - /path/to/directory | zstd > archive.tar.zst
Zum Entpacken:
# For newer Tar versions
tar --zstd -xf archive.tar.zst
# For older Tar versions
zstd -dc archive.tar.zst | tar -xf -
LZ4-Kompression verwenden
Für bsdtar mit direkter LZ4-Unterstützung:
tar --lz4 -cf archive.tar.lz4 /path/to/directory
Für ältere tar-Versionen:
tar -cf - /path/to/directory | lz4 > archive.tar.lz4
Zum Entpacken:
# For bsdtar with LZ4 support
tar --lz4 -xf archive.tar.lz4
# For older Tar versions
lz4 -dc archive.tar.lz4 | tar -xf -
Dateien und Verzeichnisse ausschließen
Schließen Sie beim Archivieren bestimmte Dateien oder Muster aus:
tar -cf archive.tar \
--exclude='*.log' \
--exclude='tmp/*' \
--exclude='node_modules' \
/path/to/directory
Inkrementelle Backups
Führen Sie inkrementelle Backups mithilfe von Snapshot-Dateien durch. Die Snapshot-Datei
(z. B. backup.snar) verfolgt die Änderungen zwischen den Backups, wobei ein Level-0-Backup ein
vollständiges Backup ist und nachfolgende Level die inkrementellen Änderungen speichern.
# Level 0 (full) backup
tar --create \
--file=backup-0.tar \
--listed-incremental=backup.snar \
/path/to/directory
# Level 1 (incremental) backup
tar --create \
--file=backup-1.tar \
--listed-incremental=backup.snar \
/path/to/directory
Selektives Archivieren mit „find“
Archivieren Sie Dateien, die bestimmten Kriterien entsprechen, sicher mithilfe nullterminierter Eingaben, um Dateinamen mit Leerzeichen und Sonderzeichen zu verarbeiten:
# Archive files modified in the last 7 days
find /path/to/directory -type f -mtime -7 -print0 | \
tar --null -cf archive.tar --files-from=-
Fehlerbehandlung und Überprüfung
Überprüfen Sie die Integrität von Archiven und behandeln Sie Fehler:
# Test archive integrity
tar -tf archive.tar.zst
# Extract with error checking
tar --extract \
--file=archive.tar.zst \
--warning=no-timestamp
Remote-Archivierung mit SSH
Erstellen und entpacken Sie Archive über SSH:
# Create remote archive
ssh user@remotehost "tar -cf - /path/to/directory" | \
zstd > archive.tar.zst
# Extract remote archive
ssh user@remotehost "zstd -dc archive.tar.zst" | \
tar -xf -
Große Archive aufteilen
Bewältigen Sie große Archive, indem Sie sie in handhabbare Teile aufteilen:
# Create and split archive (100MB chunks)
tar -cf - /path/to/directory | \
zstd | \
split -b 100M - archive.tar.zst.part-
# Reassemble and extract
cat archive.tar.zst.part-* | \
zstd -d | \
tar -xf -
Backups automatisieren
Erstellen Sie ein Backup-Skript mit Fehlerbehandlung:
#!/bin/bash
set -euo pipefail
DATE=$(date +%F)
BACKUP_DIR="/path/to/directory"
ARCHIVE_DIR="/path/to/backup"
ARCHIVE_NAME="backup-$DATE.tar.zst"
LOG_FILE="$ARCHIVE_DIR/backup-$DATE.log"
# Create backup with logging
tar --create \
--file=- "$BACKUP_DIR" | \
zstd > "$ARCHIVE_DIR/$ARCHIVE_NAME" 2>> "$LOG_FILE"
# Verify archive
tar -tf "$ARCHIVE_DIR/$ARCHIVE_NAME" >> "$LOG_FILE" 2>&1
Mit cron planen:
0 0 * * * /path/to/backup.sh
Fazit
Moderne Kompressionsalgorithmen wie Zstd und LZ4 verbessern die Leistung der „tar“-Archivierung erheblich. Wenn Sie diese Werkzeuge mit einer sauberen Fehlerbehandlung, Überprüfung und Automatisierung kombinieren, können Sie robuste und effiziente Backup-Lösungen für Ihren Entwicklungs-Workflow aufbauen.
Bei Transloadit setzen wir in unserem Dienst Dateikomprimierung auf effiziente Dateiarchivierung und moderne Kompressionsverfahren, um große Datenmengen wirkungsvoll zu verarbeiten.
