私が知りたいのは、データを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
たかったのですが、lzop
Synology OSにはgzip、7z、xzしかないようです。
スクリプトの一部として、私が使用したいだけ多くのコマンドを並列に実行できます。このセマフォスクリプトシングルスレッドのgzipを使用しても、CPUのすべてのコアを活用するテンプレートです。
編集する:オプションなしでスクリプトをテストしましたが、引き続き--sparse
使用するとtar
この問題はなく、データはすぐにgzipに流れます。