Time Machine 是 macOS 自带的一个备份工具,能够自动备份系统中的文件,并保留各个文件的历史版本。
在备份磁盘空间不足时,Time Machine 能够自动清理旧备份。但是部分场景下,仍有手动清理备份的需求,例如:
- 一个硬盘被多台 Mac 使用,清理一台电脑的旧备份,为另一台电脑腾出备份空间
- 释放硬盘空间,用于保存其他文件
- 换用小容量硬盘,例如从 HDD 更换为 SSD
- 删除备份中不重要的大文件(例如 Stram 游戏库、虚拟机、iOS 模拟器等),为个人文档等重要文件留出更多备份空间,从而保留重要文件的更多历史版本
在我的 NAS 上,由于之前没有设置空间配额,Time Machine 备份占用了大量空间,影响其他文件的存放。于是,我开始了解如何进行 Time Machine 的清理。
tmutil 命令行工具
macOS 自带 tmutil
工具,能够实现查看备份、创建备份、删除备份、比较备份等功能。
其中,tmutil listbackups
命令可以显示 Time Machine 中的所有备份:
$ tmutil listbackups
/Volumes/时间机器备份/Backups.backupdb/blanboom-studio/2019-12-21-200941
/Volumes/时间机器备份/Backups.backupdb/blanboom-studio/2020-01-05-221538
/Volumes/时间机器备份/Backups.backupdb/blanboom-studio/2020-01-19-203155
tmutil delete
命令则可以删除 Time Machine 中的指定备份:
$ sudo tmutil delete /Volumes/时间机器备份/Backups.backupdb/blanboom-studio/2019-02-01-211852
Deleting: /Volumes/时间机器备份/Backups.backupdb/blanboom-studio/2019-02-01-211852
Deleted (427.2M): /Volumes/时间机器备份/Backups.backupdb/blanboom-studio/2019-02-01-211852
有了这两条命令,我们可以方便地在 shell 脚本中使用,进行批量删除备份的操作。
使用脚本批量删除旧备份
在上网搜索的过程中,我发现已经有人完成了批量删除 Time Machine 备份的脚本,下载该脚本,修改文件中的相关参数,即可实现对 Time Machine 的批量清理:
我对这个脚本进行了简单的修改,方便在使用时直接指定参数。脚本可在如下两个链接中下载:
使用时,只需要运行 tmcleanup.sh
,后面依次跟上 Time Machine 磁盘挂载路径、计算机名称、要保留的备份的天数即可。例如下面的命令,能够实现清理 /Volumes/时间机器备份/Backups.backupdb
路径下,计算机 blanboom-studio
上 30
天前的所有备份:
$ sudo ./tmcleanup.sh /Volumes/时间机器备份/Backups.backupdb blanboom-studio 30
使用脚本删除 50% 的旧备份
Time Machine 的一大特色功能,是智能保留备份的历史版本。对于近期的备份,保留尽可能多的版本,而对于早期备份,只保留每月版本:
但是,Time Machine 只能做到保留旧备份的每周备份。如果想要实现保留一年前的每两周备份、或者保留一年前的每月备份,Time Machine 就无能为力了。
上文的脚本经过简单的修改,就可以在删除旧备份时,每两条备份中只删除一条,而不是全部删除。这样就实现了保留 50% 的旧备份。
当然,也可以根据自己的需求修改脚本或组合使用,实现保留 25%,或者保留 75% 的旧备份。
修改后的脚本也已经上传到我的 GitHub 仓库,使用上文链接中的 tmcleanup_50percent.sh
,即可实现清除 50% 的旧备份:
# 删除三个月前 50% 的备份(保留三个月前每两周备份)
$ sudo ./tmcleanup.sh /Volumes/时间机器备份/Backups.backupdb blanboom-studio 90
# 连续两次运行脚本,实现删除一年前 75% 的备份(保留一年前的每月备份)
$ sudo ./tmcleanup.sh /Volumes/时间机器备份/Backups.backupdb blanboom-studio 365
$ sudo ./tmcleanup.sh /Volumes/时间机器备份/Backups.backupdb blanboom-studio 365
使用 BackupLoupe 深入分析 Time Machine 空间占用情况
上述脚本能够做到方便地删除旧备份。但是,想要更加深入地分析 Time Machine 的空间占用情况,进行针对性的清理,就要用到 BackupLoupe 了:
BackupLoupe 可以实现如下两点功能:
- 分析哪些备份占用空间较大,从而做到删除占用空间大的备份
- 分析备份中,哪些文件和目录占用空间大,从而做到删除备份中占用空间大的文件(例如 Steam 游戏库、大型 App、虚拟机、iOS 模拟器、视频文件等)
通过针对性地删除占用备份中不重要的大文件,可以腾出空间让 Time Machine 保存重要文件(例如个人文档、照片等)的更多历史版本,从而更充分地利用 Time Machine 存储空间。
BackupLoupe 的使用也很简单,打开 BackupLoupe,建立索引后,就可以看到每一个备份、以及备份中的每个目录的空间占用情况:
不过 BackupLoupe 本身只提供分析功能,并没有自带清理功能。关于如何清理备份中指定的文件或目录,可参考这篇文章: