Ist gzip
atomar?
Was passiert, wenn ich den gzip
Vorgang stoppe , während gerade eine Datei komprimiert wird?
gzip *.txt
Wie kann ich sicher fortfahren , wenn es nicht atomar ist und ich bei einem Prozess bereits Strg + C gedrückt habe ?
(Ich bin nicht nur neugierig, wie ich weitermachen soll, sondern auch, ob es gzip
spezifisch atomar ist.)
command-line
gzip
Vendetta
quelle
quelle
CTRL+Z
stattCTRL+C
, beenden Sie den unterbrochenen Job oder setzen Sie ihn fort (er antwortet mit einer Zahln
[-[n]+ Stopped-- gzip ...
], dann können Sie mit%n
oder mitfg
oder mitbg
... auf die gleiche Weise fortfahren du kannst es mit tötenkill %n
).Antworten:
Nein. Es wird eine komprimierte Datei erstellt und dann das unkomprimierte Original entfernt.
Insbesondere ist es nicht um eine Datei zu komprimieren in situ , und es gibt eine Zeitperiode , während die Datei in dem komprimiert wird,
Wenn Sie den Stopp -
gzip
Prozess mit einem abfangbare Signal (SIGINT
von Ctrl Czum Beispiel) wird es Bereinigung teilweise Dateien erstellt. Andernfalls wird je nach dem Punkt, an dem es gestoppt wird, möglicherweise eine teilweise komprimierte Datei neben dem unberührten Original angezeigt.Sie löschen die teilweise komprimierte Version (falls noch vorhanden) und starten die neu
gzip
.quelle
SIGINT
oderSIGTERM
für diegzip
Signalhandler installiert werden, die die Ausgabedatei entfernen).gzip
Fluss anhalten , gibt es dort immer eine winzige Rennbedingung. Alternativ können Siegzip
festlegen, dass Zieldateien immer überschrieben werden sollen, wodurch die meisten Bereinigungsprobleme umgangen werden.Es ist nicht atomar (die Unix-Dateisystem-API bietet keine Möglichkeit, atomare Vorgänge 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.
quelle
sed -i
. B. ).Sie müssen sich darüber keine Gedanken machen, da
gzip
eine neue.gz
Datei erstellt, mit dem komprimierten Inhalt gefüllt und dann die Originaldatei gelöscht wird. Wenn Sie den Vorgang in der Mitte stoppen, wirkt sich dies nicht auf Ihre Originaldatei aus.quelle
.txt
Dateien, die bereits erfolgreich von verarbeitetgzip
wurden, wurden durch.txt.gz
komprimierte Dateien ersetzt, sodass Sie sie sichergzip *.txt
wieder ausführen können. Nur die Dateien, die noch nicht verarbeitet wurden, werden komprimiert.Die Datei, die zum Zeitpunkt des Drückens von Strg-C von gzip verarbeitet wurde, bleibt unverändert. Gzip ersetzt sie erst nach erfolgreicher Komprimierung.
quelle
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.txt.gz
? Oder.txt
Datei hinterlassen hat ? Odertxt.gz
und eine neu erstellte.txt
Datei?(Letzteres passiert, wenn Sie in Ihr HTTP-Protokollverzeichnis gehen und gehen
gzip *
).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, wodurch alle gzip-Dateien erheblich verlangsamt werden. SSD oder RAMdisk dagegen ...
quelle