Apple 文件系统 (APFS) 检查文件是不是是终端 (shell) 上的克隆

Posted

技术标签:

【中文标题】Apple 文件系统 (APFS) 检查文件是不是是终端 (shell) 上的克隆【英文标题】:Apple File System (APFS) Check if file is a clone on Terminal (shell)Apple 文件系统 (APFS) 检查文件是否是终端 (shell) 上的克隆 【发布时间】:2018-03-07 03:55:18 【问题描述】:

macOS High Sierra 提供了一个新的文件系统:APFS。

此文件系统支持文件的克隆操作:存储上没有数据重复。

cp 命令有一个标志 (-c),可以在终端 (shell) 中进行克隆。

但之后我没有找到识别这些克隆文件的方法。

有人知道如何使用 shell 命令或现有命令中的标志(如 ls)识别克隆文件?

【问题讨论】:

这也是我正在寻找的东西。我以为文件信息框中会有一些指示,但没有。甚至没有通过mdls 命令。如果您找到答案,请不要忘记更新您的帖子。 你试过stat -x file吗? 是的@nbari,输出和普通文件一样,只是inode值改变了……我试图寻找读取的inode原始信息,并提取克隆标志,还没有运气。跨度> 你可以试试mdls <filename> 吗? 我最接近的是APFS reference,它列出了j_inode_flags,它具有INODE_WAS_CLONED的属性。不幸的是,我找不到高级(例如 ObjC)函数来查询此信息。 【参考方案1】:

您使用的命令不是 APFS-Filesystem 的功能。 CP -c 命令调用名为“clonefile”的函数,该函数自 2015 年起成为 bsd 的一部分(s. Man-Page)

http://www.manpagez.com/man/2/clonefile/

因此,例如,如果您克隆文件,则可以更改原始文件的属性,并且克隆文件可以具有不同的属性。

我认为,您正在搜索的功能是根据复制和写入构建的。如果您使用 Time Machine 进行克隆,您会看到不同的情况。

A 今天还没有为每个终端找到一个突击队来显示这种差异,但是 clonefile 命令因此不是正确的功能。

目前在克隆中显示更改的属性的唯一已知方法是 Apple Time Machine 备份解决方案。

这是一个快照解决方案。在这个 Apple Dev Support-Case 中,关于这个的一些事情:

https://forums.developer.apple.com/thread/81171

【讨论】:

谢谢你的回复,里面包含了一些关于这个主题的技术信息,但是我问这个问题正是因为使用了clonefile功能,这里没有其他问题需要解决,唯一可以接受的解决方案是Mac OS X 终端命令。【参考方案2】:

我认为这是您不应该使用的 APFS 的内部专有功能。我觉得它是一个相对无用的功能。如果您想拥有两个相同的文件并使用标准 API,请尝试使用硬链接或软链接,或者使用 Apple 别名。

【讨论】:

【参考方案3】:

在 3 年零 2 个月后...因为 *** 上的这个问题,我获得了很多积分。

所以昨天我决定重新讨论这个话题:)。

使用 fcntl 和 F_LOG2PHYS 可以检查文件是否使用相同的物理块。

所以我利用这个想法做了一个实用程序,并将它放在 github (https://github.com/dyorgio/apfs-clone-checker) 上。

这只是第一次发布,但我希望社区可以改进它。

现在也许可以诞生一个使用克隆 APFS 功能删除重复文件的好工具。 >:)

【讨论】:

以上是关于Apple 文件系统 (APFS) 检查文件是不是是终端 (shell) 上的克隆的主要内容,如果未能解决你的问题,请参考以下文章

在 macOS 上测试文件名是不是相等,尤其是在 HFS+ 和 APFS 上

一个ZFS开发者眼中的苹果最新文件存储系统APFS

MacOS 如何同时利用 APFS 和本机 UNIX (Darwin) 文件系统?

如何缩小/调整apfs?

mac apfs文件系统权限不能修改为读写?

iOS 14 的文件管理将支持 APFS 加密磁盘