修复 MacOS TimeMachine 的同步错误
引言
作为一个新的白🍎用户,对于 TimeMachine 属于又爱又恨,其官方指定的备份目标 AirPort Time Capsule 实在是过于高贵,所以我选择使用一个提供 AFP 服务的 NAS 作为备份目标磁盘 (SMB 协议据说会出现神秘掉盘问题)
在内网中快乐的使用几天后出了趟门,想着使用 Wireguard 连回内网路由段接着备份。理想非常的丰满,实践却出了问题,在某一次备份时意外断了网,回到内网中报了如下错误
无法访问备份磁盘映像“Vaala的MacBook Pro.sparsebundle”(错误35)。
在 Apple 论坛和互联网中找到的都是让我清除备份重来,就像下面这样
但备份不久是为了防止出错?再来清理出错的备份也太本末倒置了,分析问题发生的情况后我选择降低备份频率,使用 TimeMachineEditor 阻止日间备份,并且备份只能在 Mac 不活跃时进行。不出意外,再次苟活几天后又出现了相同错误,原因竟然是 MacOS 在休眠时会自动断开网络连接导致备份失败😅😅😅😅,在经过两次清空备份后,抽了一点时间查找相关资料,得到了最终的解决方案
步骤
-
首先关闭掉 TimeMachine 中的自动备份,其它与 TimeMachine 相关的程序例如 TimeMachineEditor 也尽量终止,在终止后尽量重启一次保证没有进程占用相关资源。
-
找到备份磁盘中的
sparsebundle
文件,将下面命令的路径替换掉。
hdiutil attach -nomount /path/to/sparsebundleFile
- 得到备份磁盘名称,会有很多个磁盘,找到格式为
/dev/diskNs2
的磁盘,N
为数字,s2
为第二分区,备注为Apple_APFS
,我这里是/dev/disk4s2
,接下来对该分区的备份进行检查。
# 要注意这里的磁盘前面加了一个r代表raw原始不缓存设备
fsck_hfs -p /dev/rdisk4s2
- 如果命令出现错误,将命令中的 p 参数替换为 f 再试一次,如果错误无法修复,还是考虑格式化重来吧
对于错误我们可以使用
diskutil mount diskNs2
挂载镜像并在 Finder 中检查。
- 然后我们 detatch 备份区
# 这里没有指定第二分区
hdiutil detach diskN
-
确定没有报错然后在 Finder 中找到
sparsebundle
文件,然后在文件上右键单击,点击查看包内容,找到名为com.apple.TimeMachine.MachineID.plist
的文件,使用 Xcode 打开编辑 (保证xml文件格式不会出错),找到VerificationState
将值修改为 1 -
如果存在键
RecoveryBackupDeclinedDate
则将其键和值都删除 -
保存修改,在 TimeMachine 设置中移除磁盘,然后再将磁盘加入备份目标,点击立即备份即可
参考
MacOS 确实不错,不过里面吃了💩的设定能不能改改啊😅