Btrfs 支持写入时复制。我尝试使用该功能来克隆目录:
cp -R --reflink=always foo_directory foo_directory.mirror
我期望该命令几乎立即完成(如 a btrfs subvolume snapshot
),但该cp
命令似乎执行缓慢的标准复制。
根据手册页,我希望--reflink=always
强制执行 Copy-On-Write:
当
--reflink[=always]
指定时,执行轻量级复制,其中数据块仅在修改时才复制。如果不可能,则复制失败,或者如果--reflink=auto
指定,则回退到标准副本。
问题:
- 你知道为什么
--reflink=always
不起作用吗? - 我应该使用哪些选项(或其他命令)?
答案1
cp --reflink=always
几乎可以肯定工作正常。如果不是,您将会收到错误。根据设计,这就是--reflink=always
和之间的区别--reflink=auto
。错误看起来像这样:
# Filesystem that does not support the feature at all
cp: failed to clone `xx' from `yy': Inappropriate ioctl for device
# Filesystem that does support it, but copy across filesystems
cp: failed to clone `xx' from `yy': Invalid cross-device link
您是否正在复制包含大量小文件的目录结构?在这种情况下cp
,仍然需要创建每个目录并打开和关闭每个文件,因此仍然需要时间,这与btrfs subvolume snapshot
.这很可能解释了执行该操作所需的时间。