tarはデータをgzipに渡すのに長い時間がかかります

tarはデータをgzipに渡すのに長い時間がかかります

私が知りたいのは、データをgzipに渡す前にtarが何をしているのかです。このステップをスキップすることはできますか?

仮想マシンのHDDイメージのコピーを圧縮するためにSynology NASボックス(DSM 6.2.1-23824 Update 1、tarバージョン1.28を実行)で実行するスクリプトを作成しています。ソースファイルは btrfs ファイルシステムにスパースファイルとして保存されます。私は少し圧縮、好ましくは希少性を維持し、速度を最大化することを探しています。

一度に1つのファイルしか作業していませんが、最初にtarを使用する理由はその--sparseフラグを使用するためです。これは、gzipがファイルをスパースファイルに解凍できないためです。私が実行したい中心的なコマンドは次のとおりです。

GZIP=-1 nice -n 19 tar --keep-old-files --sparse -czf $destDir/$vmFolder/$file.tar.gz $file  2>>$log

ただし、ハードディスクイメージのサイズ(2GB〜120GB)のためtarが起動し、クレイジーなように、ソースコードをできるだけ早く読み取るのに数分かかりますが、gzipは何も機能しません。。このプロセスが継続する時間は、ソースファイルのサイズに比例します。

私が問題を解決しようとしたこと:

  • gzipだけを使用すると、出力はすぐに開始されますが、まれな情報が失われます。
  • 以下のようにパイプを使用すると、同じことが行われます。

    nice -n 19 tar --keep-old-files --sparse -cf - $file | nice -n 19 gzip --fast > $destDir/$vmFolder/$file.tar.gz 2>>$log
    

もちろん、NASボックスにはIntel Atom D2700しかありませんが、tar操作はCPUを大量に使用しないでください。 gzipはCPUを大量に使用し、これは特に古いAtom CPUの場合は制限要因になる可能性があることを理解しています。使いlz4たかったのですが、lzopSynology OSにはgzip、7z、xzしかないようです。

スクリプトの一部として、私が使用したいだけ多くのコマンドを並列に実行できます。このセマフォスクリプトシングルスレッドのgzipを使用しても、CPUのすべてのコアを活用するテンプレートです。

編集する:オプションなしでスクリプトをテストしましたが、引き続き--sparse使用するとtarこの問題はなく、データはすぐにgzipに流れます。

関連情報