Linux中的Ext2文件系统详解
之所以要写Ext2文件系统,是因为最近一直在看Hadoop,发现HDFS和Ext2文件系统非常类似,加上以前已经了解Ext2文件系统,所以,打算先把Ext2的思想梳理一遍。
1 Ext2综述在Linux操作系统中,一切皆文件。Linux文件最重要的特性:文件权限,文件属性和文件数据。其中文件权限如rwx,文件属性如文件的大小文件所有者等,文件数据是指文件中存放的数据信息。
在Ext2文件系统中,它们不是存放在一起的,而是分开存放,文件权限和属性存放在inode中,文件数据存放在data block中,另外Ext2文件系统中还有一个super block用于存放文件系统的整体信息。
Ext2文件系统一开始就把inode,data block,以及super block规划好了,除非格式化,否则不在变动。每一个inode和data block都有一个唯一编号与之对应。
2 super blocksuper block用于记录整个文件系统的基本情况,主要记录一下内容:
block 和inode的总量 已经使用了多少block和inode 文件系统中还剩余多少block和inode block和inode的大小
通常情况下,super block的大小为128bytes。
3 inodeinode用于记录文件的属性,一个文件占用一个inode,同时在inode中记录存放文件数据的data block号码。inode中存放如下信息:
1. 文件的权限rwx
2. 文件所有者与所在组
3. 文件的大小
4. 最近修改时间
5. 存放文件数据的data block编号
一个inode的大小固定为128bytes,在读取文件的时候通常情况下就是会首先找到文件对应的inode,然后通过inode进行一系列操作。
4 data block文件数据的实际存放位置,一个文件至少占用一个data block(一个data block中最多也只能存放一个文件),如果文件太大的话,可能会占用多个data block,一个data Block的大小通常为4KB。
因此在划分data block时,其大小非常关键,如果data block过小,可能有利用小文件的存放,但是对与大文件而言,将会占用更多的data block,inode中需要划分更多区域去记录data block,导致文件系统读写效率降低;如果data block过大,可能有利用大文件的存放,但是对于小文件而言,由于一个data block中最多存放一个文件,这样可能会造成空间浪费问题。
文件与inode 和data block的关系假设文件对应的inode是inode3,从图中可以看出,文件数据的实际存放位置为data block1,3,8,inode负责记录这些data block的编号,这种数据访问的方式被称为索引式文件系统。
读取文件流程:
1获取文件inode的位置,读取inode中的数据,获取文件权限,检查该用户是否有r权限,如果有进行一下步骤,如果没有,流程结束,文件内容不予显示;
2 通过inode中记录的data block的编号,一次读取对应data block上的数据,完成了对文件的读取。
5 目录与inode 和data block的关系目录也是文件,因此,因此其存放方式与文件的存放方式一样,不停的是,目录的data block中存放的是子目录/文件的inode所对应的位置。
实际上,每次读取文件,每次都是从/根目录进行的,以此查找,最终找到目标文件的inode,然后找到文件数据的存放位置,读取,获取数据。
下一篇: iOS 11导航栏高度发生变化的问题