私はLinuxクラスタで多くのタスクを実行しています。各ジョブは複数の出力ファイルを生成します。すべてのジョブが完了したら、アーカイブの作成などのtar cf foo.tar output_files/
ジョブを実行しますtar
。何千ものファイルとディレクトリがあるので、これは非常に遅いプロセスです。
出力ファイルの生成中にこれを並列に実行する方法はありますか?
tar
複数のプロセスを複数のシステムに分散させ、同時に同じアーカイブにファイルを追加することは可能ですか?
クラスタには共有ファイルシステムがあります。
圧縮すると速度が遅くなり、すべての入力ファイル自体がすでに圧縮されているため、圧縮には興味がありません。理想的には出力はファイルですが、tar
他のアーカイブ形式も考えてみましょう。
ベストアンサー1
同じtarアーカイブ(または圧縮されているかどうかにかかわらず、他の一般的なアーカイブ形式)に複数のプロセスを追加することはできません。各ファイルは連続して保存され、ファイルにデータを挿入することはできず、追加または上書きするだけで、最後のファイル以外のファイルに書き続けると、次のファイルが上書きされます。
ファイルサイズを事前に知っている場合は、tarアーカイブにそのサイズを維持し、プログラムに書き込みを続けることができます。これには多くのコーディングが必要です。これは非常に珍しいことです。
Unixには、独立して作成されたファイルセットに対応するように設計された機能があります。ディレクトリと呼ばれます。
まれに、ディレクトリの圧縮されていないアーカイブから必要なものを得ることができます。場合によっては、読み取り速度がやや速くなることがあります。これは、アーカイブ形式(各ファイルアイテムがそのコンテンツへのポインタである)ではなく、ディレクトリ形式(各ファイルアイテムがそのコンテンツへのポインタである)の固有の結果です。ディレクトリをフラグメントに編成することが可能になりました。ディレクトリツリーをアーカイブに変換することは、順番に実行する必要がある後処理です。