大容量ファイルを追加してアーカイブし、同時に削除する方法

大容量ファイルを追加してアーカイブし、同時に削除する方法

100GBシステムに80GBファイルがあり、/root/bigfileこのファイルをアーカイブに保存したいとします。/root/bigarchive.tar

明らかに、アーカイブにファイルを追加しながらファイルを削除する必要があります。だから私の質問は次のようになります

アーカイブにファイルを追加しながら、どのようにファイルを削除できますか?

ベストアンサー1

単一ファイルの非圧縮tarアーカイブは、ヘッダー、ファイル、およびトレーラーで構成されています。したがって、主な質問は、ファイルの先頭に512バイトのヘッダーを追加する方法です。ヘッダーのみを使用して目的の結果を生成することから始めることができます。

tar cf - bigfile | dd count=1 >bigarchive.tar

次に、ファイルの最初の10Gをコピーします。簡単に言えば、ddが一度に1Gibを読み書きできるとしましょう。

dd count=10 bs=1G if=bigfile >>bigarchive.tar

これで、ソースファイルからコピーされたデータをリリースします。

fallocate --punch-hole -o 0 -l 10GiB bigfile

これはデータを次に置き換えます。足りないファイルシステム空間を占有しないゼロです。この方法を続けて、skip=10次の項目にaを追加してddからfallocate開始オフセットを増やします-o 10GiB。最後に、いくつかのヌル文字を追加して最終的なtarファイルを埋めます。


ファイルシステムがそれをサポートしていない場合は、fallocate同様のことができますが、ファイルの末尾から始めてください。まず、ファイルの最後の10 GBを名前付きファイルにコピーしてから、コマンドを使用して元のpart8ファイルtruncateのサイズを小さくします。それぞれ10Gibyteの8つのファイルがあるまで同様の作業を続けます。その後、ヘッダーとをリンクしてpart1からbigarchive.tar削除part1し、リンクしてpart2削除するなどの操作を実行できます。

おすすめ記事