带有 reflink 标志的 cp:如何确定 reflink 是否可能?

带有 reflink 标志的 cp:如何确定 reflink 是否可能?

当我使用 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方法。

相关内容