如何创建共享范围的文件?

How to create files which share an extent?

Linux 程序员手册联机帮助页 fallocate(2) 指出:

If the FALLOC_FL_UNSHARE flag is specified in mode, shared file data extents will be made private to the file to guarantee that a subsequent write will not fail due to lack of space. Typically, this will be done by performing a copy-on-write operation on all shared data in the file. This flag may not be supported by all filesystems.

这很酷,但是…… 首先如何创建共享文件数据范围

当底层文件系统支持 reflinks(例如:XFS 和 BTRFS)并且您使用 --reflink 标志执行 cp 时,将创建共享数据范围或使用 ioctl_ficlonerange(2) 系统调用。

查看内核代码,我看到 FALLOC_FL_UNSHARE_RANGE 仅在 XFS 的情况下被处理,所以可能这个 fallocate 标志目前仅适用于 XFS。