售前咨询400-838-0503

Linux 服务器磁盘空间不足怎么办?

发布:2026-10-14 13:25

搜索全部帮助分类的文档

Linux 云服务器运行一段时间后,可能出现文件上传失败、网站报错、数据库无法写入,或者提示 No space left on device 的情况。

磁盘空间不足不一定是网站文件太多,也可能与日志持续增长、备份堆积、Docker 数据占用或 inode 耗尽有关。

建议先确认哪个文件系统空间不足,再定位具体目录和文件,最后根据数据用途进行清理或扩容。

本文以常见 Linux 服务器为例。命令建议使用 root 用户执行;普通用户可根据需要添加 sudo。示例路径、容器名称和数据库信息均需按实际环境修改。

一、查看哪个文件系统空间不足

Linux使用df查看服务器磁盘空间

首先执行:

df -hT

该命令可以查看已挂载文件系统的类型、总容量、已用空间和可用空间。

重点关注以下字段:

字段 含义
Filesystem 文件系统对应的设备或来源
Type 文件系统类型,如 ext4、xfs
Size 总容量
Used 已使用空间
Avail 可用空间
Use% 空间使用率
Mounted on 挂载位置

如果 / 对应的文件系统接近或达到 100%,说明根文件系统空间紧张;如果 /data 对应的文件系统已满,则需要优先检查 /data 中的数据。

也可以查看某个目录所在文件系统的容量:

df -hT /var

不同挂载点的空间通常不能直接互相使用。 例如,/data 还有大量剩余空间,并不代表存放在根文件系统中的 /var 能继续写入。df 查看的是文件系统整体使用情况。

二、还有剩余容量,为什么仍提示空间不足?

除了容量,还需要检查 inode:

df -i

inode 用于保存文件的元数据信息。对于常见的 ext4 文件系统,大量小文件可能在容量尚未用完时先耗尽可用 inode。

重点查看:

  • IFree:剩余 inode 数量。

  • IUse%:inode 使用率。

如果 IUse% 达到 100%,应重点排查缓存、会话、邮件队列和临时文件目录。

支持 inode 统计的 GNU du 可以帮助定位:

du --inodes -x --max-depth=1 / | sort -n

发现某个目录占用明显较高后,继续进入下一层:

du --inodes -x --max-depth=1 /var | sort -n

如果相关数据位于独立挂载的 /data,需要单独扫描 /data。

inode 不足时,清理一个大文件通常帮助有限,重点是处理大量已经失效的小文件,并修复其持续生成的原因。

三、找出占用最大的目录

Linux使用du查找占用磁盘空间目录

如果确认是容量不足,可以从发生问题的挂载点开始逐层排查。

例如,检查根文件系统:

du -xhd1 / | sort -h

参数含义:

  • -x:不跨越到其他文件系统。

  • -h:使用便于阅读的容量单位。

  • -d1:显示当前目录及其下一层目录的汇总。

  • sort -h:按容量从小到大排序。

假设 /var 占用较大,继续执行:

du -xhd1 /var | sort -h

如果发现 /var/lib 较大,再执行:

du -xhd1 /var/lib | sort -h

每次沿着占用较大的目录往下查,直到找到具体应用或数据目录。

du 扫描大量文件时可能耗时较长,并产生磁盘读取负载,建议避免同时运行多个全盘扫描。

四、查找体积较大的文件

目录范围确定后,可以查找其中超过 1 GiB 的普通文件。例如检查 /var:

find /var -xdev -type f -size +1G -exec ls -lh -- {} +

如果需要检查根文件系统:

find / -xdev -type f -size +1G -exec ls -lh -- {} +

-xdev 表示不跨越到其他文件系统。独立数据盘需要从对应挂载点单独检查。

常见的大文件包括:

文件类型 建议处理方式
历史备份、旧安装包 确认用途和备份有效性后删除或迁移
网站访问日志、错误日志 排查增长原因,配置日志轮转
数据库文件 通过数据库工具处理
虚拟机镜像、业务上传文件 核实是否仍被使用,必要时迁移或扩容
Docker 相关文件 使用 Docker 命令和日志配置处理

文件体积大并不代表可以删除。特别是数据库、容器存储和正在使用的镜像文件,应先确认归属。

五、检查系统日志和网站日志

查看日志目录的占用:

du -xhd1 /var/log | sort -h

查找超过 100 MiB 的日志文件:

find /var/log -xdev -type f -size +100M -exec ls -lh -- {} +

如果服务器使用 systemd,可以查看 journal 日志的占用:

journalctl --disk-usage

确认旧日志无需继续保留后,可执行:

journalctl --rotate --vacuum-size=500M

该命令先轮转日志,再删除较旧的归档日志,将归档部分控制在指定容量以内。由于活动日志仍会占用空间,执行后的总占用不一定低于 500 MiB。此操作会删除部分历史日志。

网站日志还可能存放在面板或应用自定义目录中,需要结合前面的 du 结果检查。

对于持续增长的错误日志,应先查看近期内容,定位重复报错、异常请求或程序问题,再配置 logrotate 等轮转机制。

清理日志只能暂时释放空间,修复异常增长原因才能避免磁盘再次被占满。

六、清理软件包下载缓存

在 Debian、Ubuntu 系统中,可以先查看缓存大小:

du -sh /var/cache/apt/archives

然后清理已下载的软件包缓存:

apt-get clean

该命令清理本地软件包下载缓存,不会卸载已经安装的软件。后续需要相关安装包时,通常需要重新下载。

对于使用 DNF 的系统,可以执行:

dnf clean packages

这类操作适合处理软件包缓存,但如果缓存本身很小,就应继续排查其他目录。

七、检查网站备份和业务数据

网站、面板和定时任务可能每天生成备份。如果只新增、不清理,备份目录会持续增长。

根据实际路径检查,例如:

du -xhd1 /www | sort -h
du -xhd1 /home | sort -h

重点关注旧网站压缩包、数据库导出文件、重复下载的镜像和已经完成迁移的历史文件。

删除旧备份前,应确认至少保留了一份可用备份,并检查远端备份是否上传完整、能否正常恢复。

把文件从同一文件系统的一个目录移动到另一个目录,不会释放该文件系统的空间。 如果需要迁移,应将数据转移到其他磁盘或远端存储,并在验证后再删除原文件。

磁盘已经接近满载时,也不要直接在原磁盘创建完整压缩备份,以免产生更多临时占用。

八、数据库目录占用过大怎么办?

如果发现 MySQL 数据目录占用较大,应区分数据表文件、二进制日志、慢查询日志和备份文件。

登录数据库后,可以查看实际数据目录:

SHOW VARIABLES LIKE 'datadir';

查看是否开启二进制日志:

SHOW VARIABLES LIKE 'log_bin';

在启用二进制日志的情况下,查看日志文件列表:

SHOW BINARY LOGS;

如果主要占用来自 binlog,需要先确认备份恢复要求,以及所有复制节点是否仍需要这些日志,再通过 MySQL 的 PURGE BINARY LOGS 语句按明确边界清理。

不要直接在系统目录中删除 binlog 文件。 直接删除可能导致日志索引不一致,也可能影响复制或数据恢复。

同样,不要直接删除 .ibd、ibdata1、redo 或 undo 等数据库文件。业务数据持续增长时,应从数据归档、保留策略、存储迁移或扩容入手。

九、文件已经删除,空间为什么没有释放?

有时删除了一个大日志,df 显示的可用空间却没有明显增加。

常见原因是:文件虽然已从目录中删除,但仍被某个进程打开。

可以检查:

lsof +L1

重点关注进程名称、PID、文件类型、大小和路径,确认是否存在体积较大的已删除普通文件。

这类文件通常需要等所有相关进程关闭文件描述符后,才能释放占用。可以按应用支持的方式重新打开日志;必要时,在确认业务影响后重启对应服务。普通配置重载不一定会关闭该文件。

不建议为了释放一个日志文件直接重启整台服务器,也不要在未确认进程用途时强制结束进程。

十、Docker 占用大量磁盘空间怎么办?

Linux服务器检查Docker磁盘占用与日志轮转

Docker 的镜像、容器可写层、数据卷、构建缓存和日志都可能占用空间。

先查看资源使用情况:

docker system df

需要更详细的信息时执行:

docker system df -v

这些命令用于查看 Docker 管理的资源占用;容器日志和绑定挂载的业务目录还应单独检查。

查看所有容器:

docker ps -a

确认无需保留无标签且未被容器引用的镜像后,可以执行:

docker image prune

执行时会出现确认提示。

不要把 docker system prune -a --volumes 当作通用清理命令直接使用。清理停止的容器会删除其可写层,清理未使用的数据卷也可能删除仍需保留的业务数据。

如果怀疑容器日志过大,可以查看指定容器的日志驱动和日志路径:

docker inspect --format '{{.HostConfig.LogConfig.Type}}' 容器名
docker inspect --format '{{.LogPath}}' 容器名

使用 Docker Compose 时,可以在现有服务配置下合并以下日志设置:

logging:
  driver: "json-file"
  options:
    max-size: "10m"
    max-file: "3"

该示例为 JSON 日志配置大小和轮转数量限制。修改后需要重新创建相应容器才会生效,单纯重启现有容器不会更新创建时的日志配置。

重新创建前,应确认业务数据已经持久化,并安排好可能的服务中断。不要直接删除或修改 Docker 管理的日志文件,也不要手动清空 Docker 数据目录。

十一、清理后仍不够用,是否需要扩容?

如果主要空间被正常业务数据占用,且持续增长,应考虑增加存储容量。

可以先查看磁盘、分区和文件系统:

lsblk -f
df -hT

需要区分以下几个层次:

层次 需要确认的内容
云磁盘 平台是否已经增加容量,系统是否识别
分区 现有分区是否覆盖新增空间
LVM 如使用 LVM,是否需要扩展物理卷和逻辑卷
文件系统 是否已经扩展到新的可用容量

控制台扩容完成,并不代表 Linux 中的文件系统容量一定同步增加。

具体操作取决于分区方式、是否使用 LVM,以及文件系统是 ext4 还是 XFS,不能直接套用同一组命令。

如果新增的是一块独立数据盘,也不会自动增加根文件系统的空间,需要规划挂载位置和业务数据迁移。

对于莱卡云服务器,提交扩容相关工单时,可附上 lsblk -f 和 df -hT 的输出,便于核对当前磁盘结构。

十二、清理完成后检查什么?

处理完成后,重新检查容量和 inode:

df -hT
df -i

同时验证之前受影响的功能,例如网站访问、文件上传、数据库写入和备份任务,确认业务已经恢复。

日常维护建议关注以下事项:

  • 为磁盘容量和 inode 设置告警,并结合增长速度提前处理。

  • 为系统、网站和容器日志配置轮转。

  • 为备份设置保留周期,避免无限累积。

  • 为缓存、会话和临时文件设置有效期。

  • 定期检查数据库日志和 Docker 资源占用。

  • 将长期增长的业务数据规划到容量充足的数据盘。

排查过程中,如果某个目录的用途不明确,可先记录路径、占用大小和相关服务信息,再进行核实,避免误删影响业务。

按文档操作后还是不行,把机器编号、出问题的时间点和现象截图一起提工单,能少来回一轮。

提交工单