磁盘格式分析Ext2格式分析

合集下载

ext2文件的逻辑结构和物理结构的映射过程

ext2文件的逻辑结构和物理结构的映射过程

标题:深入探讨ext2文件的逻辑结构和物理结构的映射过程在计算机科学领域,文件系统是操作系统中的重要组成部分,用于管理文件的存储和检索。

而ext2文件系统是Linux操作系统中常见的文件系统之一,其结构复杂、功能强大。

在本文中,我将深入探讨ext2文件系统的逻辑结构和物理结构的映射过程,以便更好地理解这一主题。

一、理解ext2文件系统1. ext2文件系统的基本概念在开始深入讨论ext2文件系统的逻辑结构和物理结构的映射之前,需要首先理解ext2文件系统的基本概念。

ext2是Linux操作系统中常见的文件系统类型,它采用了类Unix文件系统的基本概念,包括inode、超级块、块组描述符等重要概念。

2. ext2文件系统的特点ext2文件系统具有一些独特的特点,如支持大容量的文件系统、高效地组织和管理磁盘空间、高速的文件读写性能等。

这些特点使得ext2文件系统在Linux系统中得到了广泛的应用。

二、逻辑结构和物理结构的映射过程1. 磁盘空间的组织ext2文件系统的逻辑结构和物理结构的映射过程首先涉及到磁盘空间的组织。

磁盘空间被组织成多个块组,每个块组包含若干个数据块,用于存储文件数据;同时还包含若干个inode块,用于存储文件的元数据信息。

2. inode与文件的映射在ext2文件系统中,每个文件都对应一个唯一的inode,该inode记录了文件的元数据信息,如文件大小、权限、所有者等。

逻辑上,文件可以通过inode进行标识和管理,而物理上,inode则映射到具体的磁盘块中。

3. 数据块的映射文件的实际数据则存储在数据块中。

数据块的映射过程是ext2文件系统逻辑结构和物理结构的重要部分,它涉及到磁盘空间的分配和管理,以及文件数据与磁盘块的对应关系。

三、个人观点和总结通过对ext2文件系统的逻辑结构和物理结构的映射过程进行深入探讨,我对文件系统的工作原理有了更深入的理解。

在实际应用中,对文件系统的深入理解能够帮助我们更好地进行文件管理和存储空间的优化,提高系统的性能和稳定性。

SD卡Ext2格式分区详细图解教程+分区

SD卡Ext2格式分区详细图解教程+分区

pqmagic9分区方法的优势:这个分区方法,有一定电脑基础的人都会很熟悉,就是在电脑上用pqmagic进行无损分区而已,比在手机上recover分区,或者用固件管家那些分区方式好很多,一个是速度较快,另一个最重要的是可以无损分区!不会破坏你卡上原有的数据,而是把卡剩余的空间划一块出来做新分区,这对于我这种卡上存了7g内容的而又懒得给卡备份的人来说,是最好的选择!注意,尽量采用pqmagic 9以上版本,9以下版本不支持ext分区!pqmagic9中文绿色版软件下载连接见下:/file/f7863bc968pqmagic9分区的原理,这点希望大家理解,做起来就不会懵然了:分区原理其实很简单,就是利用pqmagic软件,从你的卡上(原有的整张卡一般就是fat32格式)上切出一部分的空间,这个新切出来的空间将是空白的,没有任何格式,然后再利用pqmagic软件把这个空间格式化成ext3。

具体分区过程(这里的电脑采用的是win xp sp3系统,win 7系统没有试验过,不多说):好,下面开始正式分区教程,最好采用手机磁盘模式接电脑分区,如果用读卡器,也最好不要笔记本的读卡器(采用读卡器的筒子,直接从下面第4步开始看)。

1、首先在手机上开启未知源和usb调试模式(设置--应用程序--未知源打勾,设置--应用程序--开发--usb调试模式打勾)2、把usb线插在机箱后面的主板usb接口上!另一端对准你的小6,插进去吧3、手机屏幕亮起,选择磁盘模式连接,点击完成4、插上后等一会儿,直到你的电脑上出现了新的可移动磁盘,并且可以正常进入可移动磁盘(即你的手机tf卡)进行读写操作(如果是读卡器,注意不要误开了写保护开关),即可开始下一步5、这步很重要,请一定做一下,一定程度上避免了各种问题的出现:在你的电脑上打开我的电脑---找到新出现的可移动磁盘---右键点击之---属性--工具--开始检查---勾选第一项自动修复(可视情况勾选第二项,不过那样会非常慢),分区之前先用这个工具修复一下你的磁盘逻辑错误,可以大幅降低各种问题出现的几率,不要存在侥幸心理,卡用久了,几乎每个人都会有磁盘逻辑错误!!!6、下载上面那个pqmagic9中文绿色版,解压后是一个单独文件,直接点击运行7、稍等进入pqmagic界面,我这里是一张8g卡,所以显示7.6g是正常的,分区格式是fat32,标准的windows格式8、右键点击logical disk(是右键点击htc android phone usb device下面那个logical disk,千万别弄错了,弄错了就是格式化你的硬盘!!!郁闷,就这么半天时间我就看到居然有三个人选了对硬盘做重分区,都没带眼镜是吧?),出现菜单,选择移动/调整分区大小,点击之,,,如果没有出现移动/调整分区大小,需要事先完整格式化一下整个sd卡即可出现这个命令,不过一般就不建议用pq去分这个卡了,兼容性不太好,建议换用别的方法分区9、出现界面后,调整free space after 这里为你想要的数值,根据你的卡的大小来设定,建议不要少于256M(256M估计可供150个中小型软件使用没问题,我这里是设置了500M,我是8g卡嘛),这个数值可能不会准确,差不多就行了,同时保持free space before为0不然会有浪费,完成后点“是”10、右键点击新出现的unallocated,选择创建分区11、在出现的界面上选择“为新分区选择文件系统”,选择“linux ext3”,其他什么都不要改动(见图),特别是盘符,保持默认为“无”,不要手贱设置了一个盘符哦,然后选“是”12、点击绿色的勾,等待,如果有防火墙或杀毒软件跳出来报错,选择允许即可(见图),进度条走后即可完成,有倒计时显示的不要着急,,,完成后,点击close关闭,退出pqmagic9即可解释一下这个绿色的勾,前面你所做的操作,其实都并没有真正执行,而是被记录成了一个步骤,只有按下绿色勾后才会真正执行,所以如果前面有操作失误等情况不要紧,直接退出pqmagic9再次进入重来即可点下绿色勾后,如果有杀毒软件或防火墙报错,选择允许!这是pq在给你分区,不是病毒或木马!至此分区过程结束,我的卡上现在共有7.1g的数据区和500M的ext文件区,这个500M就是为app2sd准备的,,,用这张卡拷贝2.2的wildpuzzle rom,刷完机后,即可自动开启app2sd 系统!你的机身内存空间将前无所有的巨大无比了!!!分区后,这样检验你的成果:正确分区后的效果如下,如果你进行了上述步骤后,不确定是否正确分区,可以先拔下手机的usb线,然后过会儿再插上线,再次以磁盘模式接上电脑,用pqmagic9看一下你的sd卡,如果有显示linux ext3分区即为正确分区,如下图所示:若有不明白可查看原帖http://www.**.com/bbs/thread-623628-1-1.html,发此贴,一是方便小白轻松掌握分区,二是方便自己收藏,请大家多多支持!!。

Linux系统ext2与ext3文件系统的区别与转换

Linux系统ext2与ext3文件系统的区别与转换
ext2与ext3文件系统的区别与转换
ext2和ext3是Linux比较旧的文件系统, 在Linux 7中支持的文件系统已经是 “xfs”,但是为了知识的衔接性,也为 了更深的认识文件系统之间的差别有必 要认识一下这两个文件系统。 这两个文件系统的格式是相同的,不 同的是在ext3文件系统中在硬盘的后面 留出一块磁盘空间来存放日志(journal) 记录。
全部消失。 如果你接手一个很重要的Linux系统, 而这个Linux系统的文件系统还是很老的 ext2,而为了提高性能还要保留原来的 数据就只能使用命令tune2fs命令(在线 转换文件系统ext2→ext3)了。
除了使用“-j”选项创建ext3文件系 统之外,可以直接使用mkfs.ext3 设备名
在开机时Linux系统都会检查每个文件 系统的Valid bit,值如为1则直接挂载该 文件系统,而如果为0值,则系统会扫描 这个文件系统(硬盘分区)查找损坏的 数据,如果这个硬盘分区很大,扫描时 间会很长。 1扫描
0不扫描 由于ext3文件系统有日志机制,开机 时系统会先检查日志中的信息,检查日
创建ext3文件系统。
journal=”日志”
使用命令dumpe2fs /dev/sdc1 | more 可以看到成功创建ext3文件系统。
二、在ext3格式文件系统上,数据写 入硬盘的操作过程为: ⑴数据同样先写 入缓冲区 ① ⑵当数据写入 缓冲区 (内存) 缓冲区满时,先通知 ③ 日志 ext3 文件 ⑶通知日志之后 ② ④ 系统 数据才会写入硬盘中 日志 ⑷数据写入硬盘后,系统 再通知日志数据已经写入硬盘。
三、日志机制 在ext2和ext3中,文件系统的格式是 一样的,不一样的地方是ext2没有日志 机制,而ext3有日志机制。 对于ext2,由于它没有日志机制,在 Linux使用Valid bit标志位来记录系统在 关机之前该文件系统是否已经卸载。因 每一个文件系统都有一个自己的Valid bit 。并且,Valid bit的值为1,则表示这个 文件系统已经卸载,而其值为0,则表示 这个文件系统没有正常关机。

Ext2格式分析

Ext2格式分析

Ext2格式分析1、Ext2磁盘数据结构任何Ext2分区中的第一个块从不受Ext2文件系统的管理,因为这一块是为分区的引导扇区所保留的。

Ext2分区的其余部分被分成块组(block group),每个块组的分布图如图所示。

正如你从图中所看到的,一些数据结构正好可以放在一块中,而另一些可能需要更多的块。

在Ext2文件系统中的所有块组大小相同并被顺序存放,因此,内核可以从块组的整数索引很容易地得到磁盘中一个块组的位置:由于内核尽可能地把属于同一个文件的数据块存放在同一块组中,所以块组减少了文件碎片。

块组中的每个块包含下列信息之一:1.文件系统的超级块的一个拷贝2.一组块组描述符的拷贝3.一个数据块位图4.一个索引节点位图5.一个索引节点表6.属于文件的一大块数据,即数据块如果一个块中不包含任何有意义的信息,就说这个块是空闲的。

从上图中可以看出,超级块与组描述符被复制到每个块组中。

其实呢,只有块组0中所包含超级块和组描述符才由内核使用,而其余的超级块和组描述符都保持不变;事实上,内核甚至不考虑它们。

当e2fsck程序对Ext2文件系统的状态执行一致性检查时,就引用存放在块组0中的超级块和组描述符,然后把它们拷贝到其他所有的块组中。

如果出现数据损坏,并且块组0 中的主超级块和主描述符变为无效,那么,系统管理员就可以命令e2fsck引用存放在某个块组(除了第一个块组)中的超级块和组描述符的旧拷贝。

通常情况下,这些多余的拷贝所存放的信息足以让e2fsck把Ext2分区带回到一个一致的状态。

那么有多少块组呢?这取决于分区的大小和块的大小。

其主要限制在于块位图,因为块位图必须存放在一个单独的块中。

块位图用来标识一个组中块的占用和空闲状况。

所以,每组中至多可以有8×b个块,b是以字节为单位的块大小。

例如,一个块是 1024 Byte,那么,一个块的位图就有8192个位,一个块组正好就对应8192个块(位图中的一个bit描述一个块)。

MINIX,EXT2,FAT文件系统概要分析

MINIX,EXT2,FAT文件系统概要分析

MINIX,EXT2,FAT文件系统概要分析Title: 概述了MINIX,EXT2,FAT文件系统,看完应该有一个全局的了解Author: QuanDate: 18.04.2006====================MINIX:====================Minix的文件系统主要包括一下6个部分:引导块,超级块,i节点位图,区段位图,真正的i节点信息,数据。

引导块:一般来将,每一个文件分区里面,都必须包含一个引导块。

虽然并不是每一个设备的分区都是用来引导的,但是,出于结构的统一以及兼容性方面的考虑,一般文件系统需要将分区的第一个块保留为引导块。

因此,我以前曾经犯过的一个错误就是,认为启动盘在windows里面是不能够被识别的,会提示磁盘未格式化。

看来我真的是错了,只能将那个启动盘上的系统,windows不能够识别。

但是,启动盘里面确实也装载着完整的文件系统。

超级块:之所以称之为超级块,就是因为这个块是整个文件系统的龙头!从它,可以推算出整个文件系统的信息。

在minix中,它包含了i节点数,区段数,块/区段比,最大文件长度,magic number等等信息。

这样,整个文件系统中,上面所涉及到的6个部分的分布就清楚了。

位图:常用的一个数据结构。

使用一个bit来代表一个有序逻辑单位,如这里的一个i节点,一个区段,或者是内存中的一页等等。

这里,使用位图来表示哪些i节点是可以的或者是不可用的,对于区段的使用方式也是相同的。

这样,就是对有序的逻辑单位进行了标记,而且这样的标记是写入磁盘的因此可以长期的保存。

所以,必须要确保文件系统的一致性(consistency),因为标记和真正的逻辑单位并不是同时写入磁盘的。

这一点,相当的重要。

i节点:这个结构和UNIX下的文件系统应该说是一样的。

这里保存着对应于每个文件的具体的信息,如文件类型,访问权限,链接信息,文件大小,时间信息,区段号(包括一次间接块和二次间接块)等等与文件密切相关的信息。

Ext2文件系统

Ext2文件系统

ext2的索引结点中使用了组合索引方式。

前12项用作直接索引 第13项用作间接索引 第14项用作二次间接索引 第15项用作三次间接索引


EXT2文件系统中的每个文件由一个inode描述,且只能由一个 inode描述。 inode与文件一起存放在外存,系统运行时,把inode写入内存建 立映像,加快文件系统速度。
Ext2文件系统简介

EXT2文件系统是EXT文件系统的升级, 在Linux中得到了广泛的使用。

Linux最常见的根文件系统

介绍EXT2文件系统的

磁盘组织 目录项和支持的文件类型

一个文件系统一般使用块设备上一个独立的逻 辑分区; 文件逻辑分区中除了有表示文件内容的逻辑 块(称为数据块)外,还设置了包含管理和控制 信息的逻辑块。 磁盘上可能有多个逻辑分区,每个分区可以 使用不同的文件子系统。
块组描述符

块组描述符用来描述一个磁盘块组的相关信息 块组描述符组由若干块组描述符组成,描述了文件系 统中所有块组的属性,存放于超级块所在块的下一个 块中。

一个块组描述符的结构如下 :
数据块位图和索引结点块位图

EXT2的空闲盘块分配算法采用了位图法 位图: 为便于查找数据块或索引结点的分配信息 每个位(bit)都对应了一个磁盘块:



2个位图分别占用一个专门的磁盘块;位于组描述符表 之后 根据磁盘块的大小,可以计算出每个块组中最多能容 纳的数据块个数和索引节点块个数
0,表示对应的磁盘块(或索引结点)空闲 1,表示占用。
索引结点

EXT2中所有的索引结点大小相同,都是128个字节。 一个inode的结构如下:

磁盘分区格式NTFS和FAT32有什么区别呀

磁盘分区格式NTFS和FAT32有什么区别呀

磁盘分区格式NTFS和FAT32有什么区别呀?二者各有什么好处呀?又有什么缺点呢?从目前流行的操作系统来看,常用的分区格式有:FAT16、FAT32、NTFS和Ext2。

FAT16:是MS-DOS和最早期的WINDOWS 95操作系统中使用的硬盘分区格式,采用16位的文件分配表,是目前获得操作系统支持最多的一种磁盘分区格式,几乎所有的操作系统都支持这种分区格式。

但它只支持2GB的磁盘容量而且磁盘利用效率低。

FAT32:采用32位的文件分配表,突破了2GB的限制。

与FAT16相比,极大地减少了磁盘的浪费,提高了磁盘利用率。

缺点是运行速度比采用FAT16格式分区的磁盘要慢,而且DOS 和的WINDOWS 95不支持这种分区格式。

NTFS:优点是安全性、稳定性非常出色,使用中不易产生文件碎片。

并且能对用户的操作进行记录,通过对用户权限进行严格限制,使每个用户只能按照系统赋予的权限进行操作,充分保护了系统与数据的安全。

WINDOWS 2000、WINDOWS NT以及WINDOWS XP都支持这种分区格式。

Ext2/Ext3:是Linux中使用最多的一种文件系统,专门为Linux设计,拥有最快的速度和最小的cpu 占有用率。

Ext2既可以用于标准块设备(如硬盘),也被应用在软盘等移动存储设备上。

Linux的磁盘分区格式与其它操作系统完全不同,其C、D、E、F等分区的意义也和WINDOWS操作系统下不一样,使用Linux操作系统后,死机的机会大大减少,但是目前支持这一分区格式的操作系统只有Linux。

FAT32与NTFS的区别在推出FAT32文件系统之前,通常PC机使用的文件系统是FAT16。

像基于MS-DOS,Win 95等系统都采用了FAT16文件系统。

在Win 9X下,FAT16支持的分区最大为2GB。

我们知道计算机将信息保存在硬盘上称为“簇”的区域内。

使用的簇越小,保存信息的效率就越高。

在FAT16的情况下,分区越大簇就相应的要增大,存储效率就越低,势必造成存储空间的浪费。

ext2文件系统学习(二)——目录磁盘结构

ext2文件系统学习(二)——目录磁盘结构

ext2⽂件系统学习(⼆)——⽬录磁盘结构创建镜像、mount等操作和上⼀篇⼀样,测试⽬录结构如下:⼀些⽂件系统信息如下:Block size: 1024Inodes per group: 128Inode size: 128Block bitmap at 6Inode bitmap at 7Inode table at 8-23下⾯看看⽂件系统根⽬录的结构,ext2的根⽬录的索引节点号是2,根据上⾯的信息可以计算出根⽬录的索引节点地址是0x002080。

如果是⽤vim打开的镜像⽂件,可以通过以下命令计算地址::echo printf("%x", 8*1024+128)⽂件内容如下:对照结构定义:i_mode: 0x41ed 对照可知⽂件格式为EXT2_S_IFDIRi_uid: 0i_size: 0x000400,也就是1K (可以通过ls -ld /tmp/ext2验证)i_block: 0x000018,说明该⽬录只占⽤了⼀个block,地址为0x18 * 1024=0x6000,这⾥也就是根⽬录的内容0x6000地址处内容如下:ext2的⽬录是⼀个特殊的⽂件,⽂件内容是多个结构的⽬录项,每个⽬录项是⽂件名和索引节点的集合。

对照ext2_dir_entry_2的结构,第⼀个⽬录项信息如下:inode : 2rec_len: 0x000Cname_len: 0x01file_type: 0x02,表⽰⽬录name: 0x2E,也就是“."因为上⼀个⽬录项rec_len是0x0C,所以下⼀个⽬录项地址为0x600C,对应⽬录项信息如下:inode: 2rec_len: 0x000Cname_len: 0x02file_type: 0x02,表⽰⽬录name: 0x2E,0x2E,也就是“..”下⼀个⽬录项地址为上⼀个⽬录项地址加上上⼀个⽬录项的rec_len,也就是0x600C + 0x0C = 0x6018,信息如下:inode: 0x0B,11rec_len: 0x14,20name_len: 0x0A,10file_type: 0x02, 2,表⽰⽬录name: 0x6C,0x6F, ...,也就是“lost+found”以此类推就可以找到所有根⽬录下的⽬录项。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Ext2格式分析Ext2的一般特征VFS主要是提供一个系统调用接口,然后将相关文件系统对象与具体的文件系统串联起来。

从本文开始,我们将选择一个具体的文件系统进行研究,这个文件系统就是第二扩展文件系统(Ext2)。

ext2是 Linux所固有的,事实上已在每个Linux系统中得以使用此外,Ext2在对现代文件系统的高性能支持方面也显示出很多良好的实践性。

Ext2文件系统具有以下一般特点:1、当创建Ext2文件系统时,系统管理员可以根据预期的文件平均长度来选择最佳的块大小(从1024B——4096B)。

例如,当文件的平均长度小于几千字节时,块的大小为1024B是最佳的,因为这会产生较少的内部碎片——也就是文件长度与存放块的磁盘分区有较少的不匹配。

另一方面,大的块对于大于几千字节的文件通常比较合合适,因为这样的磁盘传送较少,因而减轻了系统的开销。

2、当创建Ext2文件系统时,系统管理员可以根据在给定大小的分区上预计存放的文件数来选择给该分区分配多少个索引节点。

这可以有效地利用磁盘的空间。

3、文件系统把磁盘块分为组。

每组包含存放在相邻磁道上的数据块和索引节点。

正是这种结构,使得可以用较少的磁盘平均寻道时间对存放在一个单独块组中的文件并行访问。

4、在磁盘数据块被实际使用之前,文件系统就把这些块预分配给普通文件。

因此当文件的大小增加时,因为物理上相邻的几个块已被保留,这就减少了文件的碎片。

5、支持快速符号链接。

如果符号链接表示一个短路径名(小于或等于60个字符),就把它存放在索引节点中而不用通过由一个数据块进行转换。

此外,Ext2还包含了一些使它既健壮又灵活的特点:1、文件更新策略的谨慎实现将系统崩溃的影响减到最少。

我们只举一个例子来体现这个优点:例如,当给文件创建一个硬链接时,首先增加磁盘索引节点中的硬链接计数器,然后把这个新的名字加到合适的目录中。

在这种方式下,如果在更新索引节点后而改变这个目录之前出现一个硬件故障,这样即使索引节点的计数器产生错误,但目录是一致的。

因此,尽管删除文件时无法自动收回文件的数据块,但并不导致灾难性的后果。

如果这种处理的顺序相反(更新索引节点前改变目录),同样的硬件故障将会导致危险的不一致,删除原始的硬链接就会从磁盘删除它的数据块,但新的目录项将指向一个不存在的索引节点。

如果那个索引节点号以后又被另外的文件所使用,那么向这个旧目录的写操作将毁坏这个新的文件。

2、在启动时支持对文件系统的状态进行自动的一致性检查。

这种检查是由外部程序e2fsck完成的,这个外部程序不仅可以在系统崩溃之后被激活,也可以在一个预定义的文件系统安装数(每次安装操作之后对计数器加1)之后被激活,或者在自从最近检查以来所花的预定义时间之后被激活。

3、支持不可变(immutable)的文件(不能修改、删除和更名)和仅追加(append-only)的文件(只能把数据追加在文件尾)。

4、既与Unix System V Release 4(SVR4)相兼容,也与新文件的用户组ID的BSD 语义相兼容。

在SVR4中,新文件采用创建它的进程的用户组ID;而在BSD中,新文件继承包含它的目录的用户组ID。

Ext2包含一个安装选项,由你指定采用哪种语义。

即使Ext2文件系统是如此成熟、稳定的程序,也还要考虑引入另外几个负面特性。

目前,一些负面特性已新的文件系统或外部补丁避免了。

另外一些还仅仅处于计划阶段,但在一些情况下,已经在Ext2的索引节点中为这些特性引入新的字段。

最重要的一些特点如下:块片(block fragmentation)系统管理员对磁盘的访问通常选择较大的块,因为计算机应用程序常常处理大文件。

因此,在大块上存放小文件就会浪费很多磁盘空间。

这个问题可以通过把几个文件存放在同一块的不同片上来解决。

透明地处理压缩和加密文件这些新的选项(创建一个文件时必须指定)将允许用户透明地在磁盘上存放压缩和(或)加密的文件版本。

逻辑删除,一个undelete选项将允许用户在必要时很容易恢复以前已删除的文件内容。

日志,日志避免文件系统在被突然卸载(例如,作为系统崩溃的后果)时对其自动进行的耗时检查。

Ext2中缺少的最突出的功能就是日志,日志是高可用服务器必需的功能。

为了平顺过渡,日志没有引入到Ext2文件系统;但是,“Ext3文件系统”中完全与Ext2兼容的一种新文件系统已经创建,这种文件系统提供了日志。

不真正需要日志的用户可以继续使用良好而老式的Ext2文件系统,而其他用户可能采用这种新的文件系统。

现在发行的大部分系统采用Ext3作为标准的文件系统。

Ext2磁盘数据结构:任何Ext2分区中的第一个块从不受Ext2文件系统的管理,因为这一块是为分区的引导扇区所保留的。

Ext2分区的其余部分被分成块组(block group),每个块组的分布图如图所示。

正如你从图中所看到的,一些数据结构正好可以放在一块中,而另一些可能需要更多的块。

在Ext2文件系统中的所有块组大小相同并被顺序存放,因此,内核可以从块组的整数索引很容易地得到磁盘中一个块组的位置:由于内核尽可能地把属于同一个文件的数据块存放在同一块组中,所以块组减少了文件碎片。

块组中的每个块包含下列信息之一:1.文件系统的超级块的一个拷贝2.一组块组描述符的拷贝3.一个数据块位图4.一个索引节点位图5.一个索引节点表6.属于文件的一大块数据,即数据块。

如果一个块中不包含任何有意义的信息,就说这个块是空闲的。

磁盘超级块Ext2在磁盘上的超级块存放在一个ext2_super_block结构中,s_inodes_count 字段存放索引节点的个数,而s_blocks_count字段存放Ext2文件系统的块的个数。

s_log_block_size字段以2的幂次方表示块的大小,用1024字节作为单位。

因此,0表示1024字节的块,1表示2048字节的块,如此等等。

目前s_log_frag_size字段与slog_block_size字段相等,因为块片还没有实现。

s_blocks_per_group、s_frags_per_group与s_inodes_per_group字段分别存放每个块组中的块数、片数及索引节点数。

块组描述符和位图每个块组都有自己的组描述符,它是一个ext2_group_desc结构:当分配新索引节点和数据块时,会用到bg_free_blocks_count、bg_free_inodes_count、和 bg_used_dirs_count字段。

这些字段确定在最合适的块中给每个数据结构进行分配位图中位的序列,其中值0表示对应的索引节点块或数据块是空闲的,1表示占用。

因为每个位图必须存放在一个单独的块中,又因为块的大小可以是1024、2048或4096字节,因此,一个单独的位图描述 8192、16384或32768个块的状态。

磁盘索引节点表:索引节点表由一连串连续的块组成,其中每一块包含索引节点的一个预定义号。

索引点表第一个块的块号存放在组描述符的bg_inode_table字段中。

共有n个块,n 等于块组的数量(256)。

所有索引节点的大小相同,即128字节。

一个1024字节的块可以包含8个索引节点,一个4096字节的块可以包含32个索引节点。

为了计算出索引节点表占用了多少块,用一个组中的索引节点总数(存放在超级块的s_inodes_per_group字段中)除以每块的索引节点数。

每个Ext2索引节点为ext2_inode结构:与POSIX规范相关的很多字段类似于VFS索引节点对象的相应字段,这已在“VFS文件系统对象”中讨论过。

其余的字段与Ext2的特殊实现相关,主要处理块的分配。

特别地,i_size字段存放以字节为单位的文件的有效长度,而i_blocks字段存放已分配给文件的数据块数(以512字节为单位)。

i_size和i_blocks的值没有必然的联系。

因为一个文件总是存放在整数块中,一个非空文件至少接受一个数据块(因为还没实现片)且 i_size可能小于512 x i_blocks。

另一方面,一个文件可能包含有洞。

在那种情况下,i_size可能大于512 x i_blocks。

i_block字段是具有EXT2_N_BLOCKS(通常是15)个指针元素的一个数组,每个元素指向分配给文件的数据块:#define EXT2_NDIR_BLOCKS 12#define EXT2_IND_BLOCK EXT2_NDIR_BLOCKS#define EXT2_DIND_BLOCK (EXT2_IND_BLOCK + 1)#define EXT2_TIND_BLOCK (EXT2_DIND_BLOCK + 1)#define EXT2_N_BLOCKS (EXT2_TIND_BLOCK + 1)各种文件类型如何使用磁盘块Ext2所认可的文件类型(普通文件、管道文件等)以不同的方式使用数据块。

有些文件不存放数据,因此根本就不需要数据块。

我们来讨论一些文件类型的存储要求:普通文件普通文件是最常见的情况,我们要重点关注它。

但普通文件只有在开始有数据时才需要数据块。

普通文件在刚创建时是空的,并不需要数据块;也可以用 truncate()或open()系统调用清空它。

这两种情况是相同的,例如,当你发出一个包含字符串 > filename的shell命令时,shell创建一个空文件或截断一个现有文件。

目录Ext2以一种特殊的文件实现了目录,这种文件的数据块把文件名和相应的索引节点号存放在一起。

特别说明的是,这样的数据块包含了类型为ext2_dir_entry_2的结构:因为该结构最后一个name字段是最大为EXT2_NAME_LEN(通常是255)个字符的变长数组,因此这个结构的长度是可变的。

符号链接如前所述,如果符号链接的路径名小于等于60个字符,就把它存放在索引节点的i_blocks字段,该字段是由15个4字节整数组成的数组,因此无需数据块。

但是,如果路径名大于60个字符,就需要一个单独的数据块。

设备文件、管道和套接字这些类型的文件不需要数据块。

所有必要的信息都存放在索引节点中。

Ext2的超级块对象前面详细讨论了将一个磁盘分区格式化成ext2文件系统后,一个分区的布局,重点介绍了超级快、块组、位图和索引节点等内容。

那么,内核如何跟这些ext2文件系统的对象打交道呢?这个,才是我们研究存储的人应该重点关注的对象,从本文开始,我们就来重点讨论。

首先,当安装Ext2文件系统时(执行诸如mount -t ext2 /dev/sda2 /mnt/test的命令),存放在Ext2分区的磁盘数据结构中的大部分信息将被拷贝到RAM中,从而使内核避免了后来的很多读操作。

相关文档
最新文档