Linuxマシンに1TBのファイルを含む2TBの大きなフォルダーがあります。 tarでパッケージをビルドしたい。 tarファイルのサイズは気にしないので、データを圧縮する必要はありません。どうすればtar
を高速化できますか? tar -cf xxx.tar xxx/
でパッケージをビルドするのに1時間かかります。 28コアの強力なCPUと500GBのメモリを持っていますが、tar
をマルチスレッドで実行する方法はありますか?
または、別の方法として、異なるフォルダー間および異なるサーバー間で多数の小さなファイルを転送する良い方法はありますか?私のファイルシステムはext4です。
@Kusalanandaがコメントで言っているように、tarはディスクにバインドされています。あなたができる最善のことの一つは、出力が別のディスクに置かれるようにして、書き込みが読み込みを遅くしないようにすることです。
次のステップがネットワーク経由でファイルを移動することである場合、最初にネットワーク経由でtarファイルを作成することをお勧めします。
$ tar -cf - xxx/ | ssh otherhost 'cat > xxx.tar'
このように、ローカルホストはファイルを読み取るだけでよく、tarによって消費される書き込み帯域幅に対応する必要もありません。 tarからのディスク出力は、ネットワーク接続とotherhost
上のディスクシステムによって吸収されます。
または、別の方法として、異なるフォルダー間および異なるサーバー間で多数の小さなファイルを転送する良い方法はありますか?私のファイルシステムはext4です。
Ssh上のRsyncは、私が定期的に使用しているものです。 --archive
オプションとともに使用すると、ファイルの権限、シンボリックリンクなどが保持されます。
rsync -av /mnt/data <server>:/mnt
この例では、ローカルディレクトリ/mnt/data
とその内容を/mnt
内のリモートサーバーにコピーします。 sshを呼び出して接続を設定します。回線の両側にrsyncデーモンは必要ありません。
この操作は、2つのローカルディレクトリ間、またはリモートからローカルへも実行できます。