基本概念
首先讲下 inode 和块的基本概念. 在 Linux 系统中, 文件由元数据和数据块组成. 数据块就是多个连续性的扇区 (sector), 扇区是文件存储的最小单位(每个 512 字节). 块(block) 的大小, 最常见的是 4KB, 也就是连续 8 个 sector 组成, 存储文件数据和目录数据. 而元数据用来记录文件的创建者, 创建日期, 大小等, 这种存储文件元数据信息的区域叫做 inode, 即索引节点.
由于 inode 也是用来存储文件相关属性信息的, 所以也会消耗硬盘空间. 具体包含的信息有 inode 号, 文件的字节数, User ID,Group ID, 读, 写, 执行权限, 时间戳(共有三个: ctime 指 inode 上一次变动的时间, mtime 指文件内容上一次变动的时间, atime 指文件上一次打开的时间), 链接数(软硬链接), 数据 block 的位置, 注意没有文件名.
在硬盘格式化的时候, 操作系统就会将硬盘分为两个区, 即数据区和 inode 区. 每个 inode 节点的大小一般为 128B 或者 256B,inode 的总数在格式化文件系统的时候就已经确定.
另外还有几个概念了解一下:
inode Bitmap: 即 inode 位图, 用二进制的方式记录了 inode 的使用情况, 比如 inode 是否空闲等.
Block Bitmap: 即块位图, 同 Inode Bitmap, 用二进制方式记录了块的使用情况. 当查找或创建文件时, 会扫描此位图来寻找空闲的 inode 号对应的块.
super block: 超级块包含了该硬盘或分区上的文件系统的整体信息, 如文件系统的大小等.
dentry: 在内核中起到了连接不同的文件对象 inode 的作用, 进而起到了维护文件系统目录树的作用. dentry 是一个纯粹的内存结构, 由文件系统在提供文件访问的过程中在内存中直接建立. dentry 中包含了文件名, 文件的 inode 号等信息.
下图为文件系统 inode 区 block 区图:
文件的查找, 创建, 删除原理
接下来对文件的查找, 创建, 删除原理三个方面来对 inode 和块的理解.
文件的查找: 比如要查找 / var/log/message
文件的创建: 比如要创建 / backup/test.txt(前提 backup 目录存在)
文件的删除: 删除 / backup/test.txt
查找
首先根目录 (目录也是个文件, 不是容器! 也可以理解为路径的映射表) 会自引用. 找到 inode 表中对应的条目.(暂且把 inode 表中 inode 号和其对应的块信息成为条目)
inode 表中对应的信息指向根目录对应的块, 其中有 var 目录对应的信息和 inode 号.
系统根据 var 目录 inode 号回头找到 inode 表中 var 目录其对应的条目.
根据 var 目录对应的块信息找到对应的块, 其中有 log 目录对应的信息和 inode 号.
系统又根据 log 目录 inode 号在 inode 表中找到其对应的条目.
根据 log 目录对应的块信息找到对应的块, 其中有 messages 文件.
根据 messages 文件的 inode 号在 inode 表中找到其对应的条目.
最后系统根据 messages 对应的条目信息告诉我们 messages 文件对应了多少的块, 最后给我们呈现的就是所看到的数据.
创建
首先扫描 inode 位图, 找空闲的 inode 号, 找到之后占用.
根目录自引用找到 inode 表中对应的条目, 并根据条目找到对应的块.
依据根目录对应的块中 backup 目录对应的 inode 号, 回头找到 inode 表中条目.
inode 表中条目又找到对应的块, 在这个块的 dentry 中新建了一个文件 test.txt.
然后在最开始扫描占用的 inode 号给到此 test.txt 文件.
当要存数据给 test.txt 文件时, 会进行如下:
系统扫描块位图(加速查找磁盘空闲块, 记录是否空闲等), 找到空闲块, 分配大于数据大小的块, 最后再回收(避免磁盘碎片). 比如要创建 10k 大小的 test.txt 文件, 一个块 4k, 只需要 3 个块, 系统分配 4 个或者多于, 最后再去把这多余的块分配到空闲块中等待使用.
删除
当要删除一个文件时, 其实就是把其使用的 block 位图标记为空闲, inode 位图的相关位置成空, 相当于不被占用, 系统就认为此文件删除. 但是数据还在, 在下次创建文件时, 就可覆盖原已清空 block 位图和 inode 位图的文件的数据.
文件粉粹也只是使用一些随机数据填充进原来文件的数据块中, 导致文件难以恢复.
以上
来源: http://www.bubuko.com/infodetail-2687086.html