文档首页/ 弹性云服务器 ECS/ 常见问题/ ECS卡顿(Linux)/ Linux云服务器磁盘使用率过高怎么办?
更新时间:2025-07-28 GMT+08:00
分享

Linux云服务器磁盘使用率过高怎么办?

问题描述

在使用ECS实例过程中,如果出现了以下的问题,表示遇到了实例磁盘文件系统空间满的情况:

  • 系统命令df -i显示磁盘Use%超过90%。
  • 收到磁盘inode使用率高的告警或者诊断结果显示磁盘使用率高。

排查步骤

检查磁盘的当前使用率,并识别高占用的文件:

  1. 登录弹性云服务器,具体操作,请参见Linux ECS登录方法概述
  2. 执行以下命令,查看磁盘使用率。

    df -h

    回显信息如下所示。示例中分区/dev/vdb1的使用率达到81%。

    图1 操作结果
  3. 执行以下命令,逐级查看哪个目录占用磁盘空间较大。

    du -sh /mnt/* | sort -rh | head -n 10

    回显信息如下所示。

    图2 操作结果

    从图示中可以看出,/data_file1目录占用空间最大,因此需要继续查看/ data_file1目录下哪个文件或目录占用空间较大。如果该命令回显的容量之和与df -h命令回显差异较大,请参见df和du统计磁盘空间的大小不一致

  4. 执行以下命令,以此类推逐级查看哪个目录占用磁盘空间较大。

    du -sh /mnt/data_file1/* | sort -rh | head -n 10

    例如在本示例中,进入较大的 /mnt/data_file1目录,继续查看/mnt/data_file1目录下哪个文件或目录较大。

    回显信息如下所示,结合业务确认是否存在可删除的大文件。

    图3 操作结果

df和du统计磁盘空间的大小不一致

  • 场景一:孤儿节点场景

    当一个文件被删除后,在文件系统目录中已经不可见了,所以du就不会再统计它了。然而如果此时还有运行的进程持有这个已经被删除了的文件的句柄,那么这个文件就不会真正在磁盘中被删除,分区超级块中的信息也就不会更改。这样df仍旧会统计这个被删除了的文件。

    • 排查方法:

      sudo lsof | grep delete | sort -k7 -rn

      系统显示类似如下信息,其中第7列为对应文件的大小(单位为Byte),您可以将第七列值累加以查看总文件大小和您非预期的磁盘使用空间是否接近,接近即为僵尸文件占用了您磁盘空间。

      图4 排查结果
    • 解决方案:
      如果存在僵尸文件,可通过以下两种方式释放句柄清除僵尸文件,从而释放磁盘空间。
      • 重启服务器清除

        重启服务器,系统会退出当前的进程,释放调用的deleted文件的句柄。

      • 重启进程清除

        根据lsof命令列出的PID进程号(通常为第二列),使用命令重启或者使用kill命令结束占用这些文件的服务进程。

  • 场景二:重复挂载场景

    当存在重复挂载时,du命令读取的是最后挂载的文件系统的容量数据,与被覆盖的文件系统的df容量数据不一致。如下图du显示根目录只有3.3G,但是df中显示根目录使用了14G。

    图5 操作结果
    • 排查方法:

      Mount

      回显信息如下:

      图6 排查结果

      可以看到有一个设备被挂载到了/mnt目录下,该目录有可能覆盖了根盘上原本存储的数据。

    • 解决方案:
      1. 解决挂载点被覆盖的问题,通常通过先取消磁盘分区挂载,再检查原挂载目录下的空间占用情况。
      2. 运行以下命令,卸载文件系统。 本示例以卸载/mnt为例,请您根据实际情况进行操作。

        umount /mnt

      3. 取消磁盘分区的挂载后,需检查原挂载目录下的空间占用情况,并根据具体情况采取相应的处置方案。

相关文档