前情回顾
当前的开发和工作主力机是 20 年买入的 2019 款 MacBook Pro(16-inch/2T/i9/64GB/5600M),在今年年初的时候曾因电池性能问题,在天才吧保内更换过一次电池。
当时在天才吧检测出机器主板上有一个 CPU 传感器存在故障,但因为机器属于定制机,零售店没有可用配件,需要专门下单调取新主板配件才能进行更换,遂作罢,只更换了 C 面键盘和全新电池。
事实上另一个原因是:19 款的 MacBook Pro 硬盘和主板是焊死的,更换配件意味着要抹掉系统,伴随的是本地大量数据文件的整理和软件开发环境的配置迁移,重装一次的代价对我无异于连续通宵熬上一周。当初买的时候敢花钱,AC+ 还有一年多,果断放弃,想着等快过保来换个新硬件也不错。。。=皿=。
故事的开始
最近设备因为散热问题频繁死机。趁着周末去了一趟天才吧,得知店内尚有一块匹配配置的主板配件,于是沟通预定,开始了整理文件做系统迁移的前期准备。
本想着把文件整理到 NAS 上就够了,登录到 NAS 后,意外发现 NAS 存储告警,心里瞬间一凉(两年前曾经坏过盘的阴影还在),以为又要坏盘了。仔细一看:存储良好,存储空间不够了。。。
通过 群晖
的 存储空间分析器
进行分析,发现是 时间机器(Time Machine)备份占用了大量空间。归根结底,还是平时只顾备份,却没有想着清理。于是有了这篇文章。清理 NAS 上的 Time Machine 存储。
时间机器命令行工具
Apple 为 时间机器备份管理提供了一个叫 tmutil
的命令行工具,对应翻译应该就是 Time Machine Util(时间机器实用程序)。能实现的功能可以通过 tmutil --help
进行查看,输出如下:
➜ ~ tmutil --help
Usage: tmutil version
Usage: tmutil enable
Usage: tmutil disable
Usage: tmutil startbackup [-a | --auto] [-b | --block] [-r | --rotation] [-d | --destination dest_id]
Usage: tmutil stopbackup
Usage: tmutil delete [-d backup_mount_point -t timestamp] [-p path]
Usage: tmutil deleteinprogress machine_directory
Usage: tmutil restore [-v] src ... dst
Usage: tmutil compare [-@acdefghlmnstuEX] [-D depth] [-I name]
tmutil compare [-@acdefghlmnstuEX] [-D depth] [-I name] snapshot_path
tmutil compare [-@acdefghlmnstuEUX] [-D depth] [-I name] path1 path2
Usage: tmutil setdestination [-a] mount_point
tmutil setdestination [-ap] afp://user[:pass]@host/share
Usage: tmutil removedestination destination_id
Usage: tmutil destinationinfo [-X]
Usage: tmutil addexclusion [-p|-v] item ...
Usage: tmutil removeexclusion [-p|-v] item ...
Usage: tmutil isexcluded item ...
Usage: tmutil inheritbackup machine_directory
tmutil inheritbackup sparse_bundle
Usage: tmutil associatedisk [-a] mount_point volume_backup_directory
Usage: tmutil latestbackup [-m] [-t] [-d mount_point]
Usage: tmutil listbackups [-m] [-t] [-d mount_point]
Usage: tmutil machinedirectory
Usage: tmutil calculatedrift machine_directory
Usage: tmutil uniquesize path ...
Usage: tmutil verifychecksums path ...
Usage: tmutil localsnapshot
Usage: tmutil listlocalsnapshots <mount_point>
Usage: tmutil listlocalsnapshotdates [<mount_point>]
Usage: tmutil deletelocalsnapshots [<mount_point> | <snapshot_date>]
Usage: tmutil thinlocalsnapshots <mount_point> [purgeamount] [urgency]
查看时间机器快照并尝试删除
在这里,我仅用到了几个简单且常用的命令:
tmutil listlocalsnapshots
: 列出当前本机的时间机器存储备份tmutil listbackups
: 列出当前使用的时间机器存储备份tmutil delete
: 删除指定的时间机器备份
第一个 tmutil listlocalsnapshots
在我的 MBP 本地存储空间告急的时候曾经帮了大忙,但这次并不会用到。选择使用 tmutil listbackups
查看 NAS 上的备份数据。
➜ ~ tmutil listbackups
2021-10-20-085701.backup
2021-10-31-043627.backup
...
2022-10-15-200347.backup
2022-10-15-225734.backup
果然好多没有意义的老备份。。。于是执行 tmutil delete
删除时间机器快照。
➜ ~ sudo tmutil delete 2021-10-20-085701.backup
Specify either a path or a mountpoint and timestamp
Usage: tmutil delete [-d backup_mount_point -t timestamp] [-p path]
怎么回事,要求指定一个路径或挂载点或时间戳?难道 ******.backup 并不是具体的挂载点名称?执行 tmutil machinedirectory
获取时间机器目录位置
➜ ~ tmutil machinedirectory
Password:
/Volumes/Normal's Mac Book Pro 16的备份
执行 cd /Volumes/Normal\'s\ Mac\ Book\ Pro\ 16的备份 && ls
查看当前挂载的时间机器存储文件列表,发现并没有如同 tmutil listbackups
命令显示的数据目录。
➜ /Volumes cd Normal\'s\ Mac\ Book\ Pro\ 16的备份 && ls
2022-10-15-225734.previous backup_manifest.plist
由于时间机器并不是完全按照目录形式进行存储,自然看不到。。心生一计,执行 open .
通过访达(Finder)打开,于是看到了日常不太可能会发现的一个时间机器管理界面。。Bingo~ 跟命令行内容对上了。
这个地方也是 Apple Time Machine 的设计导致,在终端下文件系统并不能让你看到备份的历史结构,因为 Time Machine 一开始就不是纯粹按照目录存储进行设计的。Apple 提供了时间机器管理工具,但却没有提供一个轻松进入这个界面的入口…… 也不知道是设计缺陷还是产品经理故意为之
再次删除历史快照
接下去的操作就简单了,直接 GUI 上右击立即删除
,确认后就相当于删除了你指定删除的快照了。再次执行 tmutil listbackups
查看,发现 2021-10-20-085701.backup 居然还在……
➜ ~ tmutil listbackups
2021-10-20-085701.backup
2021-10-31-043627.backup
...
重新查看 tmutil listbackups
的参数,发现可以带上 -m 执行:tmutil listbackups -m
➜ ~ tmutil listbackups --help
tmutil: unrecognized option `--help'
Usage: tmutil listbackups [-m] [-t] [-d mount_point]
➜ ~ tmutil listbackups -m
/Volumes/.timemachine/EB99225E-1A86-4610-A1D9-4326F69D3519/2021-10-20-085701.backup/2021-10-20-085701.backup
/Volumes/.timemachine/EB99225E-1A86-4610-A1D9-4326F69D3519/2021-10-31-043627.backup/2021-10-31-043627.backup
...
/Volumes/.timemachine/EB99225E-1A86-4610-A1D9-4326F69D3519/2022-10-15-200347.backup/2022-10-15-200347.backup
/Volumes/.timemachine/EB99225E-1A86-4610-A1D9-4326F69D3519/2022-10-15-225734.backup/2022-10-15-225734.backup
再试试 sudo tmutil delete -p
➜ ~ sudo tmutil delete -p /Volumes/.timemachine/EB99225E-1A86-4610-A1D9-4326F69D3519/2021-10-20-085701.backup/2021-10-20-085701.backup
/Volumes/.timemachine/EB99225E-1A86-4610-A1D9-4326F69D3519/2021-10-20-085701.backup/2021-10-20-085701.backup: Invalid deletion target (error 22)
Total deleted: Zero KB
额。。。老老实实面向搜索引擎,发现需要同时指定 -d 和 -t,形式参考 sudo tmutil delete -d /Volumes/TimeMachineBackups -t XXXX-XX-XX-XXXXXX
。
➜ ~ sudo tmutil delete -d /Volumes/Normal\'s\ Mac\ Book\ Pro\ 16的备份 -t 2021-10-20-085701
(null): Resource busy (error 16)
emmmm,资源繁忙,感情是存储读写管理导致的问题。时间机器果然还是上一代的技术。。。断网重新接入 Wifi 释放磁盘链接,重新 tmutil listbackups
确保重新连上后,
➜ ~ sudo tmutil delete -d /Volumes/Normal\'s\ Mac\ Book\ Pro\ 16的备份 -t 2021-10-20-085701
Password:
1 backups deleted
➜ ~ tmutil listbackups
2021-10-31-043627.backup
2022-01-24-004051.backup
...
2022-10-15-200347.backup
2022-10-15-225734.backup
再次查看快照列表,快照已被成功删除。