专栏首页用户1337634的专栏Linux找不到占用磁盘的文件 - df/du的区别

Linux找不到占用磁盘的文件 - df/du的区别

最近经常收到磁盘空间不足的告警,但是去定位可删除文件的时候,发现了一个问题,df显示磁盘满了,但是du计算得到的磁盘总空间却只占到磁盘空间的50%左右。 经过查询后终于找到原因

最终原因

文件如果在被某个进程打开后删除,还会存在文件系统中,只是标记为(deleted)状态。

df统计是文件系统(FileSystem)中的空闲磁盘大小,这个数值可以在文件系统中直接得到,所以命令执行很快 du统计的目录及文件占用的磁盘大小,如果文件删除(被标记为deleted状态)则不统计

问题展示

[tenmao@vm ~]$ df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   18G   18G   72K 100% /
devtmpfs                 898M     0  898M   0% /dev
tmpfs                    910M     0  910M   0% /dev/shm
tmpfs                    910M  9.4M  901M   2% /run
tmpfs                    910M     0  910M   0% /sys/fs/cgroup
/dev/sda1                497M  171M  327M  35% /boot
tmpfs                    182M     0  182M   0% /run/user/1000

[root@vm /]# du -h --max-depth=1
146M      ./boot
0         ./dev
0         ./proc
9.4M      ./run
0         ./sys
36M       ./etc
44K       ./root
4.0K      ./tmp
344M      ./var
2.6G      ./usr
11G       ./home
0         ./media
0         ./mnt
136M      ./opt
0         ./srv
14G       .

df显示磁盘占用100%(磁盘一共18G),du命令却只查找到14G的空间占用

问题定位

查看打开的文件列表

[tenmao@vm ~]$ lsof | grep deleted
less      12998          (省略)  /home/tenmao/test4 (deleted)

可以看到文件/home/tenmao/test4被进程12998打开后, 又被其他进程或命令删除,在lsof命令中显示为deleted状态

解决问题

停掉或重启进程12998

kill 12998
[tenmao@vm /]$ df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   18G   14G  4.0G  78% /
devtmpfs                 898M     0  898M   0% /dev
tmpfs                    910M     0  910M   0% /dev/shm
tmpfs                    910M  9.4M  901M   2% /run
tmpfs                    910M     0  910M   0% /sys/fs/cgroup
/dev/sda1                497M  171M  327M  35% /boot
tmpfs                    182M     0  182M   0% /run/user/1000

停掉进程后,df命令与du命令的大小基本一致了。

一个猜测

创建文件的时候,如果df显示磁盘满,但是du显示有空间,是否可以创建文件?

结果显示:创建文件的时候,判断磁盘空间使用但是df的结果 (这也很符合预期,因为文件还是交给文件系统来管理的)

参考

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java Bean Validation校验@PathVariable和@RequestParam

    上面配置后,还是不能起作用,还需要在Controller上增加注解@Validated

    十毛
  • Spring Boot缓存配置不同到期时间

    这种方式可以实现不同缓存的不同到期时间,但是后面再新增缓存数据的话,都需要再在CacheManager中配置

    十毛
  • JMeter5性能测试

    上面的测试,每次发送的URL请求都是同一个,可能因为缓存等原因导致性能数据偏差。 可以使用读取CSV文件的方式,对每个请求构造不同的请求。

    十毛
  • win10锁屏界面无法更新

    Jetpropelledsnake21
  • SharePoint 创建 Lookup 类型的Site Column解决跨站问题

    在某些情况下,我们需要去引用其他List中的数据,比如在网站集(Site Collection)上有个List叫Country,在其子网站(WebSite)有...

    用户1161731
  • ROS_Kinetic_04 ROS基础内容(一)

    在使用ROS期间,一定要确保环境变量配置正确,通常是source不同的setup.bash。

    zhangrelay
  • Python - 基本数据处理函数round()、int()、floor()、ceil()

    对每位程序员来说,在编程过程中数据处理是不可避免的,很多时候都需要根据需求把获取到的数据进行处理,取整则是最基本的数据处理。取整的方式则包括向下取整、四舍五入、...

    小菠萝测试笔记
  • iCDO一周数据:腾讯Q3财报:支付等业务成主要营收;华为与亚马逊和谷歌竞争海外语音市场;京东获全球首个省域无人机物流经营许可证

    中国专利保护协会12日发布的《人工智能技术专利深度分析报告》(下称《报告》),对人工智能技术在世界范围内和在我国的专利申请数据进行了分析。 ...

    iCDO互联网数据官
  • 制作一个简单的命令行测试工具

    接口测试时,经常需要对接口发送不同的请求数据,有些接口所需要的参数是灵活多变的,而同一服务可能存在多个不同的接口。按照正常思路,我们需要为每个接口准备一系列的测...

    用户5521279
  • SAP HANA里的中文排序问题

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。

    Jerry Wang

扫码关注云+社区

领取腾讯云代金券