修复 MacOS TimeMachine 的同步错误


引言

作为一个新的白🍎用户,对于 TimeMachine 属于又爱又恨,其官方指定的备份目标 AirPort Time Capsule 实在是过于高贵,所以我选择使用一个提供 AFP 服务的 NAS 作为备份目标磁盘 (SMB 协议据说会出现神秘掉盘问题)

在内网中快乐的使用几天后出了趟门,想着使用 Wireguard 连回内网路由段接着备份。理想非常的丰满,实践却出了问题,在某一次备份时意外断了网,回到内网中报了如下错误

无法访问备份磁盘映像“Vaala的MacBook Pro.sparsebundle”(错误35)。

在 Apple 论坛和互联网中找到的都是让我清除备份重来,就像下面这样

https://discussionschinese.apple.com/thread/86190

但备份不久是为了防止出错?再来清理出错的备份也太本末倒置了,分析问题发生的情况后我选择降低备份频率,使用 TimeMachineEditor 阻止日间备份,并且备份只能在 Mac 不活跃时进行。不出意外,再次苟活几天后又出现了相同错误,原因竟然是 MacOS 在休眠时会自动断开网络连接导致备份失败😅😅😅😅,在经过两次清空备份后,抽了一点时间查找相关资料,得到了最终的解决方案

步骤

  1. 首先关闭掉 TimeMachine 中的自动备份,其它与 TimeMachine 相关的程序例如 TimeMachineEditor 也尽量终止,在终止后尽量重启一次保证没有进程占用相关资源。

  2. 找到备份磁盘中的 sparsebundle 文件,将下面命令的路径替换掉。

hdiutil attach -nomount /path/to/sparsebundleFile
  1. 得到备份磁盘名称,会有很多个磁盘,找到格式为 /dev/diskNs2 的磁盘,N 为数字,s2 为第二分区,备注为 Apple_APFS,我这里是 /dev/disk4s2,接下来对该分区的备份进行检查。
# 要注意这里的磁盘前面加了一个r代表raw原始不缓存设备
fsck_hfs -p /dev/rdisk4s2 
  1. 如果命令出现错误,将命令中的 p 参数替换为 f 再试一次,如果错误无法修复,还是考虑格式化重来吧

对于错误我们可以使用 diskutil mount diskNs2 挂载镜像并在 Finder 中检查。

  1. 然后我们 detatch 备份区
# 这里没有指定第二分区
hdiutil detach diskN
  1. 确定没有报错然后在 Finder 中找到 sparsebundle 文件,然后在文件上右键单击,点击查看包内容,找到名为 com.apple.TimeMachine.MachineID.plist 的文件,使用 Xcode 打开编辑 (保证xml文件格式不会出错),找到 VerificationState 将值修改为 1

  2. 如果存在键 RecoveryBackupDeclinedDate 则将其键和值都删除

  3. 保存修改,在 TimeMachine 设置中移除磁盘,然后再将磁盘加入备份目标,点击立即备份即可

参考

MacOS 确实不错,不过里面吃了💩的设定能不能改改啊😅

- The End -