web-dev-qa-db-ja.com

tarを高速化する方法、圧縮なしでパッケージをビルドするだけ

Linuxマシンに1TBのファイルを含む2TBの大きなフォルダーがあります。 tarでパッケージをビルドしたい。 tarファイルのサイズは気にしないので、データを圧縮する必要はありません。どうすればtarを高速化できますか? tar -cf xxx.tar xxx/でパッケージをビルドするのに1時間かかります。 28コアの強力なCPUと500GBのメモリを持っていますが、tarをマルチスレッドで実行する方法はありますか?

または、別の方法として、異なるフォルダー間および異なるサーバー間で多数の小さなファイルを転送する良い方法はありますか?私のファイルシステムはext4です。

4
Guo Yong

@Kusalanandaがコメントで言っているように、tarはディスクにバインドされています。あなたができる最善のことの一つは、出力が別のディスクに置かれるようにして、書き込みが読み込みを遅くしないようにすることです。

次のステップがネットワーク経由でファイルを移動することである場合、最初にネットワーク経由でtarファイルを作成することをお勧めします。

$ tar -cf - xxx/ | ssh otherhost 'cat > xxx.tar'

このように、ローカルホストはファイルを読み取るだけでよく、tarによって消費される書き込み帯域幅に対応する必要もありません。 tarからのディスク出力は、ネットワーク接続とotherhost上のディスクシステムによって吸収されます。

7
Jim L.

または、別の方法として、異なるフォルダー間および異なるサーバー間で多数の小さなファイルを転送する良い方法はありますか?私のファイルシステムはext4です。

Ssh上のRsyncは、私が定期的に使用しているものです。 --archiveオプションとともに使用すると、ファイルの権限、シンボリックリンクなどが保持されます。

rsync -av /mnt/data <server>:/mnt

この例では、ローカルディレクトリ/mnt/dataとその内容を/mnt内のリモートサーバーにコピーします。 sshを呼び出して接続を設定します。回線の両側にrsyncデーモンは必要ありません。

この操作は、2つのローカルディレクトリ間、またはリモートからローカルへも実行できます。

4
Tim