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