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 上