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
削除するなどの操作を実行できます。