拯救macOS High sierra的硬盘空间

0x00 : 起因

Mac一直开着time machine备份数据,一直没出啥问题。
直到今天在工作的时候,原本clone的一个虚拟机有问题,我就删了,重新克隆。(没有快照真的尴尬了)

结果发现克隆不了,提示我硬盘空间不足。 :(
我看了下本机的硬盘,明明还有120g+呢,怎么会不足呢。

0x01 : 问题所在

我使用了clean my mac各种搞事、清理空间,磁盘剩余空间到了200g。。但是我克隆还是失败 :(

于是打开磁盘工具查看,发现有150g空间的空间是可以清除的,就很好奇哪来的这么大的空间…

看了Apple官网,说是啥文件可以存iCloud,然后下载的时候用,就可以省下来一部分空间,可是我想了想,肯定不是这个啊,我iCloud一共才50g,而且才用了一半,这150g肯定不对。

后来在v2ex看到了正解。

这是升级了10.13后的time machine搞的事,他有自动本地备份。

1
当 TM 打开后,如果备份介质不可用,那么 TM 不会停止工作,它依然会监控系统的运行,并建立本地快照,以达成 TM 的备份功能,比如如果你在此时不小心删除了一个文件,那么依然可以从 TM 中将它恢复,这是一个不错的功能。一旦你的备份介质可用,它会自动将快照移到(不是备份,是移动)备份介质中,以释放本地空间;而且它会依照当前系统分区的使用情况来确认自己建立本地快照的行为,简单说就是当本地空闲空间过少时,它会酌情删除旧的本地快照。 

大概就是这样的情况。

0x02 : 解决

1. 关闭本地备份
1
sudo tmutil disablelocal

但是我发现这个命令已经没了,好像是被移除了。

2. 删除本地备份

只能先用tmutil listlocalsnapshots [mount]找本地备份,然后使用 tmutil deletelocalsnapshots YYYY-MM-DD-HHMMSS 来删除。
下面是我的测试…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# muhe @ muheMacBookPro in ~ [17:00:12] C:64
$ tmutil listlocalsnapshots
Usage: tmutil listlocalsnapshots <mount_point>

# muhe @ muheMacBookPro in ~ [17:00:25] C:64
$ tmutil listlocalsnapshots /
com.apple.TimeMachine.2018-03-09-011841
com.apple.TimeMachine.2018-03-13-181325
com.apple.TimeMachine.2018-03-13-191609
com.apple.TimeMachine.2018-03-13-202018
com.apple.TimeMachine.2018-03-13-211538
com.apple.TimeMachine.2018-03-13-221327
com.apple.TimeMachine.2018-03-14-001309
com.apple.TimeMachine.2018-03-14-012200
com.apple.TimeMachine.2018-03-14-030328
com.apple.TimeMachine.2018-03-14-050253
com.apple.TimeMachine.2018-03-14-064523
com.apple.TimeMachine.2018-03-14-104506
com.apple.TimeMachine.2018-03-14-115132
com.apple.TimeMachine.2018-03-14-142419
com.apple.TimeMachine.2018-03-14-152240
com.apple.TimeMachine.2018-03-14-162236
com.apple.TimeMachine.2018-03-14-163225

# muhe @ muheMacBookPro in ~ [17:00:32]
$ tmutil deletelocalsnapshots 2018-03-09-011841
Deleted local snapshot '2018-03-09-011841'

# muhe @ muheMacBookPro in ~ [17:01:12]
$ tmutil deletelocalsnapshots 2018-03-13-181325
Deleted local snapshot '2018-03-13-181325'

写了个脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/usr/bin/python
import subprocess


cmd = 'tmutil listlocalsnapshots /'
process = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = process.communicate()
out = out.split('\n')

local_snapshots = []

for item in out:
local_snapshots.append(item.split('.')[-1])

for item in local_snapshots:
try:
cmd = 'tmutil deletelocalsnapshots {0}'.format(item)
print ('[*] Deleting localsnapshot : {0}'.format(item))
process = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = process.communicate()
print ('[*] Localsanpshot {0} deleted'.format(item))
except Exception as e:
print ('[!] Error on {0} , {1}'.format(item, e))
print ('[*] All done, have a nice day :)')

0x03 : 参考

10.13 升级后,多出了很大一块隐藏空间,不能用也删除不了?– v2ex