Linux 服务器磁盘空间不足?这几个命令帮你快速定位问题
Linux 服务器磁盘空间不足?这几个命令帮你快速定位问题
SEO关键词: Linux磁盘空间不足、Linux磁盘占用查询、Linux服务器运维、Linux磁盘清理、Linux du命令、Linux df命令
文章摘要: Linux 服务器运行一段时间后,可能出现磁盘空间不足、网站无法访问、数据库写入失败等问题。本文介绍 Linux 磁盘空间排查的常用命令,帮助开发者快速定位大文件、日志文件和异常占用,并安全释放磁盘空间。
一、查看 Linux 磁盘使用情况
服务器磁盘空间不足时,第一步应该确认究竟是哪个分区占用了大量空间。
执行以下命令:
df -h
输出示例:
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 40G 35G 3.0G 93% /
/dev/vdb1 100G 20G 80G 20% /data
重点关注以下字段:
Size:分区总容量。Used:已使用空间。Avail:剩余可用空间。Use%:磁盘使用率。Mounted on:分区挂载位置。
如果根分区 / 的使用率达到 90% 以上,就需要进一步排查。对于数据库、日志较多的生产服务器,更应该提前设置磁盘使用率告警。
如果想查看 inode 使用情况,可以执行:
df -i
有时磁盘明明还有剩余容量,却无法创建新文件,原因可能是 inode 已经耗尽,尤其是在存在大量小文件的目录中。
二、快速找出占用空间最大的目录
确定分区存在问题后,可以继续查看根目录下各个目录的空间占用。
du -xhd1 / 2>/dev/null | sort -hr | head -20
参数说明:
du:统计文件和目录占用空间。-x:只统计当前文件系统,避免跨入其他挂载分区。-h:使用易读的容量单位。-d1:只查看一层目录,适用于支持该参数的 GNU du。sort -hr:按照容量从大到小排序。head -20:只显示前 20 条结果。
如果发现 /var 占用较大,可以继续执行:
du -xhd1 /var 2>/dev/null | sort -hr | head -20
如果是 /www 目录占用较大,也可以按照相同方法逐层排查。
注意:某些系统自带的 du 不支持 -d 参数,可以改用:
du -x -h --max-depth=1 /var 2>/dev/null | sort -hr
三、查找服务器中的大文件
日志、备份文件、数据库文件以及应用程序生成的临时文件,都可能成为磁盘空间的主要占用来源。
查找根分区中超过 500 MB 的普通文件:
find / -xdev -type f -size +500M -print 2>/dev/null
如果希望同时查看文件大小,可以执行:
find / -xdev -type f -size +500M \
-exec du -h {} + 2>/dev/null | sort -hr | head -20
对于使用宝塔面板的服务器,可以重点检查以下目录:
/www/wwwlogs/ 网站访问日志和错误日志
/www/backup/ 网站或数据库备份
/www/server/ 部分软件及运行环境文件
/var/log/ 系统日志
/tmp/ 临时文件
实际目录会根据安装方式和软件配置有所不同。
不要看到大文件就直接删除。 应先确认文件用途、所属服务以及是否仍在使用,特别是数据库文件、程序依赖文件和备份文件。
四、日志文件过大,应该怎么处理?
日志持续增长是服务器磁盘空间不足的常见原因。
先查看日志目录占用:
du -sh /var/log
查看最大的日志文件:
find /var/log -type f -exec du -h {} + 2>/dev/null \
| sort -hr | head -20
如果确认某个普通文本日志文件不再需要保留历史内容,可以在确认路径后清空文件,例如:
truncate -s 0 /path/to/application.log
与直接删除文件相比,清空文件通常可以保留文件本身及其权限。不过,清空日志之前仍然需要确认业务是否允许丢弃历史记录。
如果日志文件已经被进程打开,即使执行 rm 删除文件,进程仍可能继续占用磁盘空间。可以使用以下命令检查:
sudo lsof +L1
如果发现大量已删除但仍被进程占用的文件,应根据对应服务的情况,采用安全的日志轮转或重启方式释放空间,不要直接终止不明进程。
对于长期运行的服务,建议配置 logrotate,通过日志轮转、压缩、保留期限等机制控制日志增长,而不是定期手动清空所有日志。
五、清理软件包缓存
在 Debian 或 Ubuntu 系统上,可以清理 APT 下载缓存:
sudo apt clean
如果想删除不再需要的自动安装依赖,可以先检查:
sudo apt autoremove --dry-run
确认待删除的软件包后,再执行:
sudo apt autoremove
在 CentOS、Rocky Linux 等使用 DNF 的系统上,可以执行:
sudo dnf clean all
这些操作主要清理软件包缓存或不再需要的依赖,并不能解决所有磁盘占用问题。如果主要空间被数据库、备份或业务文件占用,清理缓存的效果可能很有限。
六、Docker 服务器如何排查磁盘占用?
如果服务器运行了 Docker,还需要检查容器、镜像、构建缓存和数据卷。
查看 Docker 磁盘使用情况:
docker system df
查看各容器的可写层占用:
docker ps -s
查看容器日志大小时,可以结合容器日志驱动和实际日志文件路径进行检查。
对于使用 Docker Compose 部署的业务,不要随意执行:
docker system prune -a --volumes
这类命令可能删除未使用的镜像、缓存,甚至未被容器引用的数据卷。数据卷中可能保存数据库和业务数据,误删后可能造成数据丢失。
清理之前,应先确认容器状态、镜像用途、数据卷内容,并确保重要数据已经备份。
对于长期运行的服务,建议配置 Docker 日志轮转。例如,使用 json-file 日志驱动时,可以在 Docker 配置中设置单个日志文件的大小和保留数量,避免容器日志无限增长。修改配置前应确认当前使用的日志驱动及 Docker 版本。
七、建立日常磁盘巡检习惯
生产环境不应该等到磁盘写满后才开始处理问题。
可以先使用以下命令完成基础巡检:
#!/bin/bash
echo "===== 磁盘使用情况 ====="
df -h
echo
echo "===== inode 使用情况 ====="
df -i
echo
echo "===== 根目录占用排行 ====="
du -xhd1 / 2>/dev/null | sort -hr | head -10
保存为 disk-check.sh 后执行:
chmod +x disk-check.sh
./disk-check.sh
对于正式生产环境,还可以进一步接入监控系统,在磁盘使用率达到 80%、90% 等阈值时发送告警。具体阈值需要根据磁盘容量、业务增长速度以及扩容所需时间确定。
八、总结
Linux 磁盘空间不足时,建议按照以下顺序处理:
- 使用
df -h检查分区使用率。 - 使用
df -i排查 inode 是否耗尽。 - 使用
du逐层定位占用空间较大的目录。 - 使用
find查找大文件。 - 检查日志、备份、Docker 数据和软件包缓存。
- 确认文件用途后再清理,避免误删业务数据。
- 配置日志轮转和磁盘告警,减少问题再次发生的概率。
对于个人开发服务器,掌握这些命令基本可以解决大部分常见的磁盘排查问题;对于生产服务器,更重要的是建立可持续的日志管理、容量监控和数据备份机制。
- 点赞
- 收藏
- 关注作者
评论(0)