APFS 苹果文件系统数据恢复:快照、克隆、加密机制,Mac 误删、iPhone 数据恢复的底层原理与方法。
APFS(Apple File System)是苹果 2017 年起用于 macOS、iOS、iPadOS 的文件系统,替代了老旧的 HFS+。它的三个核心机制直接影响数据恢复:快照(Snapshot)、克隆(Clone)、加密(Encryption)。
APFS 快照是文件系统某一时刻的只读「存档」。Time Machine 本地快照、系统升级前快照都会保留删除前的文件状态。误删后先查快照,很多情况下能直接恢复,无需专业工具。
APFS 复制文件默认用克隆(写时复制),同一个文件的多份「副本」其实共享同一块数据。这带来两个影响:好的方面是数据冗余少、恢复对象集中;坏的方面是一旦底层数据块损坏,所有引用它的「副本」同时受影响。
APFS 支持全盘加密(FileVault)。有密码或恢复密钥,解密后数据可正常恢复;密钥丢失则无法解密,这是加密机制决定的,专业恢复也绕不过。所以密钥务必妥善保存。
Q: Mac 误删文件能恢复吗?
A: 能。先查废纸篓和 Time Machine/APFS 快照,多数误删可直接找回;快照没有的,扫描 APFS 卷仍可恢复,未覆盖的情况下成功率很高。
Q: iPhone 的 APFS 能直接恢复吗?
A: 不能直接。iPhone 的 APFS 卷有硬件加密(Secure Enclave),无法直读闪存,需走 iTunes/iCloud 备份或 AFU 解锁窗口。这与 Mac 的 APFS 恢复逻辑不同。
Q: APFS 快照能恢复多久前的数据?
A: 取决于快照保留策略。Time Machine 本地快照通常保留 24 小时到数天,系统升级前快照按系统策略保留。快照覆盖的时间窗口内可精确回滚。
Q: FileVault 加密盘忘记密码能恢复吗?
A: 有恢复密钥(Recovery Key)能解密恢复;密钥和密码都丢失则基本无法恢复,这是 FileVault 的安全设计。务必保存好恢复密钥。
APFS 是写时复制(COW)文件系统,这个特性对恢复既是机会也是陷阱:机会是旧块不会被立即覆盖, 陷阱是同一份数据在快照、克隆、卷之间可能有多个引用,随意挑一个"看起来对"的块会拿到旧版本。
| 项目 | 取值 / 位置 | 说明 |
|---|---|---|
| 容器超级块 | 块 0,对象类型 NXSB | 描述容器块大小、卷数量、检查点区 |
| 对象头 | 每个对象前 32 字节(校验和 + OID + 类型) | 校验和校验不过说明块已损坏 |
| 卷超级块 | 类型 APSB,由容器列出 | 多卷共用容器空间,卷间可能互相引用 |
| 块大小 | 容器超级块中的 nx_block_size(常见 4096) | 所有偏移按块号换算,不按字节 |
| 快照元数据 | 卷超级块中的快照元数据树 | 有快照时优先按快照还原,比扫块可靠 |
| 克隆引用 | 物理块被多个逻辑范围引用 | 按块扫描会重复导出同一份数据 |
# 只读挂载(Linux 上通过 apfs-fuse,务必 -o ro)
sudo apfs-fuse -o ro /dev/sdX2 /mnt/apfs
# 容器与卷结构(只读)
sudo apfsutil -l /dev/sdX2
# 确认块 0 的对象类型是否为 NXSB(前 32 字节为对象头)
xxd -l 64 /dev/sdX2
顺序建议:先枚举容器里的卷与快照,再从快照挂载导出;只有在快照区也被破坏时, 才退到按 NXSB/APSB 结构扫块。直接按文件签名扫 APFS 分区,拿到的往往是加密前的 中间态或已被克隆覆盖的旧版本。