在macOS上释放出足够的磁盘空间

2020-05-11

引子

事件起因是在使用过程中遇到了频繁的弹窗如下图

提示空间不足

提示空间不足

一般情况下我会选择关闭这个提示,但是这次,这个提示在被关闭后几乎是立刻又再次显示了,况且还记得上一次总共清出十几个G的空间,于是打开D.Cleaner Pro进行一遍磁盘分析.

磁盘分析

以前也使用过Dr. Cleaner Pro的「磁盘分析」功能手动分析文件的磁盘空间占用情况,但是都仅限于查看用户空间的内容,例如应用程序和home目录,这次决定去系统文件夹看看,具体是,有一个奇怪的/private文件夹占用空间特别大,而据我所知距离上一次清空系统缓存才刚过去不久,就这样一直点进去,直到看到

Dr. Cleaner Pro的统计

Dr. Cleaner Pro的统计

好家伙,足足有16个G的空间占用!

尝试直接删除

由于莽撞就直接输入了删除这些文件的命令,然而遇到了熟悉的提示

... Operation not permitted

先说一下贸然删除swap文件其实是不对的,会有丢失数据和损坏系统的风险,但是我其实是不得已才这样做,才清出十几个G的空间立马又被占满,内心还是比较不满.现在提示这条消息并不是因为权限不足而是系统的SIP机制(System Integrity Protection)一并限制了管理员和普通用户的磁盘操作权限,删除被系统认为是「关键」的文件会被拒绝执行.

获得权限的办法是关闭系统的机制(SIP),具体做法是在重启系统的过程中同时按Command和R键,似乎并没有提示什么时候按,不过我的做法是在重启过程中频繁按这个组合键,直到进入恢复模式,恢复模式下的触控板恢复成了默认设置,要按下去才有单击效果,轻触是没有单击效果的,接下来如图所示

在恢复模式下选择终端工具

在恢复模式下选择终端工具

然后执行

csrutil disable

以及

reboot
执行命令关闭系统保护

执行命令关闭系统保护

重启进入正常的系.本来这时候就可以cd到/private/var/vm文件夹并且删除那些swapfile文件了,但是我忘了这样做,于是引出了后续.

真正的原因

重启后我再次cd到/private/var/vm文件夹却发现里面空空如也(我并没有在恢复模式下将这些文件删除),猜测可能是系统自动释放了,

重启后磁盘空间得到了释放

重启后磁盘空间得到了释放

之前我以为系统的swapfile的释放机制没有正常工作需要人工干预,然而原因或许仅仅是系统内存占用一直比较高却没有软件愿意把内存释放出来,导致系统不得不始终分配大量的磁盘空间作为虚拟内存使.否则系统如果字面意义上耗尽了内存其实是很危险的.

回想起来最近经常使用的软件是Mathematica,这玩意其实是个内存大户,之前也遇到过提示,并且「磁盘空间不足」的提示和「内存不足」的提示似乎还同时出现过好多次,但是没有仔细研究一直以为是Mathematica在哪个地方存了「临时文件」或者缓存之类.其实原因就是软件占用的内存过高又一直没有释放之.

总结

之前并不是没有「重启」过,而我的操作习惯一般都是按住键盘右上角的电源键好一会,然后等屏幕熄灭,然后再按一会电源键,就以为系统是「重启」了,实际上这应该仅仅是休眠和恢复吧,真正的重启,按住这次的经验,是要点击屏幕左上角图标的「重新启动」按钮

真正的重启选项按钮

真正的重启选项按钮

内存才会被释放,因而,swapfile虚拟内存文件也才会被释放.

参考资料

[1] System Integrity Protection - Wikipedia

经验分享macossip

深入浅出关联规则挖掘和Apriori算法

在Mathematica中实现魔方