服务器磁盘空间不足怎么办?Linux清理与扩容完整指南 | 后浪云
服务器磁盘空间不足怎么办?Linux 磁盘清理与扩容完整操作指南
磁盘空间耗尽是服务器运维中最常见的紧急故障之一。一旦根分区使用率达到 100%,网站日志无法写入、数据库事务失败、程序报错甚至直接崩溃,影响面极广。本文从快速排查到彻底解决,提供一套完整的 Linux 磁盘空间管理方案。
一、第一步:快速确认磁盘现状
# 查看所有分区磁盘使用情况
df -h
# 典型输出示例:
# Filesystem Size Used Avail Use% Mounted on
# /dev/sda1 50G 47G 1.5G 97% / ← 根分区 97%,需立即处理
# tmpfs 2.0G 0 2.0G 0% /dev/shm当根分区(/)使用率超过 85% 时需要开始关注;超过 95% 时属于紧急情况,需要立即处理。
同时检查 inode 使用情况(inode 耗尽同样会导致无法创建新文件):
df -i
# IUse% 列如果接近 100%,即使磁盘空间还有剩余也无法创建文件二、第二步:定位占用空间最多的目录
从根目录开始,逐层排查
# 查看一级目录的磁盘占用(排序显示)
sudo du -sh /* 2>/dev/null | sort -rh | head -20通常嫌疑最大的目录是 /var(日志)、/home(用户文件)、/tmp(临时文件)。
# 深入排查 /var 目录
sudo du -sh /var/* 2>/dev/null | sort -rh | head -10
# 继续深入排查 /var/log
sudo du -sh /var/log/* 2>/dev/null | sort -rh | head -10直接找出全盘最大的文件
# 找出超过 100MB 的文件
sudo find / -type f -size +100M 2>/dev/null | xargs ls -lh | sort -k5 -rh | head -20
# 找出超过 1GB 的文件
sudo find / -type f -size +1G 2>/dev/null -exec ls -lh {} \;三、第三步:清理常见的磁盘空间杀手
1. 清理系统日志(最常见的罪魁祸首)
# 查看 journald 系统日志占用
journalctl --disk-usage
# 清理7天以前的日志
sudo journalctl --vacuum-time=7d
# 或者按大小限制,只保留最近 500MB
sudo journalctl --vacuum-size=500M# 清理 /var/log 下的压缩旧日志
sudo find /var/log -name "*.gz" -delete
sudo find /var/log -name "*.1" -delete
# 清空(不删除)当前活跃日志文件(直接 rm 会导致进程继续写入旧 fd)
sudo truncate -s 0 /var/log/nginx/access.log
sudo truncate -s 0 /var/log/nginx/error.log2. 清理 APT 包缓存
# 查看 apt 缓存大小
du -sh /var/cache/apt/
# 清理已下载的安装包缓存
sudo apt clean
# 清理孤立的依赖包
sudo apt autoremove -y3. 清理 Docker 占用(如果有使用 Docker)
# 查看 Docker 磁盘占用明细
docker system df
# 清理所有未使用的镜像、容器、网络、构建缓存
docker system prune -a
# 只清理悬空镜像(更保守)
docker image pruneDocker 是磁盘空间消耗的大户,每次构建镜像都会留下中间层缓存,长期不清理可能累积数十 GB。
4. 清理 /tmp 临时文件
# 查看 /tmp 大小
du -sh /tmp
# 清理超过7天未访问的临时文件
sudo find /tmp -atime +7 -delete 2>/dev/null
sudo find /var/tmp -atime +30 -delete 2>/dev/null5. 清理 PHP Session 文件(WordPress / PHP 应用)
# PHP session 文件默认存放位置
ls -la /var/lib/php/sessions/ | wc -l # 查看 session 文件数量
# 清理超过24小时的 session 文件
sudo find /var/lib/php/sessions -type f -mtime +1 -delete6. 清理 MySQL 二进制日志
# 在 MySQL 中查看二进制日志文件
SHOW BINARY LOGS;
# 删除7天前的二进制日志(谨慎:影响主从复制)
PURGE BINARY LOGS BEFORE DATE_SUB(NOW(), INTERVAL 7 DAY);四、第四步:配置日志轮转,从根源防止磁盘爆满
清理是治标,配置日志自动轮转才是治本。
配置 logrotate(Linux 内置日志轮转工具)
sudo nano /etc/logrotate.d/nginx/var/log/nginx/*.log {
daily # 每天轮转
missingok # 日志文件不存在时不报错
rotate 14 # 保留最近14天的日志
compress # 压缩旧日志(gzip)
delaycompress # 最近一次的旧日志不压缩(便于排查)
notifempty # 日志为空时不轮转
sharedscripts
postrotate
nginx -s reopen # 轮转后让 Nginx 重新打开日志文件
endscript
}# 测试配置是否正确
sudo logrotate -d /etc/logrotate.d/nginx
# 手动执行一次轮转(测试效果)
sudo logrotate -f /etc/logrotate.d/nginx限制 journald 系统日志大小
sudo nano /etc/systemd/journald.conf
# 找到并修改以下参数
SystemMaxUse=1G # 系统日志最大占用 1GB
SystemKeepFree=2G # 保持磁盘至少剩余 2GB
MaxRetentionSec=30day # 最多保留30天日志sudo systemctl restart systemd-journald五、第五步:磁盘扩容方案
如果清理后空间仍然不够,或者业务增长导致长期空间不足,就需要扩容。
方案一:在控制面板扩大磁盘(云服务器)
大多数云服务器(包括后浪云)支持在线扩大磁盘容量:
- 登录后浪云控制台,找到对应的云服务器实例
- 选择"扩容磁盘",选择新的磁盘大小并确认付款
- 登录服务器执行以下命令,将扩容后的空间分配给文件系统
# 查看磁盘和分区情况
lsblk
# 扩展分区(以 /dev/sda1 为例)
sudo growpart /dev/sda 1
# 扩展文件系统(ext4)
sudo resize2fs /dev/sda1
# 扩展文件系统(xfs)
sudo xfs_growfs /# 验证扩容结果
df -h /整个操作过程无需重启服务器,通常 1~2 分钟即可完成。
方案二:挂载额外数据盘
如果只是特定目录(如 /var/www 或 /var/lib/mysql)需要更多空间,可以购买额外数据盘并挂载到对应目录:
# 查看新数据盘设备名(通常是 /dev/sdb)
lsblk
# 格式化新磁盘
sudo mkfs.ext4 /dev/sdb
# 创建挂载点并挂载
sudo mkdir -p /data
sudo mount /dev/sdb /data
# 设置开机自动挂载(写入 fstab)
echo "/dev/sdb /data ext4 defaults 0 2" | sudo tee -a /etc/fstab六、磁盘空间监控告警
与其等磁盘满了才处理,不如提前设置告警:
# 创建磁盘监控脚本
sudo nano /usr/local/bin/disk_alert.sh#!/bin/bash
THRESHOLD=85 # 告警阈值(85%)
DISK_USAGE=$(df / | awk 'NR==2 {print $5}' | tr -d '%')
if [ "$DISK_USAGE" -gt "$THRESHOLD" ]; then
echo "⚠️ 磁盘告警:$(hostname) 根分区使用率已达 ${DISK_USAGE}%,请尽快处理!" \
| mail -s "磁盘空间告警" your@email.com
fisudo chmod +x /usr/local/bin/disk_alert.sh
# 添加到 crontab,每小时检查一次
(crontab -l; echo "0 * * * * /usr/local/bin/disk_alert.sh") | crontab -总结:磁盘空间管理三原则
- 🔍 定位优先:用
du -sh逐层排查,找到真正的占用大户再清理 - 🔄 预防为主:配置好 logrotate 和 journald 大小限制,避免日志无限增长
- 📊 监控告警:设置磁盘使用率告警,在达到临界点之前就收到通知
如果你的业务持续增长导致磁盘长期紧张,后浪云香港云服务器支持在线升级磁盘容量,操作简便,无需停机迁移,欢迎登录控制台直接扩容。
版权声明:
作者:后浪云
链接:https://idc.net/help/442641/
文章版权归作者所有,未经允许请勿转载。
THE END
