使用du与df命令查看磁盘容量不一致

jurioo1年前操作系统475

问题描述

在Linux系统的ECS实例中,执行dudf命令查看磁盘容量,出现不一致的现象,以下为出现不一致的5种现象:

  • 执行df -h命令查看文件系统的使用率,可以看到/dev/xvdb1磁盘占用了约27G,挂载目录为/opt

    进入/opt目录执行du -sh命令,显示空间总占用量约2.4G,即出现dfdu命令结果不一致的现象。

  • 通过df -h命令,查看磁盘使用率显示为负值。

  • 执行dudf命令显示的结果不一致,dfdu命令显示的数据大很多。

  • 使用df命令显示磁盘使用率过高,但是执行du命令统计目录时却磁盘使用率不高,且查不到已删除的句柄文件。

  • 当前系统存在数据盘挂载点,使用df命令查看系统盘容量已满,但是在根目录下使用du命令统计各文件总容量,但是合计达不到总容量。

问题原因

以下为五种问题的原因:

  • 用户删除了大量的文件后,du命令就不会在文件系统目录中统计这些文件。如果此时还在运行中的进程持有这个已经被删除的文件句柄,那么这个文件就不会真正在磁盘中被删除,分区超级块中的信息也就不会更改,df命令仍会统计这个被删除的文件。 通过lsof命令查询处于deleted状态的文件,被删除的文件在系统中被标记为deleted。如果系统有大量deleted状态的文件,会导致dudf命令统计结果不一致。 可opt目录下执行如下命令查看。

     
    lsof |grep deleted
  • Linux系统磁盘分区有保留区的概念,会给root或指定用户预留5%或更大的空间,当使用到这块保留区的空间时,fdisk命令的计算将会是负数。ext文件系统(包括ext2、ext3、ext4)都会默认预留5%的磁盘空间,使用root用户维护系统或记录系统关键日志使用。

  • 当用du -sh *命令来统计目录总容量时,如果该路径下包含隐藏文件,是不会包含在统计结果里的

  • 由于删除了大量小文件,导致inode释放出现问题。

  • 由于数据盘挂载前该路径下就存在文件,挂载后用du无法查询到原路径文件。

    解决方案

    阿里云提醒您:

    • 如果您对实例或数据有修改、变更等风险操作,务必注意实例的容灾、容错能力,确保数据安全。

    • 如果您对实例(包括但不限于ECS、RDS)等进行配置与数据修改,建议提前创建快照或开启RDS日志备份等功能。

    • 如果您在阿里云平台授权或者提交过登录账号、密码等安全信息,建议您及时修改。

    本文主要针对以上五种问题,提供以下解决方案:

    • 根据lsof列出的进程号,终止相应进程或者重启相应的服务。也可以重启实例,重启实例系统会退出现有的进程,开机后重新加载过程中,会释放调用的deleted文件的句柄。

      提示:如果ECS实例正在运行业务进程,终止进程时请慎重操作。
    • 通过rm命令删除磁盘中的大文件,释放预留空间的占用后,再通过df命令查询磁盘占用即可恢复正常。

    • 执行du -ah命令即可在统计结果中包含隐藏文件。

    • 进入单用户模式,详情请参见进入CentOS实例单用户模式的配置方法。执行fsck -y [$Partition_Name]命令,修复文件系统。

      说明
      • 关于fsck相关命令的更多信息可执行man fsck,查阅相关用法。

      • 执行fsck相关命令必须先进入RAMOS模式,再对非挂载的分区进行操作。

      • [$Partition_Name]不可为sda设备名。

      • [$Partition_Name]为非挂载点的分区名称。

      • 卸载数据盘后再次使用du命令查询即可查到数据。



      返回列表

      上一篇:扩容分区和文件系统(Linux)

      没有最新的文章了...

      相关文章

      驱动软件和操作系统层次结构以及对应的关系

      操作系统层次结构硬件层:包括 CPU、内存、硬盘、网络接口卡(NIC)等物理设备。核心层(内核层):内核是操作系统的核心部分,负责管理和调度硬件资源,提供底层服务,如进程管理、内存管理、文件系统等。内...

      ubuntu使用zram进行虚拟内存管理

      1.安装和启用 ZRAMsudo apt-get install zram-config sudo systemctl enable zr...

      分析内核模块可以帮助你确定系统中是否存在潜在的恶意模块

      分析内核模块可以帮助你确定系统中是否存在潜在的恶意模块。以下是一些步骤和命令,可以帮助你分析和检查内核模块:### 1. 列出所有加载的内核模块使用 `lsmod` 命令列出所有当前加载的内核模块:`...

      扩容分区和文件系统(Linux)

      扩容分区和文件系统(Linux)

      扩容分区和文件系统(Linux)前提条件操作系统版本需符合要求。请确保Linux实例的操作系统是Alibaba Cloud Linux 2/3、CentOS 6及以上、Debian 8及以上或者Ubu...

      WIFI无线网络标准5/6/7

      Wi-Fi 5、Wi-Fi 6 和 Wi-Fi 7 是 IEEE 802.11 标准的不同版本,每个版本都带来了新的特性和改进,以提高网络性能、容量和效率。以下是这些标准的主要特点和区别:### Wi...

      发表评论    

      ◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。