Linux程序员手册页面fallocate(2)指出:
如果在mode中指定了
FALLOC_FL_UNSHARE
标志,则共享文件数据范围将变为文件私有,以确保后续的写入不会由于空间不足而失败。通常,这将通过对文件中所有共享数据执行写时复制操作来完成。并非所有文件系统都支持此标志。
这很酷,但是… 如何首先创建共享文件数据范围?
Linux程序员手册页面fallocate(2)指出:
如果在mode中指定了
FALLOC_FL_UNSHARE
标志,则共享文件数据范围将变为文件私有,以确保后续的写入不会由于空间不足而失败。通常,这将通过对文件中所有共享数据执行写时复制操作来完成。并非所有文件系统都支持此标志。
这很酷,但是… 如何首先创建共享文件数据范围?
当基础文件系统支持reflinks(例如:XFS和BTRFS),并且您使用--reflink
标志执行cp
或使用ioctl_ficlonerange(2)系统调用时,将创建共享数据范围。
查看内核代码时,我发现只有在XFS的情况下才处理FALLOC_FL_UNSHARE_RANGE
,所以也许当前fallocate的此标志仅适用于XFS。
fallocate (2)
man页面和Stack Overflow上的fallocate vs posix_fallocate。 - jww