cp --reflink=auto 用于 MacOS X

Ser*_*erg 4 file-copy deduplication hfs+

cp --reflink=auto 显示以下 MacOS 输出:

cp: 非法选项 -- --

HFS 是否支持写时复制或重复数据删除?如何使用 HFS COW 大文件?

小智 5

Apple 新的 APFS 文件系统支持写时复制;CoW 在可用的 Finder 复制操作中以及在cp -c命令行上使用时自动启用。

不幸的是,cp -c等价于cp --reflink=always(not auto),并且在写时复制不可能时失败

cp: somefile: clonefile failed: Operation not supported
Run Code Online (Sandbox Code Playgroud)

我不知道获得auto行为的方法。你可以让一个shell脚本或功能与自动回退一拉

cpclone() { cp -c "$@" || cp "$@"; }
Run Code Online (Sandbox Code Playgroud)

但是很难让它在所有边缘情况下都完全可靠。


Min*_*ang 5

2021 年 11 月更新:由于即将到来的 coreutils 更改,该答案已过时。自25725f9 (coreutils 9.0)以来,reflink=auto 一直是默认值。APFS 克隆在树中提交为5e36c0c,并且应该出现在 coreutils 9.1 中。


原始发布于 2019 年 11 月:我为 GNU coreutils编写了一个补丁邮件列表--reflink),该补丁支持macOS > 10.12。是的,--reflink=auto会起作用,至少根据我的时间测量。

以下是两种使用方法:

  • 克隆 git 存储库,运行./bootstrap,然后运行通常的./configure -Cmake -j12 install.
  • 将补丁(针对 8.31 重新调整)应用于 coreutils 的另一个版本,以跳过痛苦的引导过程。

您可以从自制公式中获取一堆可能的参数来使用。由于更改仅对cp且仅有用mv,因此您可以选择仅替换这两个二进制文件。(mv使用 reflink 对于子模块很有用。)


有一个相关的补丁默认启用 reflink=autocpinstall。如果您总是忘记添加该选项或希望ginstall在 Makefile 中速度更快,请尝试一下。