web-dev-qa-db-ja.com

tarはファイルを並行してアーカイブできますか?

大きなディレクトリの一部(〜40 GiBおよび〜800万ファイル))をAmazon S3経由で複数のマシンに移動しようとしていますが、シンボリックリンクを保持する必要があるため、ディレクトリをタールアップしています次に、S3に直接同期するのではなく、結果のファイルをアップロードします。

ほとんどのファイルはすでに圧縮されているので、gzipまたはbzipでアーカイブを圧縮していません。私の命令は

tar --create --exclude='*.large-files' --exclude='unimportant-directory-with-many-files' --file /tmp/archive.tar /directory/to/archive

これを実行しているときに、tarが8コアマシンで1つのコアしか使用していないように見えることに気付きました。そのコアのペギング、低負荷平均(〜1)、およびiostatから見た統計に基づく私の印象は、この操作は実際にはディスクにバインドされているのではなく、CPUにバインドされているということです。私が期待するように。遅い(約90分)ので、追加のコアを利用するためにtarを並列化することに興味があります。

このトピックに関する他の質問 focus on compression または 複数のアーカイブを作成する (ディレクトリ構造のため、私の状況では簡単ではありません) 。ほとんどの人は、圧縮せずにtarballを作成できることを忘れているようです。

出力にファイルを順番に保存するtarアーカイブの性質上、複数のアーカイブを作成しない限り、プロセスを並列化する方法はありません。

操作のボトルネックはハードドライブである可能性が高いことに注意してください。そのため、タスクを2つ以上のプロセスに分割したとしても、それらが異なるドライブで動作しない限り、タスクは速くなりません。

6
Julie Pelletier