it-swarm.com.de

Ist gzip atomar?

Ist gzip atomar?

Was passiert, wenn ich den Prozess gzip stoppe, während gerade eine Datei komprimiert wird?

Wie kann ich sicher fortfahren, wenn es nicht atomar ist und ich bei einem gzip *.txt - Prozess bereits Strg + C gedrückt habe?

(Ich bin nicht nur neugierig, wie ich fortfahren soll, sondern auch, ob gzip spezifisch atomar ist.)

11
Vendetta

Ist gzip atomar?

Nein. Es wird eine komprimierte Datei erstellt und dann das unkomprimierte Original entfernt.

Insbesondere wird eine Datei nicht komprimiert in sit und es gibt einen Zeitraum, in dem die Datei komprimiert wird, wobei

  • das komprimierte Ziel ist unvollständig
  • die teilweise komprimierte Datei und ihre Quelle sind beide im Dateisystem vorhanden.

Was passiert, wenn ich den gzip-Prozess stoppe, während eine Datei gzippt?

Wenn Sie den Prozess gzip mit einem abfangbaren Signal (SIGINT from) stoppen Ctrl CBeispiel: Es werden teilweise erstellte Dateien bereinigt. Andernfalls wird je nach dem Punkt, an dem es gestoppt wird, möglicherweise eine teilweise komprimierte Datei neben dem unberührten Original angezeigt.

Wenn es nicht atomar ist und ich bei einem gzip * .txt-Prozess bereits Strg + C gedrückt habe, wie kann ich dann sicher fortfahren?

Sie löschen die teilweise komprimierte Version (falls noch vorhanden) und starten gzip neu.

28
roaima

Es ist nicht atomar (die Unix-Dateisystem-API bietet keine Möglichkeit, atomare Operationen auszuführen, die mehrere Dateien betreffen), aber es ist ausfallsicher. Die komprimierte Datei ist eine neue Datei, überschreibt das Original nicht und löscht die Originaldatei erst, wenn die komprimierte Datei vollständig erstellt wurde (dies kann tatsächlich zu Problemen führen, wenn Sie nicht über genügend Speicherplatz verfügen beide Dateien).

Wenn ein Fehler auftritt oder Sie die Komprimierung unterbrechen, bleibt die Originaldatei unverändert. Die teilweise komprimierte Datei wird normalerweise entfernt.

Es gibt keine Möglichkeit, es in der Mitte fortzusetzen. Sie beginnen es einfach von vorne.

15
Barmar

Sie müssen sich darüber keine Gedanken machen, da gzip eine neue .gz - Datei erstellt, diese mit dem komprimierten Inhalt füllt und dann die Originaldatei löscht. Wenn Sie den Vorgang in der Mitte stoppen, wirkt sich dies nicht auf Ihre Originaldatei aus.

4
dr_

.txt Dateien, die bereits erfolgreich von gzip verarbeitet wurden, wurden durch .txt.gz Komprimierte Dateien ersetzt, sodass Sie gzip *.txt Sicher wieder ausführen können - nur die Dateien, die ' Es wurde noch nicht verarbeitet und wird komprimiert.

Die Datei, die zum Zeitpunkt des Drücken von Strg-C von gzip verarbeitet wurde, bleibt unverändert. Gzip ersetzt sie erst, wenn nach sie erfolgreich komprimiert wurde.

3
cas

Nein, es ist sehr unatomar. Dies kann zu großen Problemen führen, wenn Sie eine Datei gzipen, an die gelegentlich angehängt wird, z. B. ein Weblog.

Gzip liest, erstellt die GZ-Datei (mit dem aktuellen Zeitstempel), kopiert den Zeitstempel der Originaldatei und löscht dann das Original.

Bestimmte Unterbrechungen können eine verirrte, unfertige .txt.gz - Datei direkt neben der .txt - Datei hinterlassen. Dies führt dann zu einem Datenintegritätsproblem: Welches ist die eigentliche Datei? Ist das

  • ein gzip, das fehlgeschlagen ist und ein unvollständiges/beschädigtes .txt.gz hinterlassen hat? Oder
  • ein Gunzip, der fehlgeschlagen ist und eine unvollständige/abgeschnittene .txt Datei hinterlassen hat? Oder
  • Eine Datei, die erfolgreich in txt.gz Gippt wurde, und eine neu erstellte.txt Datei?

(Letzteres passiert, wenn Sie in Ihr HTTP-Protokollverzeichnis gehen und gzip * Gehen).

Ich finde es im Allgemeinen ratsam, dies von Hand zu klären, es sei denn, Sie wissen genau, was passiert ist, weil Sie es gerade getan haben.

Glücklicherweise arbeitet gzip normalerweise seriell, sodass Sie dieses Problem nur mit einer Datei haben sollten. Das Parallelschalten von gzip ist keine gute Idee - obwohl die CPU stärker ausgelastet ist, wird die Festplatte überlastet, sodass mehrere Dateien gleichzeitig gelesen werden müssen, was alle gzip-Dateien erheblich verlangsamt. SSD oder RAMdisk dagegen ...