清理阿里云 ECS 系统盘占用,核心原则是:先定位,再分类,最后精准删除。切忌盲目 rm -rf,尤其是 /usr、/etc、/bin 等系统关键目录。
以下是一套经过实战验证的排查和清理流程,按优先级从高到低执行:
第一步:快速定位“元凶”
不要凭感觉猜,用数据说话。在终端执行以下命令,找出占用最大的前 10 个文件或目录:
# 查看整体磁盘使用情况
df -h
# 查找根目录下大于 100M 的文件或目录(重点排查)
du -sh /* | sort -rh | head -n 20
通常占用大户集中在以下几个区域:
/var/log(日志文件)/var/lib/docker(如果装了 Docker,镜像和容器层极易膨胀)/tmp或/var/tmp(临时文件残留)/root或/home(用户上传的数据、压缩包、备份包)/usr/local(手动安装的软件缓存)
第二步:针对性清理方案
1. 清理系统日志(最常见且安全)
Linux 系统默认会轮转日志,但有时配置不当会导致单个日志文件无限增长。
- 检查大日志文件:
du -sh /var/log/* | sort -rh | head -n 10 -
清理方法:
- 对于
.log结尾的文件:直接清空内容即可,保留文件句柄,服务不会中断。echo "" > /var/log/syslog # 或者 truncate -s 0 /var/log/syslog -
对于 journalctl 日志(systemd 管理的服务):
# 只保留最近7天的日志 journalctl --vacuum-time=7d # 或者限制最大占用空间为 100M journalctl --vacuum-size=100M - 注意:如果是 Nginx/Apache/Tomcat 的应用日志,建议配置 logrotate 自动切割归档,而不是手动删。
- 对于
2. 清理 Docker 垃圾(如果有使用 Docker)
Docker 是系统盘杀手,尤其是未定期清理的镜像、悬空标签、停止的容器。
# 警告:这会删除所有未运行的容器、所有悬空(dangling)镜像、构建缓存
docker system prune -a --volumes
# 如果担心误删正在运行的业务,可以先单独清理无用镜像
docker image prune -a
进阶建议:在 /etc/docker/daemon.json 中配置日志驱动大小限制,防止 containerd 日志撑爆磁盘。
3. 清理 /tmp 和 /var/tmp
这两个目录重启后通常会被清空,但长期运行的服务器可能堆积了大量临时文件。
# 谨慎操作!先确认里面没有重要脚本或会话文件
ls -lh /tmp
ls -lh /var/tmp
# 如果确定无重要数据,可清理超过 3 天的文件
find /tmp -type f -mtime +3 -delete
find /var/tmp -type f -mtime +3 -delete
4. 清理 APT/YUM 缓存(针对 Debian/Ubuntu 或 CentOS/RHEL)
包管理器下载的 rpm/deb 包和元数据会占用不少空间。
- CentOS/RHEL:
yum clean all rm -rf /var/cache/yum/* - Ubuntu/Debian:
apt-get clean apt-get autoremove --purge
5. 清理 Python/Node.js 依赖缓存
如果你运行了 Python 或 Node 项目,虚拟环境或全局安装可能会留下大量缓存。
- Python:
pip cache purge # 检查 ~/.cache/pip 或 /tmp/pip-* - Node.js:
npm cache clean --force # 检查 ~/.npm/_cacache
6. 清理历史内核版本(较少见,但存在)
如果你很久没更新系统,旧版内核包可能堆积。
# CentOS
package-cleanup --oldkernels --count=2
# Ubuntu
apt-get autoremove
第三步:预防性措施(避免再次爆满)
-
配置日志轮转(Logrotate)
确保/etc/logrotate.conf及对应服务的配置文件合理设置rotate数量和size限制。例如 Nginx 访问日志应每日切割并保留 7 天。 -
挂载数据盘
这是最根本的解决方案。
阿里云 ECS 的系统盘通常为 40G~100G,仅够装系统和基础组件。务必将用户数据、数据库文件、Web 站点文件、Docker 存储路径等迁移到数据盘(如 100G+ 的云盘)。- 修改
/etc/fstab实现开机自动挂载。 - 将
/var/lib/docker指向数据盘目录。 - 将 Web 网站目录
/var/www/html或/usr/share/nginx/html软链接到数据盘。
- 修改
-
监控告警
在阿里云控制台开启“云监控”报警,设置当磁盘使用率超过 80% 时发送短信/邮件通知,做到早发现早处理。
⚠️ 高危禁区(绝对不要碰)
/proc,/sys,/dev:这些是虚拟文件系统,无法也不应删除任何内容。/boot:除非你非常清楚自己在做什么,否则别动里面的 vmlinuz 和 initrd 文件。/lib,/usr/lib,/bin,/sbin:系统库和执行文件,删除会导致系统崩溃。/etc:配置文件,随意删除可能导致 SSH、网络等服务异常。
总结
清理系统盘的黄金法则:
- 看日志(
/var/log) - 看容器(Docker images/volumes)
- 看缓存(yum/apt/npm/pip)
- 看临时文件(
/tmp) - 终极方案:把数据挪到数据盘,系统盘只留操作系统。
操作前建议通过阿里云控制台创建系统盘快照,以防手滑误删重要文件。
云技术博客