加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_开封站长网 (http://www.0378zz.com/)- 科技、AI行业应用、媒体智能、低代码、办公协同!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

从lsof开始,深入研究Linux虚拟文件系统

发布时间:2021-05-28 17:57:37 所属栏目:Linux 来源:互联网
导读:有时会出现这样的情况,磁盘空间显示已经被占满,但是在查看磁盘的具体文件占用情况时,发现磁盘仍然有很大的空余空间。 1.执行df命令查看磁盘使用情况,发现磁盘已经满了。 -bash-4.2$df-Th FilesystemTypeSizeUsedAvailUse%Mountedon /dev/vda1ext430G30

有时会出现这样的情况,磁盘空间显示已经被占满,但是在查看磁盘的具体文件占用情况时,发现磁盘仍然有很大的空余空间。

1.执行df命令查看磁盘使用情况,发现磁盘已经满了。

-bash-4.2$ df -Th  

Filesystem     Type      Size  Used Avail Use% Mounted on  

/dev/vda1      ext4       30G    30G 0      100% /  

devtmpfs       devtmpfs  489M     0  489M   0% /dev  

tmpfs          tmpfs     497M     0  497M   0% /dev/shm  

tmpfs          tmpfs     497M   50M  447M  11% /run  

tmpfs          tmpfs     497M     0  497M   0% /sys/fs/cgroup 

2.执行 du 命令查看各个目录的磁盘占用情况,把各个目录文件的大小相加,发现并没有占满磁盘,有10多G空间莫名失踪。

-bash-4.2$ du -h --max-depth=1 /home16M /home/logs11G /home/serverdog11G /home 

3.为何会出现这样的情况呢?

因为虽然文件已被删除,但是一些进程仍然打开这些文件,因此其占用的磁盘空间并没有被释放。执行lsof 命令显示打开已删除的文件。将有问题的进程重启(或,清空),磁盘空间就会得到释放。

-bash-4.2# lsof | grep deletemysqld     2470         mysql    4u      REG              253,1           0     523577 /var/tmp/ibfTeQFn (deleted)  

mysqld     2470         mysql    5u      REG              253,1           0     523579 /var/tmp/ibaHcIdW (deleted)  

mysqld     2470         mysql    6u      REG              253,1           0     523581 /var/tmp/ibLjiALu (deleted)  

mysqld     2470         mysql    7u      REG              253,1           0     523585 /var/tmp/ibCFnzTB (deleted)  

mysqld     2470         mysql   11u      REG              253,1           0     523587 /var/tmp/ibCjuqva (deleted) 

那么,Linux 的文件系统,到底为什么这么设计呢?要了解这些,就要先弄清楚并不容易,下面将从一些基本概念入手,一步步将这些梳理清楚:

 什么是虚拟文件系统(VFS:virtual filesystem)?

 什么是通用文件模型?

 超级块对象(superblock object)

 索引节点对象(inode object)

 文件对象(file object)

 目录项对象(dentry object)

 文件的概念

 文件的表达

 内存表达

 磁盘表达

 目录树的构建

 软链接 vs 硬链接

 文件 & 磁盘管理

 索引节点状态

 文件 & 进程管理

 操作:

打开&删除

虚拟文件系统(virtual filesystem)

下图显示了 Linux 操作系统中负责文件管理的基本组件。上半区域为用户模式,下半区域为内核模式。应用程序使用标准库libc来访问文件,库将请求映射到系统调用,以便进入内核模式。

(编辑:开发网_开封站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读