磁盘清理了文件怎么空间还是不变,磁盘清理会将所有文件都清理了吗

首页 > 实用技巧 > 作者:YD1662024-01-07 00:53:35

虽然这里通过清空文件暂时解决了磁盘未释放的问题,但是从根本上我们最好还是要避免这种问题的出现,比如协调好多进程间对于文件操作的时序问题,比如等到进程A结束了对文件的访问,进程B再去删除文件。

3 原因分析

下面我们从操作系统层面简单分析一下出现这种现象的原因:

在 Linux 文件系统中,一个文件由目录项、索引节点和数据块三部分组成。

磁盘清理了文件怎么空间还是不变,磁盘清理会将所有文件都清理了吗(9)

既然文件数据都存储在 block 中,那么我们指定读取某个文件数据的时候,操作系统就需要知道这个文件存储在哪个 block 上 ,而文件的数据存放位置信息被存放到了 inode 上,所以我们先要找到这个文件对应的inode号。使用stat命令可以查看inode信息:

磁盘清理了文件怎么空间还是不变,磁盘清理会将所有文件都清理了吗(10)

以我们访问上面的test.bin文件为例,会经过以下步骤:

1)系统在目录项中根据文件名找到对应的 inode 号

2)通过 inode 号获取到 inode 信息

3)根据 inode 信息找到文件数据所在的 block ,读出数据

inode 跟数据块一样会消耗硬盘空间,所以硬盘格式化的时候,系统自动将硬盘分成2个区域:

了解了文件的存储结构之后,我们来看下对文件执 rm 行删除操作之后,这两个部分会发生什么。

文件被删除的时候,文件对应的 inode 就被删除掉了,而文件的数据部分在 inode 被清除掉之后,就会被覆盖并写入新的内容。但是如果文件在删除的时候是被打开的状态,比如有一个进程正在使用该文件,文件被进程锁定或者有进程一直在向这个文件写数据等,那么进程依旧可以读取该文件,系统就会认为该文件并未删除,导致磁盘空间一直被占用。

上一页123末页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.