# Mac 上的重复文件：为什么 APFS 克隆改变了算法

> 在 APFS 上，访达拷贝出的文件往往是共享空间的克隆，删除后几乎不释放空间。如何安全地找到真正的重复文件，哪些不该动。

- URL: https://moreroom.app/zh-Hans/learn/duplicate-files-apfs-clones
- Published: 2026-10-17
- Updated: 2026-10-17
- Publisher: MoreRoom (Yando Pte. Ltd.) — https://moreroom.app

## TL;DR

- 在 APFS 上，访达的“复制”以及在同一宗卷内的拷贝会创建克隆，与原文件共享数据块，而不是重新拷贝一份。
- 只要另一份还在，删除克隆几乎不会释放空间，因为共享的数据块仍在使用中。
- 重复文件查找工具比较的是内容而不是数据块，因此可能报告出好几 GB 实际上永远不会出现在磁盘上的“可节省空间”。
- 用 shasum -a 256 之类的校验和确认是否真的重复，并保留 App 和资料库实际引用的那一份。
- 切勿手动删除“照片”图库或 App 包内部的重复文件；请改用“照片”自带的“重复项”相簿。

APFS 是当今所有 Mac 启动磁盘使用的格式，而在 APFS 上，一个“重复文件”往往根本不是重复的。当你在访达中选取**文件 › 复制**（Command-D），或者把文件拷贝到同一宗卷上的另一个文件夹时，macOS 通常会创建一个**克隆**：第二个文件指向与第一个文件相同的数据块。它几乎不占用额外空间，所以删除它也几乎拿不回任何空间。

## APFS 克隆的工作原理

克隆是一个新文件，但它的内容没有被拷贝。两个文件都指向磁盘上相同的数据块。只有当其中一个被修改时，APFS 才会为修改的部分写入新的数据块，这种技术叫作写时拷贝（copy-on-write）。未修改的部分仍然共享。

![完整拷贝会把每个数据块写两遍；克隆共享原文件的数据块；编辑之后，只有被修改的数据块是新的](https://moreroom.app/learn/img/duplicate-files-apfs-clones-blocks.svg)

macOS 会在以下情况下创建克隆：

- 你在访达中于**同一个 APFS 宗卷**内使用“**复制**”或拷贝（按住 Option 键拖移）。
- App 使用系统标准的文件拷贝调用来拷贝文件，很多 App 都是这样做的。
- 你在“终端”中使用 `cp -c`。普通的 `cp` 会写入一份完整的副本。

```sh
cp -c "Big Video.mov" "Big Video copy.mov"   # 克隆：共享数据，几乎不占新空间
cp "Big Video.mov" "Big Video copy.mov"      # 完整拷贝：把所有数据重新写一遍
```

拷贝到另一个宗卷、外置驱动器或网络共享时，始终是完整拷贝。正如 Howard Oakley [所解释的](https://eclecticlight.co/2023/04/28/apfs-hard-links-symlinks-aliases-and-clone-files-a-summary/)，从“时间机器”备份中恢复克隆时，它们也会失去共享关系：每一个都会作为独立的文件恢复。

## 为什么删除克隆几乎不释放空间

只有当使用某个数据块的**最后一个**文件被删除，并且没有本地快照仍保留着它时，空间才会回来。对于一对克隆，删除其中一个后，所有共享的数据块仍被另一个使用，所以你只能拿回几 KB 的文件系统元数据。我们做过测试：克隆一个 200 MB 的文件，可用空间只减少了约 4 KB；普通拷贝则减少了 200 MB。

部分编辑过的克隆介于两者之间。如果你克隆了一个 10 GB 的视频，然后剪辑了其中一份，那么不同的数据块只属于其中一个文件；删除这个文件会释放这些数据块，仅此而已。

## 为什么重复文件查找工具会高估可节省的空间

重复文件查找工具比较的是文件**内容**，通常借助校验和。克隆的内容与原文件完全相同，因此会被报告为重复文件，它的完整大小也会被计入“可节省”的总数。在有很多克隆的 Mac 上，这个总数可能高出好几 GB。

同样的盲点也解释了为什么有些工具的结果互相矛盾。访达的“**显示简介**”和 `du` 会把每个文件的大小分别相加，所以一个包含三个 1 GB 文件克隆的文件夹看起来像是 3 GB。真正会变化的，是“磁盘工具”中显示的宗卷可用空间。

如果你确实有很多真正的副本，更好的做法往往是**把它们转换成克隆**而不是删除，这样每个路径都还能正常使用。John Siracusa 开发的 Hyperspace 等工具做的就是这件事。

## 逻辑大小与分配大小

每个文件都有两个大小：

- **逻辑大小**：文件包含多少字节。`ls -l` 和访达的“大小”显示的就是它。
- **分配大小**：文件实际占用多少磁盘空间。访达中的“磁盘上”数值和 `du` 显示的就是它。

对于克隆（共享数据块）、稀疏文件（例如磁盘映像和虚拟机，未写入的区域不占空间）、被 APFS 压缩的文件，以及已移除下载的云端文件，这两个大小会不一样。更多内容请参见[逻辑大小与物理大小](https://moreroom.app/glossary#logical-vs-physical-size)。

```sh
ls -lh "Big Video.mov"   # 逻辑大小
du -h "Big Video.mov"    # 分配大小，按没有任何共享来计算
```

## 如何安全地找到真正的重复文件

**从大文件入手**。小的重复文件很少值得在意。在访达中选取**文件 › 新建智能文件夹**，点按 **+**，设置**文件大小 › 大于 › 500 MB**（如果第一个菜单中没有“文件大小”，请选取“**其他…**”），然后切换到列表视图并按名称排序。名称和大小相同的文件就是候选项。

**用校验和确认**。`shasum` 是 macOS 自带的工具，只会读取文件：

```sh
shasum -a 256 ~/Movies/"Trip.mov" ~/Desktop/"Trip copy.mov"
```

如果两串很长的十六进制字符相同，内容就完全相同。要检查整个文件夹里的大文件是否有相同的：

```sh
find ~/Movies -type f -size +100M -print0 | xargs -0 shasum -a 256 \
  | awk '{n[$1]++; l[$1]=l[$1] $0 "\n"} END {for (h in n) if (n[h]>1) print l[h]}'
```

这会按校验和分组，列出相同的文件。它不会删除任何东西。校验和相同并不能说明这些文件是否为克隆，所以请把这部分空间视为“可能可以回收”。

**如果你愿意，也可以使用口碑好的工具**。开源的 dupeGuru 和知名的商业 App 都可以，前提是你逐组检查，排除资料库和系统文件夹，并把它们给出的可节省空间当作上限来看待。

![处理重复文件的安全流程：确认内容相同，检查是否位于资料库或 App 内，保留被引用的那一份，然后对比可用空间](https://moreroom.app/learn/img/duplicate-files-apfs-clones-safe-check.svg)

## 删错副本的风险

内容相同并不意味着两份副本可以互换。

- “**照片”图库**。切勿在访达中删除 `.photoslibrary` 包内的文件；图库的数据库仍然需要它们，删除可能导致图库损坏。从 macOS Ventura 起，“照片”的“实用工具”下有一个“**重复项**”相簿，可以正确地合并重复项。删除的项目会先进入“最近删除”。
- “**音乐”、Final Cut Pro、Lightroom 等资料库**按路径引用文件。删掉资料库指向的那份“重复文件”，就会留下一个丢失的文件。
- **App 包**。很多 App 内含相同的框架。删除 `.app` 中的任何内容都会破坏它的代码签名，可能导致它无法打开。请改为卸载整个 App；参见[如何彻底卸载 Mac App](https://moreroom.app/learn/uninstall-mac-apps-completely)。
- **项目和代码**。项目文件夹中的文件会被构建和脚本引用；桌面上的那份副本通常才是应该移除的。
- **备份**。特意存放在另一个驱动器上的第二份副本是备份，不是重复文件。

拿不准时，保留位于 App 预期位置的那一份，把另一份移到废纸篓，这样还能放回原处。

## MoreRoom 能帮上什么忙

MoreRoom 的[免删除释放](https://moreroom.app/support/free-without-deleting)可以免费找出 1 MB 或以上的相同文件。使用 Pro 时，它会把多余的副本转换为 APFS 克隆，就像访达的“复制”一样：每个副本都留在原处，保留各自的名称、日期和标签，但数据只存储一份，也不会删除任何内容。每个文件在操作前都会再次检查；之后如果编辑了某个副本，它只会重新获得自己独立的空间。MoreRoom 还会如实地测量你的磁盘：扫描时，克隆的数据只计算一次，所以它的统计和矩形树图不会像逐个文件相加那样因克隆而虚高。它的规则还会标出可以检查的常见副本，比如留在“下载”文件夹中的旧磁盘映像。你移除的任何内容都会先移到废纸篓，并且可以撤销。对于“照片”中的重复项，请使用“照片”自带的“重复项”相簿。

## FAQ

### 在访达中复制文件会让占用的空间翻倍吗？

在 APFS 上不会。访达的“复制”（Command-D）以及在同一 APFS 宗卷内的拷贝会创建共享同一数据的克隆，因此在其中一份被编辑之前，副本几乎不额外占用空间。

### 怎样判断一个文件是不是克隆？

访达不会显示这一点，两份副本都会显示完整大小。实用的检验方法是：记下可用空间，删除其中一份，清倒废纸篓，看看可用空间是否增加。

### 为什么删除重复文件后空间没有释放？

这些文件很可能是共享同一数据的克隆或硬链接。只有当使用这些数据块的最后一个文件被删除后，空间才会回来。

### 使用重复文件查找工具安全吗？

口碑好的工具是安全的，前提是你逐一检查每组匹配结果。请排除“照片”和“音乐”资料库、App 包和系统文件夹，并记住它们估算的可节省空间可能把克隆也算了进去。

### MoreRoom 能查找重复文件吗？

能，从 0.2.1 版开始。“免删除释放”可以免费找出 1 MB 或以上的相同文件；使用 Pro 时，它会把多余的副本转换为 APFS 克隆，每个文件都留在原处，但数据只存储一份。不会删除任何内容。
