我在玩 btrfs,它允许cp --reflink
写时复制。其他程序,例如lxc-clone
,也可能使用此功能。我的问题是,如何判断一个文件是否是另一个文件的 CoW?就像硬链接一样,我可以从 inode 编号看出。
我知道,cp
有一个--reflink
选项来控制完整副本与副本上写的“副本”。
在 btrfs 上,我可以使用ls
(或其他一些命令)来确定文件是否与另一个文件共享(在写时复制的意义上)某些存储?
编辑:@StéphaneChazelas 将我指向filefrag
,但这对我来说失败了:
root@void:/tmp/mount# mount | tail -1
/tmp/back on /tmp/mount type btrfs (rw,relatime,space_cache)
root@void:/tmp/mount# df -h | tail -1
/dev/loop0 32M 13M 20M 38% /tmp/mount
root@void:/tmp/mount# ls -lh
total 8.0M
-rw-r--r-- 1 root root 8.0M Jan 19 08:43 one
root@void:/tmp/mount# cp --reflink=always one two
root@void:/tmp/mount# sync
root@void:/tmp/mount# ls -lh
total 16M
-rw-r--r-- 1 root root 8.0M Jan 19 08:43 one
-rw-r--r-- 1 root root 8.0M Jan 19 08:45 …
Run Code Online (Sandbox Code Playgroud) 假设
是否有允许这样的系统调用/文件系统?
如果没有,使用btrfs_clone
(此处提到)以及如何模仿这种行为是个好主意吗?