cp --reflink=auto 对于 MacOS X

cp --reflink=auto 对于 MacOS X

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

cp: 非法选项 -- -

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

答案1

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

不幸的是,cp -c相当于cp --reflink=always(not auto),并且当无法进行写时复制时将会失败

cp: somefile: clonefile failed: Operation not supported

我不知道有什么方法可以获取auto行为。您可以制作具有自动回退功能的 shell 脚本或函数阿拉

cpclone() { cp -c "$@" || cp "$@"; }

但要使其在所有边缘情况下都完全可靠是很困难的。

答案2

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


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

以下是两种使用方法:

  • 克隆 git 存储库,运行./bootstrap,然后运行通常的./configure -Cmake -j12 install.
  • 应用补丁(重新设定为 8.31)到另一个版本的 coreutils 来跳过痛苦的引导过程。

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


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

答案3

实用程序是用 Rust 编写的 GNU coreutils 克隆,支持 macOS 的 APFS 上的引用链接副本通过与 Linux 上的 GNU coreutils 相同的语法。

答案4

不幸的是,该--reflink=auto选项在 MacOS 中尚不可用。 HFS 本身也不支持 CoW(写入时复制)。

也许将来会添加这样的支持 - 可能是当 ZFS 本地可用或另一个本地文件系统添加支持时。

我建议参考手册页来获取当前可用的选项:man cp


笔记:

在 MacOS 中,大多数命令(包括cp)仅支持短选项,而不支持长选项。因此,如果有等价的,它也只是一个字符。示例将-L--dereferenceGNU coreutils 版本的cp.在 MacOS 中,仅-L可用。

相关内容