Linux 服务器磁盘空间不足?这几个命令帮你快速定位问题

举报
yd_270698419 发表于 2026/10/26 01:21:23 2026/10/26
【摘要】 Linux 服务器磁盘空间不足?这几个命令帮你快速定位问题SEO关键词: Linux磁盘空间不足、Linux磁盘占用查询、Linux服务器运维、Linux磁盘清理、Linux du命令、Linux df命令文章摘要: Linux 服务器运行一段时间后,可能出现磁盘空间不足、网站无法访问、数据库写入失败等问题。本文介绍 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 磁盘空间不足时,建议按照以下顺序处理:

  1. 使用 df -h 检查分区使用率。
  2. 使用 df -i 排查 inode 是否耗尽。
  3. 使用 du 逐层定位占用空间较大的目录。
  4. 使用 find 查找大文件。
  5. 检查日志、备份、Docker 数据和软件包缓存。
  6. 确认文件用途后再清理,避免误删业务数据。
  7. 配置日志轮转和磁盘告警,减少问题再次发生的概率。

对于个人开发服务器,掌握这些命令基本可以解决大部分常见的磁盘排查问题;对于生产服务器,更重要的是建立可持续的日志管理、容量监控和数据备份机制。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。