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 -C
和make -j12 install
. - 应用补丁(重新设定为 8.31)到另一个版本的 coreutils 来跳过痛苦的引导过程。
您可以从中获取一堆可能的参数来使用自制公式。由于更改仅对cp
且mv
仅有用,因此您可以选择仅替换这两个二进制文件。 (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
在--dereference
GNU coreutils 版本的cp
.在 MacOS 中,仅-L
可用。