Linux でブロックの割り当てを解除せずにファイルのサイズを変更するにはどうすればよいでしょうか?

Linux でブロックの割り当てを解除せずにファイルのサイズを変更するにはどうすればよいでしょうか?

論理サイズを変更せずにファイルを拡張できることは知っていますfallocate --keep-size。その逆、つまりブロックを変更せずにファイルの論理サイズを縮小する方法はありますか?

答え1

ブロックを削除せずに論理ファイル サイズを変更したい場合は、おそらくファイルの末尾の穴を削除することになります。

truncate / ftruncate はこれを実行できますが、ホールを認識しないため、ファイルの末尾のホールを個別に検出し、ftruncate を使用してファイルを縮小する必要があります。

ftruncate は解決策の半分に過ぎず、最近のほとんどの UNIX はファイル内のホールの検出をサポートしていますが、それぞれやり方が若干異なるため、移植可能な方法はないことに注意してください。

また、fallocate が何をしているか理解していることを確認してください。これは、穴を埋めて、そこにデータ ブロックを割り当てます。したがって、ファイルに対して fallocate を実行すると、その論理サイズはすべて物理データ ブロックで表され、それらのデータ ブロックの一部を解放しない限り、サイズを変更することはできません。

関連情報