linux ext2系统.docx

上传人:ni****g 文档编号:546443885 上传时间:2024-02-05 格式:DOCX 页数:70 大小:126.36KB
返回 下载 相关 举报
linux ext2系统.docx_第1页
第1页 / 共70页
linux ext2系统.docx_第2页
第2页 / 共70页
linux ext2系统.docx_第3页
第3页 / 共70页
linux ext2系统.docx_第4页
第4页 / 共70页
linux ext2系统.docx_第5页
第5页 / 共70页
点击查看更多>>
资源描述

《linux ext2系统.docx》由会员分享,可在线阅读,更多相关《linux ext2系统.docx(70页珍藏版)》请在金锄头文库上搜索。

1、请先了解linux vfs Ext2的一般特征 前面对虚拟文件系统VFS的讨论就告一段落了,VFS主要是提供一个系统调用接口,然后将相关文件系统对象与具体的文件系统串联起来。从本文开始,我们将选择一个具体的文件系统进行研究,这个文件系统就是第二扩展文件系统(Ext2)。为啥要特别学习这个东西呢?因为ext2是 Linux所固有的,事实上已在每个Linux系统中得以使用,因此我们自然要对Ext2进行讨论。此外,Ext2在对现代文件系统的高性能支持方面也显 示出很多良好的实践性。固然,Linux支持的其他文件系统有很多有趣的特点,但比较扩展文件系统是Linux中的老大,头头,所以我们并不对其他文件

2、系 统一一讨论了。类Unix操作系统使用多种文件系统。尽管所有这些文件系统都有少数POSIX API(如state())所需的共同的属性子集,但每种文件系统的实现方式是不同的。Linux的第一个版本是基于MINIX文件系统的。当Linux成熟时,引入了扩展文件系统(Extended Filesystem, Ext FS),它包含了几个重要的扩展但提供的性能不令人满意。在1994年引入了第二扩展文件系统(Ext2);它除了包含几个新的特点外,还相当高性能和稳 定,Ext2及它的下代文件系统Ext3、e3fs等已成为广泛使用的Linux文件系统。Ext2文件系统具有以下一般特点:1、当创建Ext2

3、文件系统时,系统管理员可以根据预期的文件平均长度来选择最佳的块大小(从1024B4096B)。例如,当文件的平均长度小于几千字节时,块的大小为1024B是最佳的,因为这会产生较少的内部碎片也就是文件长度与存放块的磁盘分区有较少的不匹配。另一方面,大的块对于 大于几千字节的文件通常比较合合适,因为这样的磁盘传送较少,因而减轻了系统的开销。2、当创建Ext2文件系统时,系统管理员可以根据在给定大小的分区上预计存放的文件数来选择给该分区分配多少个索引节点。这可以有效地利用磁盘的空间。3、文件系统把磁盘块分为组。每组包含存放在相邻磁道上的数据块和索引节点。正是这种结构,使得可以用较少的磁盘平均寻道时间

4、对存放在一个单独块组中的文件并行访问。4、在磁盘数据块被实际使用之前,文件系统就把这些块预分配给普通文件。因此当文件的大小增加时,因为物理上相邻的几个块已被保留,这就减少了文件的碎片。5、支持快速符号链接。如果符号链接表示一个短路径名(小于或等于60个字符),就把它存放在索引节点中而不用通过由一个数据块进行转换。此外,Ext2还包含了一些使它既健壮又灵活的特点:1、文件更新策略的谨慎实现将系统崩溃的影响减到最少。我们只举一个例子来体现这个优点:例如,当给文件创建一个硬链接时,首先增加磁盘索引节点中 的硬链接计数器,然后把这个新的名字加到合适的目录中。在这种方式下,如果在更新索引节点后而改变这个

5、目录之前出现一个硬件故障,这样即使索引节点的计数 器产生错误,但目录是一致的。因此,尽管删除文件时无法自动收回文件的数据块,但并不导致灾难性的后果。如果这种处理的顺序相反(更新索引节点前改变目 录),同样的硬件故障将会导致危险的不一致,删除原始的硬链接就会从磁盘删除它的数据块,但新的目录项将指向一个不存在的索引节点。如果那个索引节点号以 后又被另外的文件所使用,那么向这个旧目录的写操作将毁坏这个新的文件。2、在启动时支持对文件系统的状态进行自动的一致性检查。这种检查是由外部程序e2fsck完成的,这个外部程序不仅可以在系统崩溃之后被激活,也 可以在一个预定义的文件系统安装数(每次安装操作之后对

6、计数器加1)之后被激活,或者在自从最近检查以来所花的预定义时间之后被激活。3、支持不可变(immutable)的文件(不能修改、删除和更名)和仅追加(append-only)的文件(只能把数据追加在文件尾)。4、既与Unix System V Release 4(SVR4)相兼容,也与新文件的用户组ID的BSD语义相兼容。在SVR4中,新文件采用创建它的进程的用户组ID;而在BSD中,新文件继承包含它 的目录的用户组ID。Ext2包含一个安装选项,由你指定采用哪种语义。即使Ext2文件系统是如此成熟、稳定的程序,也还要考虑引入另外几个负面特性。目前,一些负面特性已新的文件系统或外部补丁避免了。

7、另外一些还仅仅处于计划阶段,但在一些情况下,已经在Ext2的索引节点中为这些特性引入新的字段。最重要的一些特点如下:块片(block fragmentation) 系统管理员对磁盘的访问通常选择较大的块,因为计算机应用程序常常处理大文件。因此,在大块上存放小文件就会浪费很多磁盘空间。这个问题可以通过把几个文件存放在同一块的不同片上来解决。透明地处理压缩和加密文件 这些新的选项(创建一个文件时必须指定)将允许用户透明地在磁盘上存放压缩和(或)加密的文件版本。逻辑删除 一个undelete选项将允许用户在必要时很容易恢复以前已删除的文件内容。日志 日志避免文件系统在被突然卸载(例如,作为系统崩溃的

8、后果)时对其自动进行的耗时检查。实际上,这些特点没有一个正式地包含在Ext2文件系统中。有人可能说Ext2是这种成功的牺牲品;直到几年前,它仍然是大多数Linux发布公司采用的首选文件系统,每天有成千上万的用户在使用它,这些用户会对用其他文件系统来代替Ext2的任何企图产生质疑。Ext2中缺少的最突出的功能就是日志,日志是高可用服务器必需的功能。为了平顺过渡,日志没有引入到Ext2文件系统;但是,我们在后面 “Ext3文件系统”中会讨论,完全与Ext2兼容的一种新文件系统已经创建,这种文件系统提供了日志。不真正需要日志的用户可以继续使用良好而老式的Ext2文件系统,而其他用户可能采用这种新的文

9、件系统。现在发行的大部分系统采用Ext3作为标准的文件系统。Ext2磁盘数据结构 要学习ext2文件系统,首先要学习ext2的磁盘设计,也就是说,ext2将一个磁盘分区格式化成一个什么样子。本文就来介绍一下一个ext2文件系统的磁盘分区布局,重点关注它的数据结构。任何Ext2分区中的第一个块从不受Ext2文件系统的管理,因为这一块是为分区的引导扇区所保留的。Ext2分区的其余部分被分成块组(block group),每个块组的分布图如图所示。正如你从图中所看到的,一些数据结构正好可以放在一块中,而另一些可能需要更多的块。在Ext2文件系统中的所有块组大小相同并被顺序存放,因此,内核可以从块组的

10、整数索引很容易地得到磁盘中一个块组的位置:由于内核尽可能地把属于同一个文件的数据块存放在同一块组中,所以块组减少了文件碎片。块组中的每个块包含下列信息之一:1.文件系统的超级块的一个拷贝2.一组块组描述符的拷贝3.一个数据块位图4.一个索引节点位图5.一个索引节点表6.属于文件的一大块数据,即数据块如果一个块中不包含任何有意义的信息,就说这个块是空闲的。从上图中可以看出,超级块与组描述符被复制到每个块组中。注意:块组由很多块组成.其实呢,只有块组0中所包含超级块和组描述符才由内核使用,而其余的超级块和组描述符都保持不变;事实上,内核甚至不考虑它们。当e2fsck程序对Ext2文件系统的状态执行

11、一致性检查时,就引用存放在块组0中的超级块和组描述符,然后把它们拷贝到其他所有的块组中。如果出现数据损坏,并且块组0 中的主超级块和主描述符变为无效,那么,系统管理员就可以命令e2fsck引用存放在某个块组(除了第一个块组)中的超级块和组描述符的旧拷贝。通常情况 下,这些多余的拷贝所存放的信息足以让e2fsck把Ext2分区带回到一个一致的状态。那么有多少块组呢?这取决于分区的大小和块的大小。其主要限制在于块位图,因为块位图必须存放在一个单独的块中。块位图用来标识一个组中块的占用和 空闲状况。所以,每组中至多可以有8b个块,b是以字节为单位的块大小。例如,一个块是 1024 Byte,那么,一

12、个块的位图就有8192个位,一个块组正好就对应8192个块(位图中的一个bit描述一个块)。举例说明,让我们考虑一下32GB的Ext2分区,换算成KB就是33554432,块的大小为4KB。在这种情况下,每个4KB的块位图描述 32KB个数据块,即128MB。因此,最多需要33554432 / 4096 * 32 = 256个块组。显然,块越大,块组数越小。磁盘超级块Ext2在磁盘上的超级块存放在一个ext2_super_block结构中,它的字段在下面列出(为了确保Ext2和Ext3文件系统之间的兼容性,ext2_super_block数据结构包含了一些Ext3特有的字段,我们省略号省了)(

13、注:它与应VFS中的super_block):struct ext2_super_block _le32 s_inodes_count; /* 索引节点的总数 */ _le32 s_blocks_count;/* 块总数(所有的块) */ _le32 s_r_blocks_count;/* 保留的块数 */ _le32 s_free_blocks_count;/* 空闲块数 */ _le32 s_free_inodes_count;/* 空闲索引节点数 */ _le32 s_first_data_block;/* 第一个使用的块号(总为1) */ _le32 s_log_block_size;

14、 /* 块的大小 */ _le32 s_log_frag_size; /* 片的大小 */ _le32 s_blocks_per_group; /* 每组中的块数 */ _le32 s_frags_per_group; /* 每组中的片数 */ _le32 s_inodes_per_group; /* 每组中的索引节点数 */ _le32 s_mtime;/* 最后一次安装操作的时间 */ _le32 s_wtime;/* 最后一次写操作的时间 */ _le16 s_mnt_count;/* 被执行安装操作的次数 */ _le16 s_max_mnt_count;/* 检查之前安装操作的次数 */ _le16 s_magic; /* 魔术签名 */ _le16 s_state;/* 文件系统状态标志 */ _le16 s_errors;/* 当检测到错误时的行为 */ _le16 s_minor_rev_level;/* 次版本号 */ _le32 s_lastcheck;/* 最后一次检查的时间 */ _le32 s_checkinterval;/* 两次检查之间的时间间隔 */ _le32 s_creator_os;/* 创建文件系统的操作系统 */ _le32 s_re

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号