简短回答:在网络目标上,Time Machine 不会把文件复制到共享。它在共享上创建一个大型磁盘映像,并复制到其中。这一类错误都与该映像有关:无法创建、无法打开,或仍有东西占用着它。
这些消息都不意味着你现有的备份已经没了。抹掉驱动器几乎从来不是解决办法,却是你最常看到的建议。
Time Machine 需要网络共享无法提供的文件系统功能:硬链接、由它控制的所有权,以及在处理文件时锁定文件的能力。使用 SMB 的 NAS 无法保证这些。
所以在任何网络目标上,Time Machine 都会创建一个稀疏捆绑包,即一个以 .sparsebundle 结尾、表现为磁盘映像的文件夹。它装载该映像,备份就存放在其中一个完全由 Time Machine 控制的文件系统上。共享只需保存一个由编号数据块(称为 band)组成的文件夹。
这就是为什么网络备份有一整类插入式驱动器所没有的故障。插入式驱动器只有一处可能出错的地方,这里有两处,而你收到的消息通常与映像有关。
Time Machine 试图创建稀疏捆绑包,但共享拒绝了。按顺序逐一排查。
fruit:time machine = yes。没有它,macOS 可能连接得好好的,却仍然拒绝创建映像。映像已存在,但 macOS 无法挂接它。错误 45 是文件锁错误,所以通常的原因是已有东西打开了该映像。
token 或 .lock 文件。在没有任何程序装载映像时删除它们是安全的,下次装载时会重新创建。务必先确认映像未装载,否则会损坏它。原因相同,只是说得更直白,同样的四个步骤也能解决。先在 Finder 边栏中查找一个以你的 Mac 命名的已装载宗卷,因为最常见的答案是:它此刻就装载在你面前这台机器上。
通常是备份过程中共享断开了,原因可能是睡眠、Wi-Fi,或 NAS 为更新而重启。检查共享是否重新连接,然后在信任其中内容之前,用下面的验证步骤检查映像。
中断的网络备份可能让映像内部不一致,而屏幕上的每条消息看起来都正常。装载它并询问系统:
hdiutil attach -readonly /Volumes/<share>/<YourMac>.sparsebundle
diskutil verifyVolume /Volumes/<the volume it mounted>
这是只读的,所以查看不会改变任何东西。如果验证报告错误,对同一宗卷运行 diskutil repairVolume。如果修复失败,这个映像就完了,诚实的做法是在上面开始一条新的备份链,不再依赖旧映像中的内容。
这些错误全都是磁盘映像的特性,而磁盘映像之所以存在,是因为目标在网络上。把普通文件写入普通文件夹的备份不会有这些问题:没有会创建失败的映像,没有会过期的锁,也没有一损坏就连带其中所有备份的单个大对象。
最后一点值得细想。你在 NAS 上的全部 Time Machine 历史记录都在一个稀疏捆绑包里。它是一个对象。损坏发生在不该发生的地方,就会全部报废。
它把一个包含普通文件的文件夹写入共享,所以没有磁盘映像,没有锁定,也没有一个保存你所有版本的单一对象。备份途中离线的共享会被报告为无法访问的目标,并注明上次出现的日期,下一次备份会从上次中断的地方继续。
每个数据块都以其自身内容的哈希存储,并按计划依据该哈希读回,因此链条中任何地方的损坏都会在一个普通的周二被指出并定位。把 Mac 备份到 NAS 介绍了设置方法,包括决定休眠中的共享算作错误还是缺席的超时行为。
可以,但这会丢掉其中的所有备份,因为它们都在那一个映像里。先试试上面的四个步骤。只有在 diskutil repairVolume 已经修复失败时,删除才是答案。
因为没有磁盘映像。直接连接的驱动器拥有由 Time Machine 格式化和管理的独立文件系统,所以不需要映像,也不会有失效的锁。这是保留一份本地副本最有力的理由。
在大多数 NAS 软件中,支持该功能和在特定共享上启用它是两个不同的设置。检查共享,而不是产品页面。另一个常见原因是配额:映像在创建时声明了最大尺寸,较小的配额会拒绝它。
单独出现一次不危险。它意味着 macOS 无法锁定映像,因此什么也没写入。危险的是一连串这样的错误无人察觉,因为在一切看似正常时,最后一次成功的备份越来越旧。
不使用。它把普通文件写入共享上的一个文件夹,所以本页的错误对它都不存在。代价是共享必须可访问才能被计入,不可访问时应用会告诉你。