记一次清理root分区的经历
- 2020-5-31
TL; DR
1 | sudo journalctl --vacuum-size=7d # 仅保留最近7天的系统日志 |
详细经过
有一天晚上 ashwaniYDV 同学突然找到我,提醒我 gsoc.rocket.chat 挂了。我打开 URL 一看,网页内容不能正常加载了。于是,通过 ssh 连上一探究竟:
有了上次和 Sing 一起联调的经验,我估计这次又是硬盘空间不够,毕竟这 VPS 的 root 分区只有卑微 8G。上次 Sing 还特地给 home 分区重新挂载了一块 30G 的虚拟盘,这次问题应该就是 root 分区不够,先用 df -h
命令看下所有分区的可用空间:
1 | Filesystem 1K-blocks Used Available Use% Mounted on |
显然,root 分区剩余空间只剩 0.2% 了,这占用率程序能正常工作才怪了。先用 du
看下具体的空间占用情况: 1
2cd /
sudo du -ah --max-depth=1
发现 /usr
和 /var
目录分别占用 2.1G 和 1.5G 。重复操作最终发现 /usr/src
目录下有一堆 linx-aws-headers-*
文件,占用大概1.5G;var/log
目录下的日志占用共 800M 左右;而其它一些占空间都是一些 lib
、bin
啥的,这些肯定不能乱删,说不定一个不小心服务器就直接 shut down 了。 作为一个业余运维,多年来的经验告诉我,root 分区下的任何一个文件都不要直接用 rm
乱删,除非它是你创建的或你知道它是干什么的。
Google 一通,发现 linux-aws-headers-*
这些文件可以通过 apt
包管理器清理: 1
2
3
4$ sudo apt autoremove
Reading package lists... Error!
E: Could not create temporary file for /var/cache/apt/pkgcache.bin - mkstemp (28: No space left on device)
E: The package lists or status file could not be parsed or opened.
呕吼完蛋,想清理 linux-aws-headers-*
但缺少空间执行这个操作。这就陷入死循环了。只能先清理其它文件了,还是拿日志开刀吧,我突然发现 journal.log
这个日志竟有 790M,把它删了,日志基本就不占空间了。借助 journalctl
自带日志清理的功能:
1 | sudo journalctl --vacuum-time=2d # 仅保留最近两天的系统日志,多余的都自动删掉 |
执行 journalctl --vacuum-size=10M
后,空间瞬间腾出了 700 多M出来,接着用 apt 清理多余的包:
1 | sudo apt autoremove |
linux-aws-headers-*
这些多余的包被如愿清理了,root 分区占用率一下子减到 62%,再用 pm2 重启一下进程 sudo pm2 restart 0
,打开开头提到的网址,工作正常,收工!