我试图让 Time Machine 在我的 OS X 10.7(Lion)iMac 和机场基站上的远程驱动器上再次运行,唯一有效的解决方案是将硬盘上的 .sparsebundle 文件重命名为“INVALID.sparsebundle”,这样它就可以在该卷上重新启动。
备份是一个 .sparsebundle(实际上是一个装满文件的文件夹),大小约为 400 GB。我今天早上 8 点尝试了这个命令,但到下午 6:30 仍然没有完成:
sudo rm -rf INVALID.sparsebundle
有什么方法可以知道它为什么挂起或它在做什么?在 Mac OS X 命令行中,甚至使用一些 OS X 的漂亮图形工具,都有各种很酷的技巧,可能涉及使用 GCC 调试器或 dtrace,甚至可能是某种内核监视进程,可以告诉我当前正在执行什么函数调用或系统调用。
我可以找到 rm 命令的 PID:
$ ps aux |grep "rm -rf"
root 392 0.0 0.3 2454248 20232 s001 U+ 9:08am 0:12.04 rm -rf /Volumes/Backup3tb/INVALID.sparsebundle
我能做些什么来找出 PID 392 目前正在做什么以及它是否真的挂起了?(我打算把它放一夜,在连续 24 小时没有响应之后,我会考虑中止它,如果我这样做了,我就会格式化这个卷。)
我尝试了 iosnoop,如下所示:
$ sudo iosnoop -p 392
UID PID D BLOCK SIZE COMM PATHNAME
它没有显示任何内容。我怀疑这意味着该过程确实被某事挂起了?
答案1
幸运的是,.sparsebundle 实际上是包含 8MB“band 文件”的目录层次结构。如果您导航到该目录层次结构并观察,您可能会看到是否有任何文件被删除。如果您想从 Finder 执行此操作,请在右键单击 .sparsebundle 时使用上下文菜单选项“显示包内容”。
我相信 Time Machine 仅在您备份到远程 AFP 服务器(例如 Time Capsule 或 Mac OS X Server(或启用了文件共享的 Mac OS X“客户端”,或 Unix 上的 netatalk 等))时才使用 .sparsebundle。因此,您可能会遇到网络或服务器速度缓慢的情况;这可能不是您本地机器的问题。如果可行,请考虑重新启动 AFP 服务器,然后重新启动删除过程。
对于本地 USB 驱动器,Time Machine 通常需要一个专用分区来备份,并巧妙地利用文件系统硬链接来跟踪哪些文件在备份过程中没有改变。您的问题听起来像是本地 USB 驱动器,所以您谈论 .sparsebundle 让我很惊讶。它以前是插入远程 AFP 服务器,但现在是本地服务器还是其他什么?
答案2
我发现 Mac OS 中的系统监视器有一个方便的功能,称为“示例进程”,它可以让我查看它是否正在执行任何操作或是否冻结。
通过定位可能挂起的进程并对其进行采样,我可以看到正在执行哪些函数(如果有的话)。如果我什么也没得到,那么可以假设该进程已挂起。
请注意,通过 Apple 网络协议 (AFP) 删除 .sparsebundle(例如将您的 Mac 连接到 Airport Extreme 基站上的远程网络驱动器时)并删除由 Time-Machine 创建的网络模式备份时,会可靠地挂断“/bin/rm”命令行 darwin/bsd rm 实用程序。
我还发现,当 .sparsebundles 变得非常大时,Time Machine 会损坏它们,在我的系统中,超过 600 GB。我只能在 (a) 不联网的情况下或 (b) 总备份大小保持在 500 GB 以下时才能可靠地使用 Time Machine。