DigitalOcean Droplet磁盘空间异常:df显示用22G,仅找到6G占用求排查
磁盘空间显示与实际不符的排查思路
1. 排查已删除但被进程占用的文件
Linux里文件被删除后,只要有进程还在打开它,df就会继续统计这部分空间,但常规文件工具看不到。用以下命令找出这类文件:
lsof | grep deleted
找到对应进程后,要么重启该进程释放空间,要么直接终止进程(注意评估业务影响)。
2. 检查挂载点下被隐藏的文件
如果某个分区挂载到了原本已有文件的目录上,原目录的文件会被隐藏,df统计的是整个分区占用,但扫描工具只能看到挂载后的内容。
- 若挂载点非根分区,可临时卸载查看:
# 先停掉挂载点相关服务,再卸载 umount /your/mount/point # 查看原目录内容 ls -lh /your/mount/point # 操作完成后重新挂载 mount /your/mount/point
- 根分区无法卸载时,用
bind挂载到临时目录扫描:
mkdir /tmp/root_bind mount --bind / /tmp/root_bind # 用ncdu或find扫描/tmp/root_bind ncdu /tmp/root_bind
3. 查看文件系统预留空间
ext4等文件系统默认会预留5%空间给root用户,防止磁盘满时root无法操作。可以查看预留比例:
tune2fs -l /dev/vda1 | grep "Reserved block count"
如果不需要这么多预留空间,可调整比例(比如改成1%):
tune2fs -m 1 /dev/vda1
4. 查找大尺寸隐藏文件或临时文件
有些备份、快照工具会留下隐藏的大文件,用find直接扫描全系统:
# 查找大于1G的文件 find / -type f -size +1G # 查找大于100M的隐藏文件 find / -name ".*" -type f -size +100M
5. 检查日志轮转异常
如果logrotate配置错误,可能导致旧日志被重命名但进程仍在写入原文件,或者轮转后的日志未被清理。检查日志目录:
ls -lh /var/log/ # 查看哪些日志文件被进程占用 lsof /var/log
6. 排查容器/虚拟机存储占用
如果服务器运行了Docker或K8s,容器镜像、卷可能占用大量未被常规工具扫描到的空间:
# 查看Docker空间使用情况 docker system df # 列出所有Docker卷 docker volume ls
K8s环境则检查PV、PVC的实际占用。
内容的提问来源于stack exchange,提问作者Serhii Polishchuk
相关产品推荐
相关产品推荐

