阿里云服务器系统盘满了?

阿里云服务器系统盘满了,是一个常见的问题。当系统盘空间不足时,可能会导致:

  • 服务无法正常运行(如 Web 服务、数据库等)
  • 系统无法写入日志或临时文件
  • SSH 登录异常
  • 自动更新失败
  • 甚至系统崩溃

一、确认系统盘是否真的满了?

你可以通过以下命令查看磁盘使用情况:

df -h

输出示例:

Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        40G   38G   2G   95% /

如果 /(根目录)的使用率接近 100%,说明系统盘确实满了。


二、常见原因和解决方案

1. 日志文件过大

Linux 系统和服务(如 Nginx、Apache、MySQL、系统日志)会产生大量日志文件。

解决方法:

  • 查看大日志文件:

    find / -type f -size +100M
  • 清理 Nginx/Apache 日志(注意备份):

    > /var/log/nginx/access.log
    > /var/log/nginx/error.log
  • 清理系统日志:

    > /var/log/messages
    > /var/log/syslog

⚠️ 注意:不要直接删除正在使用的日志文件,建议用 > 清空内容,或者重启相关服务释放句柄。


2. 临时文件堆积

系统或程序可能产生大量临时文件。

解决方法:

  • 删除临时文件:

    rm -rf /tmp/*
  • 清理 yum/apt 缓存(根据你的系统):

    CentOS/RHEL:

    yum clean all

    Ubuntu/Debian:

    apt-get clean

3. 安装软件过多

比如安装了多个版本的 Python、Java、Node.js、Docker 镜像等。

解决方法:

  • 卸载不再使用的软件包。
  • 使用 du 命令查找占用大的目录:
    du -sh /*

4. inode 满了

有时虽然磁盘空间没满,但 inode 被占满也会导致写入失败。

检查方式:

df -i

如果 Use% 达到 100%,说明 inode 被大量小文件占用了。

解决方法:

  • 查找大量小文件的目录:

    find / -type f | cut -d'/' -f2 | sort | uniq -c | sort -n
  • 特别注意:

    • /var/spool/mail/
    • /tmp/
    • /var/tmp/
    • 网站缓存目录(如 WordPress 的 /wp-content/cache

5. 扩展系统盘容量(终极方案)

如果你经常遇到系统盘不够用的问题,可以考虑 扩容系统盘

在阿里云控制台操作步骤如下:
  1. 登录 阿里云控制台
  2. 找到你的 ECS 实例
  3. 停止实例(注意备份数据)
  4. 进入“磁盘”页面,选择系统盘进行扩容
  5. 启动实例后,在 Linux 中执行扩容命令(适用于 ext4/xfs 文件系统):

    • 对于 ext4 文件系统:

      resize2fs /dev/vda1
    • 对于 xfs 文件系统:

      xfs_growfs /

三、推荐预防措施

措施 描述
定期清理日志 使用 crontab 或 logrotate 工具自动清理日志
监控磁盘使用 使用监控工具(如 Zabbix、Prometheus)预警
使用独立数据盘 将网站、数据库、日志等放到挂载的数据盘上
设置自动清理脚本 如定期清理 tmp、cache、yum/apt 缓存

四、示例自动清理脚本(供参考)

创建一个脚这里件,例如 /root/clean_disk.sh

#!/bin/bash

# 清空常用日志
echo "Clearing logs..."
> /var/log/messages
> /var/log/syslog
> /var/log/dpkg.log
> /var/log/nginx/access.log
> /var/log/nginx/error.log

# 清理 apt/yum 缓存
echo "Cleaning package cache..."
apt-get clean || yum clean all

# 清理临时文件
echo "Removing temp files..."
rm -rf /tmp/* /var/tmp/*

# 重启相关服务释放日志句柄(视情况而定)
# systemctl restart nginx
# systemctl restart mysqld

echo "Disk cleaning completed."

添加定时任务(每天凌晨2点执行):

crontab -e

添加一行:

0 2 * * * /bin/bash /root/clean_disk.sh >> /var/log/clean_disk.log 2>&1

如果你能提供更多信息(比如你用的是哪种系统、哪些服务),我可以给出更具体的建议。需要我帮你分析具体哪个目录占用最大吗?