手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>操作系统>Linux>列表

Linux 核心--10.文件系统

来源:互联网 作者:west263.com 时间:2008-02-23
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!


图9.1给出了占用一系列数据块的EXT2文件系统的布局。对文件系统而言文件仅是一系列可读写的数据块。文件系统并不需要了解数据块应该放置到物理介质上什么位置,这些都是设备驱动的任务。无论何时只要文件系统需要从包含它的块设备中读取信息或数据,它将请求底层的设备驱动读取一个基本块大小整数倍的数据块。EXT2文件系统将它所使用的逻辑分区划分成数据块组。每个数据块组将那些对文件系统完整性最重要的信息复制出来, 同时将实际文件和目录看作信息与数据块。为了发生灾难性事件时文件系统的修复,这些复制非常有必要。以下一节将着重描叙每个数据块组的内容。 


9.1.1  The EXT2 Inode





图9.2 EXT2 Inode 

在EXT2文件系统中inode是基本块;文件系统中的每个文件与目录由唯一的inode来描叙。每个数据块组的EXT2 inode被保存在inode表中, 同时还有一个位图被系统用来跟踪已分配和未分配的inode。图 9.2给出了EXT2 inode的格式,它包含以下几个域: 


mode 
它包含两类信息;inode描叙的内容以及用户使用权限。EXT2中的inode可以表示一个文件、目录、符号连接、块设备、字符设备或FIFO。 
Owner Information 
表示此文件或目录所有者的用户和组标志符。文件系统根据它可以进行正确的存取。 
Size 
以字节计算的文件尺寸。 
Timestamps 
inode创建及最后一次被修改的时间。 
Datablocks 
指向此inode描叙的包含数据的块指针。前12个指针指向包含由inode描叙的物理块, 最后三个指针包含多级间接指针。例如两级间接指针指向一块指针,而这些指针又指向一些数据块。这意味着访问文件尺寸小于或等于12个数据块的文件将比访问大文件快得多。 
EXT2 inode还可以描叙特殊设备文件。虽然它们不是真正的文件, 但可以通过它们访问设备。所有那些位于/dev中的设备文件可用来存取Linux设备。例如mount程序可把设备文件作为参数。 


9.1.2  EXT2 超块
超块中包含了描叙文件系统基本尺寸和形态的信息。文件系统管理器利用它们来使用和维护文件系统。 通常安装文件系统时只读取数据块组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.3  EXT2 组标志符
每个数据块组都拥有一个描叙它结构。象超块一样,所有数据块组中的组描叙符被复制到每个数据块组中以防文件系统崩溃。每个组描叙符包含以下信息: 

  


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.4  EXT2 目录



图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,系统必须将文件名从目录名中分离出来。 
我们所需要的第一个inode是根文件系统的inode,它被存放在文件系统的超块中。为读取某个EXT2 inode, 我们必须在适当数据块组的inode表中进行搜寻。如果根inode号为42则我们需要数据块组0 inode表的第42个inode。此根inode对应于一个EXT2目录,即根inode的mode域将它描叙成目录且其数据块包含EXT2目录入口。home目录是许多目录的入口同时此目录给我们提供了大量描叙/home目录的inode。我们必须读取此目录以找到rusling目录入口,此入口又提供了许多描叙/home/rusling目录的inode。最后读取由/home/rusling目录描叙的inode指向的目录入口以找出.cshrc文件的inode号并从中取得包含在文件中信息的数据块。 

  

9.1.6  改变EXT2文件系统中文件的大小
文件系统普遍存在的一个问题是碎块化。一个文件所包含的数据块遍布整个文件系统,这使得对文件数据块的顺序访问越来越慢。EXT2文件系统试图通过分配一个和当前文件数据块在物理位置上邻接或者至少位于同一个数据块组中的新块来解决这个问题。只有在这种分配策略失败时才在其它数据块组中分配空间。 

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!