The Linux programmer's manual manpage fallocate(2) states:
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.
That's cool, but… How do I create shared file data extents in the first place?
Shared data extents are created when the underlying filesystem supports reflinks (example: XFS and BTRFS) and you perform a cp
with the --reflink
flag or use the ioctl_ficlonerange(2) syscall.
Looking at the kernel code, I see FALLOC_FL_UNSHARE_RANGE
being handled only in case of XFS, so maybe this flag to fallocate works only on XFS as of now.