gzip
はアトミックですか?
ファイルのgzip圧縮の最中にgzip
プロセスを停止するとどうなりますか?
アトミックでない場合、およびgzip *.txt
プロセスですでにCtrl + Cを押した場合、どのようにして安全に再開できますか?
(再開方法に興味があるだけでなく、gzip
が具体的にアトミックかどうかも知りたいです。)
Gzipはアトミックですか?
いいえ。圧縮ファイルを作成してから、圧縮されていない元のファイルを削除します。
具体的には、ファイルは圧縮されませんin sitであり、ファイルが圧縮されている間、
ファイルのgzip圧縮の最中にgzipプロセスを停止するとどうなりますか?
キャッチ可能なシグナル(gzip
からSIGINT
プロセスを停止した場合 Ctrl Cたとえば)、部分的に作成されたファイルをクリーンアップします。そうしないと、停止した場所によっては、手つかずのオリジナルと一緒に部分的に圧縮されたファイルになる可能性があります。
アトミックでない場合、すでにgzip * .txtプロセスでCtrl + Cを押した場合、安全に再開するにはどうすればよいですか?
部分的に圧縮されたバージョンを削除し(まだ存在する場合)、gzip
を再起動します。
これはアトミックではありません(UnixファイルシステムAPIは、複数のファイルに影響を与えるアトミック操作を実行する方法を実際には提供していません)が、isフェイルセーフです。圧縮ファイルは新しいファイルであり、元のファイルを上書きせず、圧縮ファイルの作成が完了するまで元のファイルを削除しません(十分なディスク領域がない場合、これにより実際に問題が発生する可能性があります両方のファイル)。
エラーが発生したり、圧縮を中断したりしても、元のファイルは変更されません。通常、部分的に圧縮されたファイルは削除されます。
途中で再開する方法はなく、最初からやり直すだけです。
gzip
は新しい.gz
ファイルを作成し、それに圧縮されたコンテンツを入力してから、元のファイルを削除するため、そのことを心配する必要はありません。したがって、途中でプロセスを停止しても、元のファイルには影響しません。
gzip
によって既に正常に処理された.txt
ファイルは.txt.gz
圧縮ファイルに置き換えられるため、gzip *.txt
を安全に再実行できます-処理されていないファイルのみまだ圧縮されます。
Ctrl-Cを押したときにgzipによって処理されていたファイルは変更されません-afterが正常に圧縮されるまで、gzipはそれを置き換えません。
いいえ、それは非常に非原子的です。これは、Webログのように、時々追加されるファイルをgzipする場合に大きな問題を引き起こす可能性があります。
Gzipは、(現在のタイムスタンプで).gzファイルを読み取り、作成し、元のファイルのタイムスタンプをコピーしてから、元のファイルを削除します。
特定の中断により、.txt.gz
ファイルのすぐ横に、未完成の.txt
ファイルが残ることがあります。これにより、データ整合性の問題が発生します。実際のファイルはどれですか。これは
.txt.gz
?または.txt
ファイルが残っていますか?またはtxt.gz
にgzipで圧縮され、新規作成.txt
ファイルですか?(これは、HTTPログディレクトリに移動してgzip *
に移動すると最後に発生します)。
私は通常、これを手動で行った方が賢明だと思います。
幸い、gzipは通常シリアルで動作するため、この問題は1つのファイルでのみ発生します。 gzipを並列化することは良い考えではありません。CPUをより完全に使用しますが、ディスクをスラッシュして複数のファイルを一度に読み取らせ、すべてのgzipの速度を大幅に低下させます。一方、SSDまたはRAMdisk ...