Linux 核心--10.文件系统( 三 )


Timestamps
inode创建及最后一次被修改的时间 。
Datablocks
指向此inode描叙的包含数据的块指针 。前12个指针指向包含由inode描叙的物理块, 最后三个指针包含多级间接指针 。例如两级间接指针指向一块指针,而这些指针又指向一些数据块 。这意味着访问文件尺寸小于或等于12个数据块的文件将比访问大文件快得多 。
EXT2 inode还可以描叙特殊设备文件 。虽然它们不是真正的文件, 但可以通过它们访问设备 。所有那些位于/dev中的设备文件可用来存取Linux设备 。例如mount程序可把设备文件作为参数 。


9.1.2EXT2 超块
超块中包含了描叙文件系统基本尺寸和形态的信息 。文件系统管理器利用它们来使用和维护文件系统 。通常安装文件系统时只读取数据块组0中的超块,但是为了防止文件系统被破坏, 每个数据块组都包含了复制拷贝 。超块包含如下信息:


Magic Number
文件系统安装软件用来检验是否是一个真正的EXT2文件系统超块 。当前EXT2版本中为0xEF53 。
Revision Level
这个主从修订版本号让安装代码能判断此文件系统是否支持只存在于某个特定版本文件系统中的属性 。同时它还是特性兼容标志以帮助安装代码判断此文件系统的新特性是否可以安全使用 。
Mount Count and Maximum Mount Count
系统使用它们来决定是否应对此文件系统进行全面检查 。每次文件系统安装时此安装记数将递增,当它等于最大安装记数时系统将显示一条警告信息“maxumal mount count reached, running e2fsck is recommended” 。
Block Group Number
超块的拷贝 。
Block Size
以字节记数的文件系统块大小,如1024字节 。
Blocks per Group
每个组中块数目 。当文件系统创建时此块大小被固定下来 。
Free Blocks
文件系统中空闲块数 。
Free Inodes
文件系统中空闲Inode数 。
First Inode
文件系统中第一个inode号 。EXT2根文件系统中第一个inode将是指向"/"目录的目录入口 。

9.1.3EXT2 组标志符
每个数据块组都拥有一个描叙它结构 。象超块一样,所有数据块组中的组描叙符被复制到每个数据块组中以防文件系统崩溃 。每个组描叙符包含以下信息:




Blocks Bitmap
对应此数据块组的块分配位图的块号 。在块分配和回收时使用 。
Inode Bitmap
对应此数据块组的inode分配位图的块号 。在inode分配和回收时使用 。
Inode Table
对应数据块组的inode表的起始块号 。每个inode用下面的EXT2 inode结构来表示 。
Free blocks count, Free Inodes count, Used directory count
组描叙符放置在一起形成了组描叙符表 。每个数据块组在超块拷贝后包含整个组描叙符表 。EXT2文件系统仅使用第一个拷贝(在数据块组0中) 。其它拷贝都象超块拷贝一样用来防止主拷贝被破坏 。


9.1.4EXT2 目录



图9.3 EXT2目录


在EXT2文件系统中目录是用来创建和包含文件系统中文件存取路径的特殊文件 。图9.3给出了内存中的目录入口布局 。

目录文件是一组目录入口的链表,它们包含以下信息:


inode
对应每个目录入口的inode 。它被用来索引储存在数据块组的Inode表中的inode数组 。在图9.3中file文件的目录入口中有一个对inode号11的引用 。
name length
以字节记数的目录入口长度 。
name
目录入口的名称
每个目录的前两个入口总是"."和".." 。它们分别表示当前目录和父目录 。


9.1.5在EXT2文件系统中搜寻文件
Linux文件名的格式与Unix类似,是一系列以"/"隔开的目录名并以文件名结尾 。/home/rusling/.cshrc中/home和/rusling都是目录名而文件名为.cshrc 。象Unix系统一样,Linux并不关心文件名格式本身,它可以由任意可打印字符组成 。为了寻找EXT2文件系统中表示此文件的inode,系统必须将文件名从目录名中分离出来 。

推荐阅读