重复项查找器会扫描您的 Mac 并提供数量:40 GB 的重复项,可供删除。您删除它们,打开“关于本机”,可用空间已移动 2 GB。
什么都没有失败。这些文件是重复的。这个估计仍然是错误的,因为在 APFS 上,两个文件可以保存相同的字节,而无需保存相同的存储量。
简短版本: 重复扫描仪测量文件大小。可用空间取决于块。在 APFS 上,一旦涉及克隆或硬链接,这两个数字就会停止匹配。
快速回答
- 克隆是一个单独的文件,与原始文件共享其块,因此删除一侧只会释放分歧的部分。
- 硬链接是一个 inode 的第二个名称,因此删除一个名称根本不会释放任何内容。
lsFinder 会报告每个姓名的完整大小,这正是基于大小的扫描仪所累加的结果。ls -li通过链接计数公开硬链接;克隆对于标准工具来说是不可见的。- 诚实的测量是删除前后的可用空间,采用
df -h /System/Volumes/Data。 - Time Machine 本地快照可以保存已删除的文件块,因此空间会稍后而不是立即返回。
重复扫描仪的实际测量值
每个重复查找器都分两个阶段工作。它通常按大小对可以匹配的文件进行分组,然后通过读取内容或比较哈希值来确认匹配。这两个阶段都关心文件内的字节。
存储工作向下一级进行。文件名指向索引节点,索引节点指向块,可用空间计数器跟踪块。一旦两个名称共享相同的块,文件大小的总和就不再描述磁盘。
三种看起来与扫描仪相同的排列
真实的副本。 两个文件,两个索引节点,两组块。删除其中任何一个,磁盘都会恢复完整大小。这就是每个人都认为他们正在看的东西。
克隆。 当您在 Finder 中按“复制”、运行时,APFS 会创建克隆cp -c,当应用程序调用时clonefile。克隆是一个真实的文件,有自己的索引节点,但它的数据指针引用原始块。两侧的写入都是写时复制:更改的块单独写入,未更改的块保持共享。从未被编辑过的克隆几乎不需要任何成本,删除它几乎没有任何回报。
硬链接。 一个 inode 具有两个目录条目。根本没有第二个文件,只有第二个名称。删除一个名称会减少链接计数并保留数据。当姓氏消失时,磁盘会释放空间。
基于内容的扫描器在所有三种情况下都会看到相同的字节。除非它检查文件系统层,否则它会报告所有三个层的相同保存情况。
为什么估计偏高
报告层是问题所在,而且它比 APFS 更老。 Finder 显示克隆和每个硬链接的完整大小,也是如此ls -l。他们都没有告诉您存储是共享的。累加文件大小的扫描仪会直接继承该错误,并且您的工作流程越依赖 Finder 重复项和克隆感知副本,差距就越大。
du在某一特定方面表现得更好。在单次运行中,它会对索引节点进行一次计数,因此充满硬链接的文件夹会报告实际的总数。克隆仍然会被计数两次,因为克隆是单独的索引节点。
结果是,在保存视频项目、导出的渲染或虚拟机图像的 Mac 上,估计可能会出现一个数量级的错误,而这些文件正是人们克隆而不是复制的文件。
在信任之前先检查一下
**查找硬链接。**第二列ls -li 是链接计数。
ls -li ~/Movies/big.mov
# 12345678 -rw-r--r-- 2 chama staff 4294967296 Aug 18 09:12 big.mov
# ^ link count 2: another name points at the same data
以上任何内容1 意味着删除此名称不会释放任何内容,直到其他名称也消失为止。
衡量实际节省情况。 获取数据卷前后的可用空间。
df -h /System/Volumes/Data # before
# delete the duplicates
df -h /System/Volumes/Data # after
区别在于描述您的磁盘的唯一数字。删除之前打印的所有内容都是预测。
预计克隆将保持不可见。 在原生 macOS 系统上没有受支持的命令来回答“此文件是克隆吗”。这正是为什么储蓄估算应该有一个置信水平而不是一个有信心的总额。
删除了,空间还没有恢复
即使重复项是真实的,两种机制也会延迟结果。
Time Machine 将本地快照保存在启动磁盘上,快照保存拍摄时存在的文件块。删除 20 GB 的重复项,这些块将保留分配给快照的状态,直至其过期。 macOS 将其报告为可清除空间,并在磁盘紧张时自动回收它。列出存在的内容:
tmutil listlocalsnapshots /
垃圾箱是更简单的情况,而且更容易吸引人们。垃圾箱中的文件仍然占用块。清空它,然后测量。
诚实的重复报告是什么样子的
StorageRadar 将估算视为必须经过审核的索赔,因此工作流程围绕三个规则构建。
确认字节与字节的匹配。 候选者按大小分组,使用三个块上的部分 SHA-256 进行筛选,然后才与完整 SHA-256 进行比较。在执行任何操作之前,索引节点、设备和大小都会重新验证,因此在扫描期间更改的文件无法根据过时的证据删除。
给数字附加不确定性。 估计的物理节省可以为空,带有置信值,并列出可能较低的原因,包括 APFS 克隆和硬链接。共享块的重复组被报告为释放的组少于看起来的组。
切勿在没有管理员的情况下离开组。 如果您的选择将删除每个副本,则应用步骤会阻止,并且删除会在任何内容移动之前通过试运行和预检运行,默认情况下会使用“垃圾箱”和一个简短的撤消窗口。
仅云文件也保持不变。除非您允许,否则不会下载无数据文件进行哈希处理,因为具体化 200 GB 的 iCloud 存档来比较它们并不是清理工作。
真正的重复项来自哪里
克隆感知工具可以悄悄地减少现代 Mac 上真正浪费的数量,因此有助于查看重复项在哪些地方仍显示为完整副本:
- 两次到达的下载
file.zip和file (1).zip。 - 导出并渲染在项目旁边编写,然后复制到交付文件夹。
- 相机和手机导入在不同的库中运行两次。
- 项目文件夹复制到同一磁盘上的备份目录,这是副本,而不是备份。
- 档案被解压两次到不同的目的地。
这些是具有自己的块的普通副本,删除多余的副本将返回完整大小。
有效的顺序
- 扫描并让工具按内容(而不是按名称或大小)确认重复项。
- 将节省估算作为一个范围读取,并检查该工具是否允许共享存储。
- 记录可用空间
df -h /System/Volumes/Data。 - 通过垃圾箱删除,每组保留一份,并清空垃圾箱。 5、再次测量,以差异为准。
如果第二次测量让您失望,那么这些文件是共享存储,而不是浪费。没有丢失任何东西,而且磁盘已经比报告建议的要小。
常见问题
为什么删除重复项几乎没有释放我 Mac 上的空间?
这些副本可能是克隆或硬链接。在 APFS 上,两个文件可以共享相同的存储块,因此删除其中一个文件只会释放不同的块。扫描仪计算了两个文件的完整大小,因为这是文件系统为每个名称报告的大小。
什么是 APFS 克隆文件?
克隆是一个单独的文件,具有自己的索引节点,指向与原始文件相同的数据。对任一侧的写入都是写时复制,因此双方都会消耗一个存储副本,直到内容出现分歧为止。 Finder 的 Duplicate 命令和 cp -c 创建克隆。
硬链接与克隆有何不同?
硬链接是同一 inode 的另一种名称,因此一个文件对象具有两个目录条目。删除一个名称永远不会释放存储空间,而另一个名称仍然指向它。 ls -li 显示链接计数,大于 1 的值表示存在其他名称。
APFS 会自动删除我的文件的重复数据吗?
不会。仅当通过 Finder、cp -c 或调用 clonefile 的应用程序显式创建克隆时,APFS 才会共享块。碰巧保存相同字节的两个文件仍然占用两个存储副本。
如何衡量清理实际释放了多少空间?
使用 df -h /System/Volumes/Data 记录删除前后的可用空间并进行比较。任何重复查找器打印的估计都是预测,在 APFS 上,预测在两个方向上都可能是错误的。
为什么即使删除真正的重复项后,可用空间也没有恢复?
Time Machine 本地快照会保留已删除文件的块,直到它们变薄为止,因此该空间显示为可清除而不是空闲。使用 tmutil listlocalsnapshots / 列出它们,并显式等待自动稀疏或可用空间。