是否有文件系统允许我在 O(1) 的文件中间插入一些块?

是否有文件系统允许我在 O(1) 的文件中间插入一些块?

假设

  • 我们有巨大的文件F
  • 我们喜欢“围绕”寻找s在 O(1) 时间内创建一个新的空(填充零)块(即不重写所有重新挖掘部分)
  • “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).

相关内容