磁盘写满时,数据库写不进、日志写不了、服务接连报错。排查可以按下面的顺序来。
1. 确认是空间满还是 inode 满
Bash
df -h # 各分区的空间使用率
df -i # inode 使用率,小文件太多时空间没满也会写不进2. 逐层找出大目录
Bash
du -xh --max-depth=1 / 2>/dev/null | sort -h
# 交互式查看更直观
ncdu -x /3. 几个常见的大户
- Docker:
docker system df列出镜像、容器、卷和构建缓存各占多少,构建缓存可以用docker builder prune清理。 - 容器日志:
/var/lib/docker/containers/*/*-json.log,在 compose 里给日志设上大小限制。 - 系统日志:
journalctl --disk-usage查看占用,journalctl --vacuum-size=500M只保留最近 500 MB。 - 包管理缓存:
apt clean、yum clean all。
4. 删了文件空间却没释放
文件被删除时如果还有进程打开着它,空间要等进程关闭才会释放。用下面的命令找出这类文件,重启对应的服务即可:
Bash
lsof +L1清理之前先弄清楚文件的用途。数据库的数据目录、网站的上传目录不要手动删除,删错了只能靠备份恢复。