Linux 磁盘占满排查教程
一、快速诊断流程
1. 查看整体磁盘使用情况
# 查看所有磁盘使用情况
df -h
# 查看inode使用情况(有时文件数占满但空间未满)
df -i
# 查看特定目录所在磁盘
df -h /path/to/directory
2. 定位占用大的目录
# 从根目录开始逐层查找(最常用)
du -sh /* 2>/dev/null
# 查看当前目录下各子目录大小
du -sh ./* 2>/dev/null | sort-rh
# 找出前10个最大的目录/文件
du -a / 2>/dev/null | sort-n-r | head -n10
3. 使用ncdu工具(推荐)
# 安装ncdu
sudo apt install ncdu # Debian/Ubuntu
sudo yum install ncdu # CentOS/RHEL
# 使用ncdu扫描
ncdu / # 扫描根目录
ncdu /var/log # 扫描特定目录
二、详细排查步骤
步骤1:检查常用易满目录
# 1. 日志目录
du -sh /var/log/*
ls-lh /var/log/*.log # 查看日志文件
# 2. 临时文件
du -sh /tmp/*
du -sh /var/tmp/*
# 3. 缓存目录
du -sh /var/cache/*
du -sh ~/.cache/*
# 4. Docker相关(如果使用)
docker system df # Docker磁盘使用
du -sh /var/lib/docker/*
步骤2:查找大文件
# 查找大于100MB的文件
find / -type f -size+100M 2>/dev/null | xargs ls-lh
# 查找最近修改的大文件(最近1天)
find / -type f -size+50M -mtime-12>/dev/null
# 查找并排序显示最大的20个文件
find / -type f -exec du -h {} +2>/dev/null | sort-rh | head -n20
步骤3:检查特定服务日志
# 查看系统日志
journalctl --disk-usage
sudo journalctl --vacuum-size=200M # 清理日志
# 检查Apache/Nginx日志
du -sh /var/log/apache2/*
du -sh /var/log/nginx/*
# 检查MySQL日志(如果使用)
du -sh /var/lib/mysql/*
步骤4:检查已删除但未释放的文件
# 查找被进程占用的已删除文件
lsof | grep deleted
# 查看这些文件的大小和进程
lsof -n | grep deleted | awk'{print $2, $4, $9}' | sort-n
# 重启相关进程或系统来释放空间
三、常见问题及解决方案
场景1:/var/log 日志文件过大
# 清理旧日志
sudofind /var/log -type f -name"*.log"-mtime+30-delete
# 清空大日志文件(不删除文件)
sudo truncate -s0 /var/log/big-log.log
# 配置日志轮转
sudo logrotate -f /etc/logrotate.conf
场景2:/tmp 目录占满
# 清理/tmp目录(注意:可能影响运行中的程序)
sudorm-rf /tmp/*
# 更安全的方式:重启后自动清理
# 检查 /etc/default/rcS 中的 TMPTIME 设置
场景3:Docker占用过大
# 清理Docker资源
docker system prune -a# 清理所有未使用的资源
docker volume prune # 清理未使用的卷
# 查看Docker磁盘使用详情
docker system df -v
场景4:邮件队列过大(/var/spool/postfix)
# 查看邮件队列
mailq
postqueue -p
# 清空邮件队列
postsuper -d ALL
四、实用技巧
1.快速查看总使用量:
du -sh /* 2>/dev/null | grep G # 只显示GB级目录
2.交互式浏览目录大小:
# 使用tree查看(如果已安装)
tree -L2-d-h /var
3.检查软链接指向:
ls-la /path/to/link
4.特殊文件系统检查:
# 检查/proc和/sys(通常无需清理)
mount | grep-E'(proc|sys|tmpfs)'
故障排除要点:
df和du结果不一致:通常是因为有文件被删除但仍有进程占用
inode用尽:使用 df -i 检查,可能有大量小文件
只读文件系统:可能是磁盘错误导致,需要 fsck 检查