Linux df -h 显示磁盘空间满,但实际未占用满——问题分析(转载)

问题现象
工作中遇到一个问题,在 TX2 系统上,告警提示磁盘空间不够,如图所示

wohu@wohu:/$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        28G   28G     0 100% /
devtmpfs        7.7G     0  7.7G   0% /dev
tmpfs           7.7G  220K  7.7G   1% /dev/shm
tmpfs           7.7G  774M  7.0G  10% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           7.7G     0  7.7G   0% /sys/fs/cgroup
tmpfs           786M   16K  786M   1% /run/user/106
tmpfs           786M     0  786M   0% /run/user/1002
tmpfs           786M     0  786M   0% /run/user/1001
/dev/sda1       1.9T  1.4T  518G  73% /videos

问题分析
首先使用 sudo du / -h --max-depth=1 命令查看各个目录的占用空间,试图找到占用较多空间的目录

wohu@wohu:/$ sudo du / -h --max-depth=1
[sudo] password for icsc-rudiadmin09:
8.0K    /media
15M     /bin
du: cannot access '/run/user/106/gvfs': Permission denied
774M    /run
4.0K    /snap
16K     /lost+found
4.0K    /srv
du: cannot access '/proc/19638': No such file or directory
du: cannot access '/proc/19639/task/19639/fd/4': No such file or directory
du: cannot access '/proc/19639/task/19639/fdinfo/4': No such file or directory
du: cannot access '/proc/19639/fd/3': No such file or directory
du: cannot access '/proc/19639/fdinfo/3': No such file or directory
0       /proc
4.0K    /mnt
13M     /etc
4.8G    /usr
34M     /boot
12M     /sbin
1.5G    /opt
1.7G    /var
1.4T    /videos
255M    /lib
0       /sys
188K    /dev
5.5M    /root
1.8M    /tmp
1.5G    /home
1.4T    /

但是从结果显示来看并没有占用大空间的磁盘,于是乎继续分析。

查看 inode 的使用率,怀疑 inode 不够导致此问题

wohu@wohu:/tmp$ df -i
Filesystem        Inodes  IUsed     IFree IUse% Mounted on
/dev/root        1835008 201065   1633943   11% /
devtmpfs         1994185    737   1993448    1% /dev
tmpfs            2010884      6   2010878    1% /dev/shm
tmpfs            2010884   1969   2008915    1% /run
tmpfs            2010884      6   2010878    1% /run/lock
tmpfs            2010884     16   2010868    1% /sys/fs/cgroup
tmpfs            2010884     14   2010870    1% /run/user/106
tmpfs            2010884      4   2010880    1% /run/user/1002
tmpfs            2010884      4   2010880    1% /run/user/1001
/dev/sda1      524437048  44385 524392663    1% /videos

通过 df -i 命令查看后发现 inode 使用率也正常的,只能进一步分析。

使用 lsof 检查,怀疑是不是有可能文件已被删除,但是进程还存活的场景

wohu@wohu:/tmp$ sudo lsof |grep delete
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/106/gvfs
      Output information may be incomplete.
apache2     337               www-data   10u      REG              179,1             0     393922 /tmp/.ZendSem.HuhGBk (deleted)
apache2     338               www-data   10u      REG              179,1             0     393922 /tmp/.ZendSem.HuhGBk (deleted)
apache2     339               www-data   10u      REG              179,1             0     393922 /tmp/.ZendSem.HuhGBk (deleted)
apache2     340               www-data   10u      REG              179,1             0     393922 /tmp/.ZendSem.HuhGBk (deleted)
apache2     341               www-data   10u      REG              179,1             0     393922 /tmp/.ZendSem.HuhGBk (deleted)
apache2   32749                   root   10u      REG              179,1             0     393922 /tmp/.ZendSem.HuhGBk (deleted)
apache2   32752               www-data   10u      REG              179,1             0     393922 /tmp/.ZendSem.HuhGBk (deleted)
apache2   32753               www-data   10u      REG              179,1             0     393922 /tmp/.ZendSem.HuhGBk (deleted)
apache2   32754               www-data   10u      REG              179,1             0     393922 /tmp/.ZendSem.HuhGBk (deleted)
apache2   32755               www-data   10u      REG              179,1             0     393922 /tmp/.ZendSem.HuhGBk (deleted)
apache2   32756               www-data   10u      REG              179,1             0     393922 /tmp/.ZendSem.HuhGBk (deleted)

Linux 里的文件被删除后,空间没有被释放是因为在 Linux 系统中,通过 rm 或者文件管理器删除文件将会从文件系统的目录结构上解除链接 (unlink) 。然而如果文件是被打开的(有一个进程正在使用),那么进程将仍然可以读取该文件,磁盘空间也一直被占用。装态为 deleted 为标记被删除,其实该文件并没有从磁盘中删除,类似windows下的回收站状态。

即使将如上所示的进程全部杀掉,发现空间占用仍是 100%,此时头大呀。。

突然回想起,是不是由于挂载盘导致的,因为 TX2 空间本来就小,所以挂载了个移动硬盘。而且由于中间挂载盘丢失我又重新挂载的场景,于是继续 Google,终于发现问题原因。

如果mount目录下原来是有文件存在的,那么该目录被 mount 之后这些文件就会被隐藏,不属于该文件系统,使用du命令是看不到的。
卸载挂载盘

wohu@wohu:/$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        28G   28G     0 100% /
devtmpfs        7.7G     0  7.7G   0% /dev
tmpfs           7.7G  220K  7.7G   1% /dev/shm
tmpfs           7.7G  774M  7.0G  10% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           7.7G     0  7.7G   0% /sys/fs/cgroup
tmpfs           786M   16K  786M   1% /run/user/106
tmpfs           786M     0  786M   0% /run/user/1002
tmpfs           786M     0  786M   0% /run/user/1001
/dev/sda1       1.9T  1.4T  518G  73% /videos
wohu@wohu:/$ sudo unmount videos

查看卸载之后挂载盘大小

果然发现 videos 目录下有较多的视频占用了磁盘空间。

wohu@wohu:/videos$ cd ../
wohu@wohu:/$ du -h videos
...
...
...
18G     videos/backup
18G     videos

将 videos 目录下的文件删除或拷贝到其他目录,并重新挂载
由此问题得到解决。

问题总结
在挂载目录时,要确认挂载的目录是否有文件,如果有文件那么挂载之后这些文件就会隐藏,此时使用 du 命令是看不到这些文件的。
————————————————
版权声明:本文为CSDN博主「wohu1104」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wohu1104/article/details/85269841

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux,使用"df -h"命令可以查看磁盘空间的使用情况。其,"df"是磁盘空间显示命令,"-h"选项表示以人类可读的方式显示磁盘空间大小。通过运行该命令,可以获取磁盘占用空间剩余空间等信息。 当你发现"df -h"命令显示磁盘空间较少时,你可以根据以下步骤进行处理: 1. 首先,查看"Filesystem"列,确定哪个分区的磁盘空间较少。该列显示了文件系统所在的分区,即设备名称。 2. 接下来,关注"Used"和"Available"列。"Used"表示已使用的磁盘空间大小,"Available"表示剩余磁盘空间大小。通过比较这两个值,可以确定磁盘空间是否真的紧张。 3. 另外,还需注意"Use%"列,它表示磁盘空间的使用率。通过该列的值,可以判断磁盘空间是否已经接近载。 4. 最后,可以使用"Mounted on"列来确定文件系统的挂载点,即磁盘挂载的目录位置。通过进入挂载点的目录,可以查看该分区下的文件和目录情况。 总结起来,当你发现"df -h"命令显示磁盘空间较少时,你需要先确定具体是哪个分区的磁盘空间紧张,然后关注已使用的空间剩余空间和使用率,最后可以通过进入挂载点的目录查看相关文件和目录情况。这样可以帮助你更好地理解磁盘空间的使用情况并采取相应的处理措施。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Linux df -h](https://blog.csdn.net/qq_21370419/article/details/127769225)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [linux指令-df](https://download.csdn.net/download/weixin_38663516/14041504)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [linux解决df -h 占用空间磁盘过多的问题,查找linux磁盘占用内存最大的位置](https://blog.csdn.net/zka_yyds/article/details/130699766)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值