重要な注意:圧縮は目標ではなく、アーカイブ/テーピング(すべてのファイルを単一のアーカイブにパックする)が目標です。
数百のサブディレクトリと数百万の小さなファイル(<800 KB)を含む単一のディレクトリをバックアップしたいと思います。 rsync
を使用してこれらのファイルをあるマシンから別のリモートマシンにコピーする場合、転送速度が非常に遅く、約1 MB /秒しかないことに気付きましたが、巨大なファイル(500 GBなど)をコピーする場合は)転送速度は実際には約120MB /秒です。したがって、ネットワーク接続はまったく問題ではありません。
そのような場合、200GBの小さなファイルだけを移動するのに約40時間かかりました。そのため、これらのファイルを含むディレクトリ全体を圧縮してから、圧縮されたアーカイブをリモートマシンに転送し、その後、リモートマシンで解凍することを考えています。このアプローチで40時間から5時間に短縮されるとは思っていませんが、間違いなく40時間未満かかると思います。
14 CPUコア(56スレッド-Intel(R)Xeon(R)Gold 5120 CPU @ 2.20GHz)および128のクラスターにアクセスできますGBRAM。したがって、CPU/RAMの電力は問題ではありません。
しかし、非常に多くのファイルから単一のアーカイブを作成するための最も速くて効率的な方法は何ですか?私は現在、これらのアプローチについてのみ知っています。
tar.gz
アプローチ7Zip
pigz
(parallel gzip -- https://zlib.net/pigz/ )しかし、どちらが速いのか、最大速度を達成するためにパラメーターをどのように調整する必要があるのかわかりませんか? (たとえば、7ZipですべてのCPUコアを使用するのが良いですか、それとも1つだけを使用するのが良いですか?)
N.B. ファイルサイズと圧縮率はまったく関係ありません。スペースを節約しようとはしていません。転送速度が1MB /秒ではなく120MB /秒になるように、非常に多くのファイルから1つのアーカイブを作成しようとしています。
[〜#〜]関連[〜#〜]: 7-Zipを高速化する方法
tar
を使用しますが、gzipの部分は省略します。 TARの要点は、ファイルを単一のストリームに変換することです(テープアーカイブの略です)。プロセスによっては、ストリームをディスクに書き込んでコピーすることもできますが、より効率的には、(SSHなどを介して)他のマシンにパイプすることもできます。同時に解凍することもできます。
プロセスはCPUを集中的に使用するのではなく、IOであるため、プロセスを並列化してもあまり役に立ちません。ファイル転送サイズを減らすことができます(ファイルがブロックサイズで正確に分割できない場合)。 、そして、各ファイルをネゴシエートするための前後を持たないことにより、たくさん節約できます。
非圧縮のtarファイルを作成するには:
tar -cf file.name /path/to/files
ネットワークを介してストリーミングするには:
tar -c /path/to/files | ssh [email protected] 'cd /dest/dir && tar -x'
注:例1のように中間ファイルをハードドライブに書き込む場合、適切な量の圧縮があると、ディスクに書き込まれる量が少なくなるため、実際にはファイルをgzipで圧縮する方が速い場合があります。プロセス。