Tutoriel Linux

Komprimieren Sie eine Datei mit xz unter Linux, ohne das Original zu verlieren

Débutant7 min de lecture

Sie müssen ein Disk-Image, ein SQL-Dump, einen CSV-Export oder ein Roh-Backup vor einem Transfer komprimieren. xz reduziert oft besser die Größe als gzip, benötigt jedoch mehr CPU und kann bei hohen Stufen viel Speicher benötigen.

Verwenden Sie xz für eine einzelne, große und wenig komprimierte Datei. Vermeiden Sie es für ein JPEG-Foto, ein MP4-Video, ein .zip-Archiv, ein .deb-Paket oder eine Datei, deren Name bereits mit .gz, .xz oder .zst endet.

Die folgenden Schritte beschreiben die Erstellung eines .xz-Archivs, die Beibehaltung der Quelldatei, den Integritätstest, die Wahl des Komprimierungsgrades und die Überprüfung einer entfernten Kopie.

Linux-Archiv komprimiert mit xz und Tux vor einem Server
Kompression eines Linux-Archivs mit xz vor Transfer oder Speicherung.

Überprüfen, ob xz verfügbar ist

Die meisten Distributionen installieren xz standardmäßig über das Paket xz-utils oder xz. Überprüfen Sie den Befehl, bevor Sie ihn in ein Backup-Verfahren integrieren.

xz --version

Unter Debian, Ubuntu und Linux Mint installieren Sie das Paket, falls der Befehl fehlt.

sudo apt update
sudo apt install xz-utils

Unter Fedora, AlmaLinux oder Rocky Linux installieren Sie das Paket mit dnf.

sudo dnf install xz

Wählen Sie xz, gzip oder zip

xz komprimiert eine einzelne Datei mit LZMA2. Es eignet sich für einen SQL-Dump, einen Text-Export, ein unkomprimiertes Disk-Image, eine konsolidierte Protokolldatei oder ein bereits erzeugtes .tar-Archiv.

  • Wählen Sie xz, wenn die Größenreduktion wichtiger ist als die Geschwindigkeit.
  • Wählen Sie gzip, wenn Sie eine schnelle Kompression in einem Skript, einem Pipeline oder einer Protokollrotation wünschen.
  • Wählen Sie zip, wenn Sie mehrere Dateien in einem einfach unter Windows zu öffnenden Format bündeln müssen.
  • Wählen Sie tar vor xz, wenn Sie eine Linux-Verzeichnisstruktur mit ihren Verzeichnissen, Namen und Berechtigungen bewahren müssen.

xz allein bündelt keine mehreren Dateien. Um einen Ordner zu komprimieren, erstellen Sie zuerst ein tar-Archiv und komprimieren Sie es dann mit xz.

tar -cf projekt.tar projekt/
xz -k projekt.tar

Der tar-Befehl kann auch direkt projekt.tar.xz erstellen.

tar -cJf projekt.tar.xz projekt/

Überprüfen Sie die Datei vor der Kompression

Überprüfen Sie den Typ und die Größe der Datei, bevor Sie eine lange Kompression durchführen. Eine bereits komprimierte Datei kann die CPU beanspruchen, ohne nennenswerte Einsparungen zu erzielen.

file backup.sql
ls -lh backup.sql

Wenn file gzip compressed data, XZ compressed data, Zip archive data, JPEG image data oder ISO Media anzeigt, testen Sie zuerst an einer kleinen Stichprobe.

Komprimieren unter Beibehaltung der Quelldatei

Ohne Option ersetzt xz backup.sql backup.sql durch backup.sql.xz. Fügen Sie -k hinzu, um das Original während der Kontrollen zu behalten.

xz -k backup.sql

Fügen Sie -v hinzu, um den Fortschritt, das Verhältnis und nützliche Informationen während der Ausführung anzuzeigen.

xz -k -v backup.sql

Überprüfen Sie anschließend, ob beide Dateien vorhanden sind, und vergleichen Sie ihre Größe.

ls -lh backup.sql backup.sql.xz

Wenn Sie das Original nicht löschen, weil die Datei .xz existiert. Testen Sie das Archiv und bestätigen Sie die Wiederherstellung, bevor Sie eine Löschung vornehmen.

Wählen Sie einen Komprimierungsgrad

Der Standardgrad von xz ist -6. Er bietet oft ein gutes Verhältnis, ist jedoch möglicherweise nicht für eine leistungsschwache Maschine oder eine dringende Wiederherstellung geeignet.

  • Verwenden Sie -1 bis -3, wenn die Geschwindigkeit zählt und das maximale Ergebnis nicht Priorität hat.
  • Behalten Sie -6 für den allgemeinen Gebrauch auf einem komfortablen Computer.
  • Reservieren Sie -7 bis -9 für große Dateien, die Sie selten archivieren und auf einer ausreichend ausgestatteten Maschine auch entpacken können.
xz -3 -k export.csv
xz -6 -k backup.sql
xz -9 -k archive.img

Hohe Stufen können den Speicherbedarf für die Kompression und Dekompression erhöhen. Vermeiden Sie -9 für ein Archiv, das auf einem kleinen VPS, einer alten Maschine oder einem minimalen Notfallsystem geöffnet werden musste.

CPU-Nutzung auf einem Server begrenzen

Die Option -T steuert die Anzahl der Threads. -T0 verwendet alle verfügbaren Kerne, was eine Datenbank, einen Webserver oder aktive Container verlangsamen kann.

xz -6 -T2 -k backup.sql

Auf einem Produktionsserver beginnen Sie mit -T1 oder -T2. Überwachen Sie die Belastung und erhöhen Sie nur, wenn der Server reaktionsfähig bleibt.

uptime
top

Für eine geplante Kompression führen Sie sie außerhalb der Spitzenzeiten aus und überprüfen Sie den freien Speicherplatz vor dem Start. Die Option -k hält zwei Dateien und benötigt mehr Speicherplatz.

df -h .

Überprüfen Sie die Integrität des Archivs

Testen Sie immer das Archiv mit xz -t, bevor Sie das Original löschen oder ein Backup bestätigen. Der Befehl liest die Daten im Speicher und dekomprimiert sie, ohne eine Ausgabedatei zu erstellen.

xz -t backup.sql.xz
echo $?

Ein Rückgabewert 0 zeigt an, dass der xz-Test erfolgreich war. Ein anderer Code zeigt einen Fehler an und macht es notwendig, die Quelldatei beizubehalten.

Zeigen Sie anschließend die Metadaten des Archivs an, um die unkomprimierte Größe, die komprimierte Größe, das Verhältnis und die Art der Integritätsprüfung zu überprüfen.

xz -l backup.sql.xz

xz -t überprüft, dass das Archiv gelesen werden kann. Es beweist nicht, dass eine entfernte Kopie identisch mit der lokalen Datei ist.

Überprüfen Sie einen Transfer mit SHA-256

Berechnen Sie einen SHA-256-Hash vor dem Transfer, kopieren Sie das Archiv und berechnen Sie dann die Hash-Werte am Zielort neu. Beide Zeilen sollten denselben Wert anzeigen.

sha256sum backup.sql.xz
scp backup.sql.xz admin@server:/srv/archives/
ssh admin@server 'sha256sum /srv/archives/backup.sql.xz'

Bewahren Sie den Hash zusammen mit dem Archiv auf, wenn es auf eine externe Festplatte, einen Objektspeicher oder einen anderen Server übertragen wird.

sha256sum backup.sql.xz > backup.sql.xz.sha256

Um später aus demselben Verzeichnis zu überprüfen, verwenden Sie die Datei .sha256.

sha256sum -c backup.sql.xz.sha256

Dekomprimieren, ohne das Archiv zu verlieren

unxz backup.sql.xz entfernt das Archiv nach der Extraktion. Fügen Sie -k hinzu, um die .xz-Datei zu behalten, bis Sie den wiederhergestellten Inhalt überprüft haben.

unxz -k backup.sql.xz
ls -lh backup.sql backup.sql.xz

Der entsprechende Befehl mit xz ist in Skripten nützlich, die bereits diese Binärdatei aufrufen.

xz -d -k backup.sql.xz

Wenn die Ausgabedatei bereits existiert, weigert sich xz, sie ohne -f zu überschreiben. Zwingen Sie die Extraktion nicht, bevor Sie Pfad, Datum, Größe und den tatsächlichen Bedarf an Ersetzungen verglichen haben.

ls -lh backup.sql backup.sql.xz
stat backup.sql

Für eine vorsichtige Wiederherstellung entpacken Sie in einen separaten Ordner und vergleichen Sie die erhaltene Datei, bevor Sie eine Produktionsdatei ersetzen.

mkdir -p /tmp/test-xz
cp backup.sql.xz /tmp/test-xz/
cd /tmp/test-xz
unxz -k backup.sql.xz
ls -lh backup.sql

Eine Archivdatei lesen, ohne eine Datei zu erstellen

Um schnell eine komprimierte Textdatei zu inspizieren, leiten Sie den dekomprimierten Inhalt mit xzcat an die Standardausgabe weiter. Diese Methode vermeidet das Schreiben einer großen temporären Datei.

xzcat backup.sql.xz | head -20

Um eine Zeichenfolge in einer komprimierten Textdatei zu suchen, verwenden Sie xzgrep anstelle der Dekompression des gesamten Archivs.

xzgrep -n "CREATE TABLE" backup.sql.xz

Verwenden Sie diese Befehle nicht auf einem vertraulichen Dump, wenn Ihr Terminal die Ausgabe protokolliert oder wenn Sie in einer gemeinsam genutzten Sitzung arbeiten.

Empfohlene Vorgehensweise für eine Sicherung

  • Überprüfen Sie den Typ der Datei mit file und ihre Größe mit ls -lh.
  • Kontrollieren Sie den verfügbaren Speicherplatz mit df -h ., bevor Sie -k verwenden.
  • Komprimieren Sie mit xz -k -v und einem passenden Niveau für die Maschine.
  • Begrenzen Sie die Threads mit -T1 oder -T2 auf einem aktiven Server.
  • Testen Sie das Archiv mit xz -t und verlangen Sie einen Rückgabewert von 0.
  • Berechnen Sie einen Hash sha256sum vor und nach jedem Transfer.
  • Testen Sie die Extraktion in einem separaten Ordner, bevor Sie eine wichtige Datei ersetzen.

xz ist nützlich, wenn Speicherplatz oder Bandbreite teurer sind als die CPU-Zeit. Es ersetzt nicht eine Backup-Strategie, einen Hash, der mit dem Archiv aufbewahrt wird, und die Durchführung eines Wiederherstellungstests vor einem Vorfall.

sudo apt update && sudo apt upgrade