![带有 reflink 标志的 cp:如何确定 reflink 是否可能?](https://linux22.com/image/97167/%E5%B8%A6%E6%9C%89%20reflink%20%E6%A0%87%E5%BF%97%E7%9A%84%20cp%EF%BC%9A%E5%A6%82%E4%BD%95%E7%A1%AE%E5%AE%9A%20reflink%20%E6%98%AF%E5%90%A6%E5%8F%AF%E8%83%BD%EF%BC%9F.png)
当我使用 reflink 选项复制文件时,例如,
cp --reflink foo bar
cp 执行过程中的哪个阶段以及如何确定底层文件系统是否支持 COW。我尝试查看,coreutils/src/cp.c
但找不到特定的系统调用/ ioctl 或任何其他确定 COW 功能的方法,并相应地进行 cp 执行/报告错误:
cp:无法从“foo”克隆“bar”:地址错误
简而言之,我正在寻找期权的解决--reflink=auto
方案是如何发生的。
答案1
这代码调用一个名为的函数clone_file
如果 reflink 选项设置为“always”或“auto”,如果 reflink 为“always”,则回退到复制(如果 reflink 关闭,则直接进入复制)。clone_file
称为BTRFS_IOC_CLONE
读写控制。所以没有测试系统是否支持写时复制,只是尝试BTRFS方法。