Linux服务器磁盘空间爆满排查与清理指南
本文解决的是磁盘存储空间(硬盘容量)满的问题,而非内存(RAM)问题。当服务器出现"No space left on device"错误时,请立即按此指南操作。
一、快速诊断:确认磁盘使用情况
# 查看各分区使用情况
df -h
# 输出示例:
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 50G 50G 0K 100% /
/dev/sdb1 100G 80G 20G 80% /data
关键点:
-
关注
Use%列达到100%或接近100%的分区 -
记下满的分区挂载点(如
/或/data)
二、定位大文件/目录(4种方法)
方法1:快速查找大目录
# 查看根目录下各子目录大小 sudo du -h -x --max-depth=1 / | sort -h# 针对特定目录(如/var)
sudo du -h -x --max-depth=1 /var | sort -h | tail -n 20
方法2:交互式神器ncdu(推荐)
# 安装ncdu
sudo apt install ncdu # Debian/Ubuntu
sudo yum install ncdu # CentOS/RHEL
# 扫描目录
sudo ncdu /
操作提示:
-
↑/↓:导航目录
-
Enter:进入子目录
-
d:删除选中项
-
s:按大小排序
-
q:退出
方法3:查找特定大文件
# 查找大于500MB的文件
sudo find / -xdev -type f -size +500M -exec ls -lh {} \;
# 查找7天前的日志文件
sudo find /var/log -name "*.log" -mtime +7
方法4:按文件类型排序
# 显示当前目录文件大小排序
ls -lhS
# 显示隐藏文件
ls -lahS
三、安全清理指南(按场景)
场景1:日志文件清理(/var/log)
# 清空单个大日志文件(安全方式)
sudo truncate -s 0 /var/log/huge.log
# 删除7天前的压缩日志
sudo find /var/log -name "*.gz" -mtime +7 -delete
# 管理系统日志(journald)
sudo journalctl --disk-usage
sudo journalctl --vacuum-time=7d # 清理7天前日志
场景2:包管理器缓存
# Debian/Ubuntu
sudo apt clean # 清除所有下载包
sudo apt autoclean # 清除旧版本包
# CentOS/RHEL
sudo yum clean all
sudo dnf clean all
# 清除snap缓存
sudo rm -rf /var/cache/snapd/
场景3:Docker磁盘清理
# 查看Docker磁盘使用
docker system df
# 安全清理
docker system prune # 清理停止的容器/网络/镜像
# 彻底清理(谨慎!)
docker system prune -a # 清理所有未使用资源
场景4:临时文件清理
# 系统临时目录
sudo rm -rf /tmp/*
# 用户缓存
sudo rm -rf ~/.cache/*
场景5:旧内核清理
# Ubuntu/Debian
sudo apt purge linux-image-$(uname -r|cut -d'-' -f3)-*
# CentOS/RHEL
sudo package-cleanup --oldkernels --count=2
四、批量删除操作指南
安全删除模式(先预览)
# 显示所有将被删除的文件
find /path/to/dir -name "*.tmp" -print
# 确认后再执行删除
find /path/to/dir -name "*.tmp" -delete
批量删除命令示例
# 删除当前目录所有文件(非递归)
rm -f ./*
# 删除30天前的日志
find /logs -name "*.log" -mtime +30 -delete
# 删除超过100MB的文件
find /data -type f -size +100M -delete
# 使用trash-cli安全删除
sudo apt install trash-cli
trash-put large_file.zip
处理海量文件(避免参数过长)
# 方法1:使用find的-exec
find /dir -name "*.cache" -exec rm -f {} +
# 方法2:rsync清空目录
mkdir empty_dir
rsync -a --delete empty_dir/ target_dir/
rmdir empty_dir
五、预防措施
1. 磁盘监控设置
# 添加cron任务(每天检查)
echo "df -h | mail -s 'Disk Report' admin@example.com" | sudo tee /etc/cron.daily/disk-check
sudo chmod +x /etc/cron.daily/disk-check
2. 日志轮转配置
编辑/etc/logrotate.conf:
/var/log/app.log {
daily
rotate 7
compress
size 100M
missingok
notifempty
}
3. Docker日志限制
创建/etc/docker/daemon.json:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "50m",
"max-file": "3"
}
}
4. 关键分区独立
-
/var/log:日志分区
-
/home:用户数据分区
-
/opt:应用安装分区
六、总结流程图
重要原则:
-
删除前备份关键数据
-
使用
truncate替代rm处理正在写入的日志 -
生产环境操作前在测试环境验证
-
不确定的文件先移动(
mv)再删除
当磁盘使用超过80%时就应开始清理,避免服务不可用。定期执行
df -h检查是运维好习惯!

浙公网安备 33010602011771号