努力
加油

如何清理阿里云服务器系统盘的占用文件?

清理阿里云 ECS 系统盘占用,核心原则是:先定位,再分类,最后精准删除。切忌盲目 rm -rf,尤其是 /usr、/etc、/bin 等系统关键目录。

以下是一套经过实战验证的排查和清理流程,按优先级从高到低执行:

第一步:快速定位“元凶”

不要凭感觉猜,用数据说话。在终端执行以下命令,找出占用最大的前 10 个文件或目录:

# 查看整体磁盘使用情况
df -h

# 查找根目录下大于 100M 的文件或目录(重点排查)
du -sh /* | sort -rh | head -n 20

通常占用大户集中在以下几个区域:

  1. /var/log(日志文件)
  2. /var/lib/docker(如果装了 Docker,镜像和容器层极易膨胀)
  3. /tmp 或 /var/tmp(临时文件残留)
  4. /root 或 /home(用户上传的数据、压缩包、备份包)
  5. /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

第三步:预防性措施(避免再次爆满)

  1. 配置日志轮转(Logrotate)
    确保 /etc/logrotate.conf 及对应服务的配置文件合理设置 rotate 数量和 size 限制。例如 Nginx 访问日志应每日切割并保留 7 天。

  2. 挂载数据盘
    这是最根本的解决方案。
    阿里云 ECS 的系统盘通常为 40G~100G,仅够装系统和基础组件。务必将用户数据、数据库文件、Web 站点文件、Docker 存储路径等迁移到数据盘(如 100G+ 的云盘)。

    • 修改 /etc/fstab 实现开机自动挂载。
    • 将 /var/lib/docker 指向数据盘目录。
    • 将 Web 网站目录 /var/www/html 或 /usr/share/nginx/html 软链接到数据盘。
  3. 监控告警
    在阿里云控制台开启“云监控”报警,设置当磁盘使用率超过 80% 时发送短信/邮件通知,做到早发现早处理。


⚠️ 高危禁区(绝对不要碰)

  • /proc, /sys, /dev:这些是虚拟文件系统,无法也不应删除任何内容。
  • /boot:除非你非常清楚自己在做什么,否则别动里面的 vmlinuz 和 initrd 文件。
  • /lib, /usr/lib, /bin, /sbin:系统库和执行文件,删除会导致系统崩溃。
  • /etc:配置文件,随意删除可能导致 SSH、网络等服务异常。

总结

清理系统盘的黄金法则:

  1. 看日志(/var/log)
  2. 看容器(Docker images/volumes)
  3. 看缓存(yum/apt/npm/pip)
  4. 看临时文件(/tmp)
  5. 终极方案:把数据挪到数据盘,系统盘只留操作系统。

操作前建议通过阿里云控制台创建系统盘快照,以防手滑误删重要文件。