阿里云服务器40G系统盘空间不够用怎么办?

阿里云服务器系统盘空间不足是一个常见问题,解决思路通常分为“紧急清理”、“扩容磁盘”和“数据迁移/优化”三个层级。建议按照以下顺序操作:


一、 紧急清理(快速释放空间)

如果服务器即将宕机或无法登录,先执行以下命令清理无用文件:

1. 查找大文件

# 查看根目录下各文件夹占用大小
du -sh /* | sort -hr | head -n 10

# 查找超过 100M 的大文件
find / -type f -size +100M -exec ls -lh {} ; 2>/dev/null | awk '{ print $5, $9 }' | sort -hr | head -n 20

2. 清理常见垃圾文件

  • 清理 Docker 镜像/容器/卷(如果使用 Docker):
    docker system prune -a --volumes
  • 清理 yum/apt 缓存:
    # CentOS/RHEL
    yum clean all
    # Ubuntu/Debian
    apt-get clean
  • 清理日志文件(谨慎操作,确保业务无影响):

    # 查看/var/log 下的大日志
    du -sh /var/log/* | sort -hr | head -n 10
    
    # 清空过大的日志文件(例如 nginx access.log)
    > /var/log/nginx/access.log
  • 清理旧内核(CentOS 7+):
    package-cleanup --oldkernels --count=2

3. 检查是否有异常进程持续写入

使用 iotop 或 htop 查看哪个进程在大量写入磁盘。


二、 扩容系统盘(推荐方案)

如果清理后仍不够用,或者希望一劳永逸,扩容磁盘是最安全、最标准的做法。

⚠️ 重要提醒:操作前务必在阿里云控制台对云盘创建快照备份!

步骤如下:

  1. 停止实例(可选但推荐)

    • 虽然支持在线扩容,但为了减少风险,建议先停止 ECS 实例。
    • 进入阿里云控制台 → ECS → 实例列表 → 找到目标实例 → 更多 → 实例状态 → 停止。
  2. 扩容云盘

    • 在左侧导航栏选择 存储与镜像 → 云盘。
    • 找到你的系统盘,点击 更多 → 扩容。
    • 输入新的容量(如从 40G 扩容到 60G 或 100G)。
    • 确认订单并完成支付(按量付费即时生效;包年包月需续费差额)。
  3. 启动实例

    • 启动 ECS 实例。
  4. 扩展文件系统

    • 登录服务器,执行以下命令使新空间生效:

    对于 CentOS 7 / RHEL 8+ / Alibaba Cloud Linux 3:

    # 安装 parted(如果未安装)
    yum install parted -y
    
    # 查看磁盘设备名(通常是 /dev/vda 或 /dev/xvda)
    lsblk
    
    # 使用 growpart 扩展分区(需要安装 cloud-utils-growpart)
    yum install cloud-utils-growpart -y
    growpart /dev/vda 1   # 注意:vda 是磁盘名,1 是分区号,请根据实际情况调整
    
    # 扩展文件系统
    xfs_growfs /          # 如果是 XFS 文件系统
    # 或
    resize2fs /           # 如果是 EXT4 文件系统

    对于 Ubuntu / Debian:

    # 安装工具
    apt install cloud-guest-utils -y
    
    # 扩展分区
    growpart /dev/vda 1
    
    # 扩展文件系统
    resize2fs /dev/vda1
  5. 验证结果

    df -h

    确认 / 挂载点的大小已更新。


三、 高级优化方案(长期建议)

1. 将数据盘独立出来

  • 最佳实践:不要把所有数据都放在系统盘。
  • 创建一个独立的数据盘(如 100G),挂载到 /data 目录。
  • 将网站文件、数据库、日志等大数据量内容迁移到数据盘。
  • 系统盘仅保留操作系统和必要软件,保持精简。

2. 使用对象存储 OSS

  • 将静态资源(图片、视频、备份文件)上传到阿里云 OSS。
  • 通过 CDN 提速访问,减轻服务器磁盘压力。

3. 定期自动清理脚本

编写 cron 任务,定期清理日志、临时文件和旧备份。

# 示例:每天凌晨2点清理 /tmp 下超过 7 天的文件
echo "0 2 * * * find /tmp -type f -mtime +7 -delete" >> /etc/crontab

四、 注意事项

项目 说明
快照备份 任何磁盘操作前必须创建快照,防止误操作导致数据丢失。
文件系统类型 扩容前确认文件系统是 xfs 还是 ext4,对应不同的扩容命令。
在线扩容限制 部分老旧实例或特定机型可能不支持在线扩容,需停机操作。
性能影响 扩容过程中磁盘 I/O 会短暂中断,建议在业务低峰期操作。

✅ 总结建议

  1. 临时应急 → 执行 第一步:紧急清理。
  2. 根本解决 → 执行 第二步:扩容系统盘(推荐扩容至 60G~100G)。
  3. 长期规划 → 建立 数据盘 + OSS + 日志轮转 的架构,避免系统盘再次爆满。

如需帮助判断具体命令中的磁盘名称(如 /dev/vda vs /dev/sda),可提供 lsblk 输出结果。