记一次清理root分区的经历

记一次清理root分区的经历

  • 2020-5-31

TL; DR

1
2
sudo journalctl --vacuum-size=7d # 仅保留最近7天的系统日志
sudo apt autoremove # 清理无用的软件包

详细经过

有一天晚上 ashwaniYDV 同学突然找到我,提醒我 gsoc.rocket.chat 挂了。我打开 URL 一看,网页内容不能正常加载了。于是,通过 ssh 连上一探究竟:

有了上次和 Sing 一起联调的经验,我估计这次又是硬盘空间不够,毕竟这 VPS 的 root 分区只有卑微 8G。上次 Sing 还特地给 home 分区重新挂载了一块 30G 的虚拟盘,这次问题应该就是 root 分区不够,先用 df -h 命令看下所有分区的可用空间:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Filesystem     1K-blocks    Used Available Use% Mounted on
udev 491520 0 491520 0% /dev
tmpfs 100732 804 99928 1% /run
/dev/xvda1 8065444 8049313 16131 99.8% /
tmpfs 503648 0 503648 0% /dev/shm
tmpfs 5120 0 5120 0% /run/lock
tmpfs 503648 0 503648 0% /sys/fs/cgroup
/dev/loop0 18688 18688 0 100% /snap/node/2369
/dev/loop4 18688 18688 0 100% /snap/node/2485
/dev/loop5 18432 18432 0 100% /snap/amazon-ssm-agent/1480
/dev/xvdf 31441920 714156 30727764 3% /home
tmpfs 100728 0 100728 0% /run/user/1000
/dev/loop3 18432 18432 0 100% /snap/amazon-ssm-agent/1566
/dev/loop1 96128 96128 0 100% /snap/core/8935
/dev/loop6 96256 96256 0 100% /snap/core/9066

显然,root 分区剩余空间只剩 0.2% 了,这占用率程序能正常工作才怪了。先用 du 看下具体的空间占用情况:

1
2
cd /
sudo du -ah --max-depth=1

发现 /usr/var 目录分别占用 2.1G 和 1.5G 。重复操作最终发现 /usr/src 目录下有一堆 linx-aws-headers-* 文件,占用大概1.5G;var/log 目录下的日志占用共 800M 左右;而其它一些占空间都是一些 libbin 啥的,这些肯定不能乱删,说不定一个不小心服务器就直接 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
2
sudo journalctl --vacuum-time=2d # 仅保留最近两天的系统日志,多余的都自动删掉
sudo journalctl --vacuum-size=50M # 仅保留50M大小的系统日志,多余的都自动删掉

执行 journalctl --vacuum-size=10M 后,空间瞬间腾出了 700 多M出来,接着用 apt 清理多余的包:

1
2
sudo apt autoremove
sudo apt autoclean

linux-aws-headers-* 这些多余的包被如愿清理了,root 分区占用率一下子减到 62%,再用 pm2 重启一下进程 sudo pm2 restart 0,打开开头提到的网址,工作正常,收工!