1、删除命令(一个进程)使用open操作获得父目录文件对象
2、通过iget增加 目录文件的索引节点对象计数3、读取目录文件数据
将目录文件数据转化为目录项对象由于目录项包含文件的索引节点 , 类似的 , 需要通过iget增加文件的索引节点对象计数4、删除目录的目录项5、减少文件索引节点对象的硬链接计数i_nlink6、通过iput结束对文件索引节点对象的操作 , 使用计数i_count减一
判断i_count是否为零 , 如果为零 , 则释放内存然后 , 判断i_nlink是否为零 , 如果为零 , 则释放磁盘空间7、通过iput结束对目录索引节点对象的操作 。
总结
回头来看遇到的问题 , 其实可以从两个角度来理解:
索引与数据
文件系统与文件、磁盘管理与文件、进程管理与文件 , 最核心的都是文件的索引 , 而不是文件的数据 。把数据和索引分开是理解文件系统的关键 。
一个数据构建了各式各样的索引 , 只有索引全部失效 , 此时数据才失去意义 , 此时才能释放
缓存策略
由于操作系统使用 Write back 的策略 , 意味着只有先释放内存 , 才有可能释放磁盘 。
Why lsof ?
从上面的模型可以很清楚的理解 , 因为目录已经没有索引到文件了 , 但是打开文件还有索引到文件 , 所以不能立刻释放磁盘空间 。
为什么 lsof 可以找到已删除未释放的文件呢?
lsof , 顾名思义:list open files , 该命令的原理就是查找打开文件的列表 , 因此可以找到已删除未释放的文件 。
以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!
「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助:- mac和win都支持的u盘格式 苹果u盘格式读取
- java读取apollo配置 java判断文件夹是否存在该文件
- struts2和springMVC的区别 struts2配置文件详解
- 教你crontab定时执行shell脚本 crontab安装配置文件
- 文件或目录损坏且无法读取方法 input上传文件获取内容
- 移动硬盘无法读取的解决方法 移动硬盘文件或目录损坏无法读取
- u盘手机连接线 ipad怎么读取u盘
- 读取车牌门禁系统原理
- thinkphp数据库配置文件在哪 ThinkPHP配置文件的方法
- u盘无法访问怎么办 U盘无法读取怎么办