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

2023-11-13

问题现象

工作中遇到一个问题,在 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/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,终于发现问题原因。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 如何更改 Apache 服务器的根目录? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何更改 Apache 服务器的文档根目录 我基本上想要localhost从 来 users spencer projects目录而不是
  • CoAP数据包的大小是多少?

    我是这项技术的新手 有人可以帮助我了解一些疑问吗 Q 1 CoAP数据包的大小是多少 我知道有 4 字节固定标头 但是包括标头 选项和负载在内的最大大小限制是多少 Q 2 有像MQTT那样的Keep Alive的概念吗 它在UDP上工作 它
  • Linux 上的用户空间能否实现本机代码的抢占式多任务处理?

    我想知道是否可以在 Linux 用户空间的单个进程中实现本机代码的抢占式多任务处理 也就是说 从外部暂停一些正在运行的本机代码 保存上下文 交换到不同的上下文 然后恢复执行 所有这些都由用户空间精心安排 但使用可能进入内核的调用 我认为这可
  • 删除 Git 存储库,但保留所有文件

    在我使用 Linux 的过程中的某个时刻 我决定将我的主目录中的所有内容都放入源代码管理中是个好主意 我不是在问这是否是一个好主意 我是在问如何撤销它 删除存储库的原因是我最近安装了 Oh My Zsh 而且我非常喜欢它 问题是我的主目录有
  • 进程退出后 POSIX 名称信号量不会释放

    我正在尝试使用 POSIX 命名信号量进行跨进程同步 我注意到进程死亡或退出后 信号量仍然被系统打开 在进程 打开它 死亡或退出后是否有办法使其关闭 释放 早期的讨论在这里 当将信号量递减至零的进程崩溃时 如何恢复信号量 https sta
  • Fortran gfortran linux 中的“分段错误(核心转储)”错误

    我正在创建一个程序 该程序将分析目录中的文件 fits 然后它将在另一个目录中创建另一个文件 txt 它只是一个转换器 当我尝试执行该程序 编译正常 时 它给了我一条错误消息 程序收到信号 SIGSEGV 分段错误 无效的内存引用 此错误的
  • 监控子进程的内存使用情况

    我有一个 Linux 守护进程 它分叉几个子进程并监视它们是否崩溃 根据需要重新启动 如果父进程可以监视子进程的内存使用情况 以检测内存泄漏并在超出一定大小时重新启动子进程 那就太好了 我怎样才能做到这一点 您应该能够从 proc PID
  • 如何允许应用程序声明“https”方案 URI? (即如何从 https URL 打开桌面应用程序?)

    目前我正在尝试为 OAuth 2 0 授权流程创建一个客户端 实际上是一个本机应用程序 并且在规范中就在这儿 https www rfc editor org rfc rfc8252 section 7 2据说有 3 种方法来处理重定向 U
  • 在 unix 中编译 dhrystone 时出错

    我是使用基准测试和 makefile 的新手 我已经从下面的链接下载了 Dhrystone 基准测试 我正在尝试编译它 但我遇到了奇怪的错误 我尝试解决它 但没有成功 有人可以帮助我运行 dhrystone 基准测试吗 以下是我尝试编译的两
  • 为什么我可以在 /proc/pid/maps 输出中看到几个相同的段?

    测试在32位Linux上进行 代码如下 int foo int a int b int c a b return c int main int e 0 int d foo 1 2 printf d n d scanf d e return
  • 从 systemd bash 内联脚本创建 filename_$(date %Y-%m-%d)

    我正在尝试执行systemd计时器并希望将执行脚本的输出保存在每个日期的文件中 这是我的ExecStart脚本中的 service file ExecStart bin bash c echo date Y m d gt gt home u
  • 后台分叉无法正常工作[重复]

    这个问题在这里已经有答案了 我运行这个程序 在前景和背景中 int main int pid printf App Start pid d n getpid while 1 pid fork if pid 0 printf Child n
  • 如何从 PROC 获取有关子进程的信息

    我正在尝试编写一个以几个进程作为参数的程序 然后父进程执行每个子进程并打印出一些相关的统计信息 示例 generate ls l 将生成一个程序 打印出有关 ls l 的一些统计信息 特别是其系统时间 用户时间和上下文切换次数 我不想使用
  • vagrant ssh -c 并在连接关闭后保持后台进程运行

    我正在编写一个脚本来启动和后台流浪机器内的进程 似乎每次脚本结束和 ssh 会话结束时 后台进程也会结束 这是我正在运行的命令 vagrant ssh c cd vagrant src nohup python hello py gt he
  • Linux 上的 RTLD_LOCAL 和dynamic_cast

    我们有一个由应用程序中的一些共享库构成的插件 我们需要在应用程序运行时更新它 出于性能原因 我们在卸载旧插件之前加载并开始使用新插件 并且只有当所有线程都使用旧插件完成后 我们才卸载它 由于新插件和旧插件的库具有相同的符号 我们dlopen
  • Fedora dnf 更新不起作用?

    当我尝试使用 update 命令更新 Fedora 22 时 sudo dnf update 我收到以下错误 错误 无法同步存储库 更新 的缓存 无法准备内部镜像列表 Curl 错误 6 无法解析主机名 无法解析主机 mirrors fed
  • Linux中使用管道进行进程间通信

    我已经编写了在 linux 中写入数字以进行管道传输的代码 如下所示 但显示错误 任何人都可以帮助我解决这个问题 基本上该程序的问题陈述如下 一个程序将打开一个管道 向管道写入一个数字 其他程序将打开同一管道 读取数字并打印它们 关闭两个管
  • 如何将后台作业的输出分配给 bash 变量?

    我想在 bash 中运行后台作业并将其结果分配给一个变量 我不喜欢使用临时文件 并且希望同时运行多个类似的后台任务 root root var echo hello world root root echo var hello world
  • 配置:错误:无法运行C编译的程序

    我正在尝试使用 Debian Wheezy 操作系统在我的 Raspberry Pi 上安装不同的软件 当我运行尝试配置软件时 我尝试安装我得到此输出 checking for C compiler default output file
  • linux下写入后崩溃

    如果我使用 write 将一些数据写入磁盘上的文件会发生什么 但我的应用程序在刷新之前崩溃了 如果没有系统故障 是否可以保证我的数据最终会刷新到磁盘 如果您正在使用write 并不是fwrite or std ostream write 那

随机推荐

  • [Unity2D/3D]实用的血条制作(第二期)

    Unity2D 3D 实用的血条制作 第二期 前言 第一期我为大家介绍了一种我自己摸索出来的血条制作方法 不是很常规 在这里我为大家介绍一种比较常用的血条制作方法 利用Mask组件来制作 让我们一起来看看叭 效果如图 1 首先我们把制作血条
  • Linux网络:数据链路层

    文章目录 数据链路层 和 网络层 认识以太网 以太网帧格式 认识MAC地址 认识MTU MTU对IP UDP TCP协议的影响 ARP协议 ARP数据报的格式 DNS Domain Name System 简介 域名简介 ICMP协议 pi
  • 【Linux】文件权限

    权限分为 r 读 w 写 x 执行 文件可以属于某个人也可以属于某个群体 由此可划分出三种 文件所有者 所属用户组 其他人 其他人指的是 既不是文件所有者且也不所属用户组中的用户 liuquan localhost ls l 总用量 0 r
  • CH8-HarmonyOS流转架构解析

    文章目录 前言 目标 核心概念 流转架构特性 Ability的调度 流转应用场景 流转架构 核心模块 跨端迁移关键流程 多端协同关键流程 分布式任务调度 连接远程PA 启动远程FA PA 迁移FA 接口IAbilityContinuatio
  • Android强大的图表开源——MPAndroidChart

    介绍 在APP开发中遇到图表的样式 一般我们要先查询GitHub上比较火的开源框架 这种图标应用广泛 统计 游戏统计 人际关系图等等 用到今天的这个框架MPAndroidChart 点击查看GitHub 一个可以拖动缩放的图表库 包含曲线图
  • 求整数的位数及各位数字之和 (15 分)

    7 5 求整数的位数及各位数字之和 15 分 对于给定的正整数N 求它的位数及其各位数字之和 输入格式 输入在一行中给出一个不超过10 9 的正整数N 输出格式 在一行中输出N的位数及其各位数字之和 中间用一个空格隔开 输入样例 321 输
  • 【Docker】Docker API的使用

    1 通过实训平台进入到操作系统界面 在 后输入vi usr lib systemd system docker service命令 进入编译模式 然后按i 小写 键 修改代码 usr bin dockerd current H tcp 0
  • 创建一维数组,长度为20,元素索引值为索引的二倍,奇数为负偶数为正,然后对数组排序

    import java util Arrays public class ArrayCreate public static void main String args int a new int 20 for int i 0 i lt 2
  • 单屏播放asf和vga文件的教学视频

    在自己的电脑上播放三分屏教学视频时 总觉得左边那两个小屏幕太占位置 还有右上方的小屏幕的播放进度条太短而无法精确拖放 虽然不是很懂HTML 但修改一下代码 还是单屏能播放的 下面是单屏播放asf和vga文件的设置 1 文件夹结构 index
  • CSS 实现七彩圆环loading动画

    前言 CSS 实现七彩圆环loading动画 速速来Get吧 1 实现效果 2 实现步骤 定义父容器宽度为 w 每个圆环之间的gap间距为 gap 圆环的border边框宽为 border root border 5px gap 30px
  • Java小练习——图书管理系统

    目录 一 图书管理系统应具备的功能 二 简单分析如何实现该系统 三 框架图 四 代码实现过程及简析 1 Book类 简析 2 BookShelf类 简析 3 IOperation接口 3 1 AddOperation类 3 2 Borrow
  • 离散事件模型

    离散事件模型通常需要用到队列和线性表 典型的例子是银行业务的模拟 本文参考的是严蔚敏的 数据结构 过程如下 用四个队列表示银行的四个窗口 用一个有序链表存储到达事件和离开事件 在初始化函数里面先初始化四个队列和一个链表 并且产生一个到达事件
  • 解决Eclipse添加新server时无法选择Tomcat7.0

    解决Eclipse添加新server时无法选择Tomcat7 0 新添加tomcat时 出现如下图情况 解决方法 这时打开工作空间目录下的 metadata plugins org eclipse core runtime settings
  • 面试题13. 机器人的运动范围(java+python)

    地上有一个m行n列的方格 从坐标 0 0 到坐标 m 1 n 1 一个机器人从坐标 0 0 的格子开始移动 它每次可以向左 右 上 下移动一格 不能移动到方格外 也不能进入行坐标和列坐标的数位之和大于k的格子 例如 当k为18时 机器人能够
  • 高级快速读入

    namespace fastIO define BUF SIZE 100000 fread gt read bool IOerror 0 inline char nc static char buf BUF SIZE p1 buf BUF
  • 考勤系统需求分析(软件工程)

    前言 随着企业人事管理的日趋复杂和企业人员的增多 企业的考勤管理变得越来越复杂 有一个比较完善的考勤管理系统显得是如此的重要 考勤管理系统是使用计算机管理方式代替以前手工处理的工作 应用计算机技术和通信技术建立一个高效率的 无差错的考勤管理
  • javascript 算法_JavaScript中的算法

    javascript 算法 The word Algorithms or Algo would impact fear in anyone who isn t really strong in maths like me Well toda
  • 2023年无人航空系统与航空航天国际会议(ICUASA 2023)

    2023年无人航空系统与航空航天国际会议 ICUASA 2023 重要信息 会议网址 www icuasa org 会议时间 2023年2月18 20日 召开地点 中国广州 截稿时间 2023年12月30日 录用通知 投稿后2周内 收录检索
  • 事物有哪些特性 ?MySQL 如何保证事物的四大特性 ?

    目录 1 事物有哪些特性 2 MySQL 如何保证事物的四大特性 3 事物的隔离级别 1 事物有哪些特性 1 1 何为事物 事物就是把一件事情的多个步骤 多个操作 打包成一个步骤 一个操作 其中任意一个步骤执行失败 都会进行回退 使影响降到
  • Linux df -h 显示磁盘空间满,但实际未占用满——问题分析

    问题现象 工作中遇到一个问题 在 TX2 系统上 告警提示磁盘空间不够 如图所示 wohu wohu df h Filesystem Size Used Avail Use Mounted on dev root 28G 28G 0 100