问题现象

工作中遇到一个问题,在 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

问题分析

  1. 首先使用 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    /

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

  1. 查看 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 使用率也正常的,只能进一步分析。

  1. 使用 lsof 检查,怀疑是不是有可能文件已被删除,但是进程还存活的场景
wohu@wohu:/tmp$ sudo lsof |grep delete
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/106/gvfsOutput 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,终于发现问题原因。

  1. 如果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 命令是看不到这些文件的。

Linux df -h 显示磁盘空间满,但实际未占用满——问题分析相关推荐

  1. df -h显示磁盘使用情况

    df -h显示磁盘使用情况 网易 博客  摄影  随便看看 注册 登录 流浪地图 首页 日志 相册 音乐 收藏 博友 关于我 日志 流浪者   加博友   关注他 最新日志 nokia2100 常用s ...

  2. linux磁盘空间df-h出不出来,linux 故障:df -h统计磁盘空间占用太多,但又du -h找不到大的文件...

    用lsof / | grep -i delete 从根目录定位打开的被删除的文件 如果定位到某文件占用空间很大 主要是因为我们在删除这个日志文件的时候是用rm -rf *.log这样的命令删除的,删除 ...

  3. Linux通过df -h查看磁盘空间满,但实际占用却没有那么大

    最近项目现场经常反馈说是磁盘满了,但实际占用不却没有那么多,导致无法操作,远程查看后,确实如此,现将相关解决方案记录如下: 查看现有硬盘情况 df -h 2. 再查看实际占用 // 切换到要目录下 c ...

  4. 重新启动postgre报错时,解决方案 ( 由备份文件占用空间太大造成 ) (linux 命令 df -h 查看磁盘空间)

    在这里使用了一个liunx下的命令查看磁盘空间 df: disk free  http://www.cnblogs.com/chenwenbiao/archive/2011/08/07/2129831 ...

  5. linux df-h命令详细,df命令 – 显示磁盘空间使用情况

    df命令的英文全称即"Disk Free",顾名思义功能是用于显示系统上可使用的磁盘空间.默认显示单位为KB,建议使用"df -h"的参数组合,根据磁盘容量自动 ...

  6. linux 故障:df -h统计磁盘空间占用太多,但又du -h找不到大的文件

    用lsof / | grep -i delete 从根目录定位打开的被删除的文件 如果定位到某文件占用空间很大 主要是因为我们在删除这个日志文件的时候是用rm -rf *.log这样的命令删除的,删除 ...

  7. Linux df -h查看磁盘使用情况

  8. df 命令查看磁盘空间_Linux df命令检查磁盘空间

    df 命令查看磁盘空间 Periodically, you may need to monitor or check the disk space on your system to ensure t ...

  9. Linux通过df命令查看显示磁盘空间满,但实际未占用问题

    问题产生:让同事查看挂载点 "/"占用100%的原因,查看之后发现是/home/work/下的一个日志文件太大占用导致,然后同事就直接执行了rm命令,结果导致文件删了,但是挂载点占 ...

最新文章

  1. 人脸识别软件正在学习识别熊脸和牛脸
  2. C/C++将十进制数转为二进制并输出
  3. 车来了赵祺:贴近业务,是DT时代第一驱动力
  4. matlab光学远轴光的折射,光学课后习题
  5. Linux中xml导入数据库,XML数据库 BaseX
  6. docker 学习记录
  7. 德赛西威领投智驾科技B轮3亿元,加速智能驾驶人人可享
  8. IDEA 配置log4j
  9. Ae:时间轴面板(图层控制区)
  10. 南京市专精特新中小企业申报奖励补助(另附南京专精特新申报条件、材料和申报流程)
  11. sping循环依赖:but has eventually been wrapped. This means that said other beans do not use the final
  12. Linux_home的迁移
  13. 登陆页面✧樱花3D翻转
  14. 计算机编程情话,程序员的土味情话~(表白代码第二波)
  15. 《图解TCP/IP》——第一章 网络通讯基础
  16. 【机器学习】1. 线性模型 - 普通最小二乘法
  17. C# 高并发获取唯一ID算法
  18. DTPA PEG 异硫氰酸荧光素,DTPA PEG FITC,FITC-PEG-DTPA
  19. 21年双非二战南京大学软件学院专硕经验贴
  20. CAN通讯协议层--秉火STM32学习笔记

热门文章

  1. python打包成exe可执行文件指定进程名字
  2. Python---哈夫曼树---Huffman Tree
  3. MySQL最新版8.0.21安装配置教程~
  4. MindSpore Lite整体架构介绍
  5. 基于TensorRT的BERT实时自然语言理解(上)
  6. CVPR2020:端到端学习三维点云的局部多视图描述符
  7. 2021年大数据Spark(三十六):SparkStreaming实战案例一 WordCount
  8. 【嵌入式】openmv与stm32的串口通信
  9. C++ .h(头文件) 与 .cpp(源文件) 的使用
  10. RxJava 过滤操作符 take 与 takeLast