O(1)のファイルの途中にいくつかのブロックを挿入できるファイルシステムはありますか?

O(1)のファイルの途中にいくつかのブロックを挿入できるファイルシステムはありますか?

仮説

  • 私たちは巨大なファイルを持っていますF
  • 私たちは「周り」を見るのが好きですSO(1)時間内に新しいBean(0で埋められた)ブロックを作成します(つまり、すべてのリマインド部分を書き換えないでください)。
  • 「around」は私たちが囲むことができるという意味です。S最も近いファイルシステムブロックサイズに変換して挿入するブロックも、ファイルシステムブロックサイズにすることができます。

これを可能にするシステムコール/ファイルシステムはありますか?

btrfs_cloneそうでない場合は、この動作を模倣するために(mentied)を使用するのが良い考えですか?ここ)どのように?

答え1

から引用この回答:

Linux 4.1以降、エラー位置(2)FALLOC_FL_INSERT_RANGE後続のデータを書き換えることなく、ファイルの途中に指定された長さの穴を挿入できるこのフラグをサポートします。しかし、これは非常に制限的です。穴はファイルシステムブロックの境界に挿入する必要があり、挿入された穴のサイズはファイルシステムブロックサイズの倍数でなければなりません。さらに、4.1ではこの機能はXFSファイルシステムに対してのみサポートされ、4.2にはExt4サポートが追加されました。

~からエラー位置(1):

fallocate -d [-o offset] [-l length] filename
(...)
       -d, --dig-holes
              Detect  and  dig  holes.   This  makes  the  file  sparse in-place, without using extra disk space.  The minimum size of the hole depends on
              filesystem I/O block size (usually 4096 bytes).  Also, when using this option, --keep-size is implied.  If no range is specified by --offset
              and --length, then the entire file is analyzed for holes.

              You  can  think  of  this option as doing a "cp --sparse" and then renaming the destination file to the original, without the need for extra
              disk space.

              See --punch-hole for a list of supported filesystems.
(...)
       -p, --punch-hole
(...)
              Supported for XFS (since Linux 2.6.38), ext4 (since Linux 3.0), Btrfs (since Linux 3.7) and tmpfs (since Linux 3.5).

関連情報