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格式分区详细图解教程+分区
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文件系统的区别与转换
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的一般特征VFS主要是提供一个系统调用接口,然后将相关文件系统对象与具体的文件系统串联起来。
从本文开始,我们将选择一个具体的文件系统进行研究,这个文件系统就是第二扩展文件系统(Ext2)。
ext2是 Linux所固有的,事实上已在每个Linux系统中得以使用此外,Ext2在对现代文件系统的高性能支持方面也显示出很多良好的实践性。
Ext2文件系统具有以下一般特点:1、当创建Ext2文件系统时,系统管理员可以根据预期的文件平均长度来选择最佳的块大小(从1024B——4096B)。
例如,当文件的平均长度小于几千字节时,块的大小为1024B是最佳的,因为这会产生较少的内部碎片——也就是文件长度与存放块的磁盘分区有较少的不匹配。
另一方面,大的块对于大于几千字节的文件通常比较合合适,因为这样的磁盘传送较少,因而减轻了系统的开销。
2、当创建Ext2文件系统时,系统管理员可以根据在给定大小的分区上预计存放的文件数来选择给该分区分配多少个索引节点。
这可以有效地利用磁盘的空间。
3、文件系统把磁盘块分为组。
每组包含存放在相邻磁道上的数据块和索引节点。
正是这种结构,使得可以用较少的磁盘平均寻道时间对存放在一个单独块组中的文件并行访问。
4、在磁盘数据块被实际使用之前,文件系统就把这些块预分配给普通文件。
因此当文件的大小增加时,因为物理上相邻的几个块已被保留,这就减少了文件的碎片。
5、支持快速符号链接。
如果符号链接表示一个短路径名(小于或等于60个字符),就把它存放在索引节点中而不用通过由一个数据块进行转换。
此外,Ext2还包含了一些使它既健壮又灵活的特点:1、文件更新策略的谨慎实现将系统崩溃的影响减到最少。
我们只举一个例子来体现这个优点:例如,当给文件创建一个硬链接时,首先增加磁盘索引节点中的硬链接计数器,然后把这个新的名字加到合适的目录中。
在这种方式下,如果在更新索引节点后而改变这个目录之前出现一个硬件故障,这样即使索引节点的计数器产生错误,但目录是一致的。
EXT2、EXT3、EXT4、XFS、GPT详解
EXT2、EXT3、EXT4、XFS、GPT详解原创:运维老司机小柒博客7月18日EXT2与EXT3区别Linux之前缺省情况下使用的文件系统为Ext2,ext2文件系统的确高效稳定。
但是,随着Linux系统在关键业务中的应用,Linux文件系统的弱点也渐渐显露出来了:其中系统缺省使用的ext2文件系统是非日志文件系统。
这在关键行业的应用是一个致命的弱点,Ext3文件系统是直接从Ext2文件系统发展而来,目前ext3文件系统已经非常稳定可靠。
它完全兼容ext2文件系统。
用户可以平滑地过渡到一个日志功能健全的文件系统中来。
这实际上了也是ext3日志文件系统初始设计的初衷。
1) ext3和ext2的主要区别在于,ext3引入Journal(日志)机制,Linux内核从2.4.15开始支持ext3,它是从文件系统过渡到日志式文件系统最为简单的一种选择,ext3提供了数据完整性和可用性保证。
2) ext2和ext3的格式完全相同,只是在ext3硬盘最后面有一部分空间用来存放Journal的记录;3) 在ext2中,写文件到硬盘中时,先将文件写入缓存中,当缓存写满时才会写入硬盘中;4) 在ext3中,写文件到硬盘中时,先将文件写入缓存中,待缓存写满时系统先通知Journal,再将文件写入硬盘,完成后再通知Journal,资料已完成写入工作;5) 在ext3中,也就是有Journal机制里,系统开机时检查Journal的内容,来查看是否有错误产生,这样就加快了开机速度;EXT3日志文件系统的特点1、高可用性系统使用了ext3文件系统后,即使在非正常关机后,系统也不需要检查文件系统。
宕机发生后,恢复ext3文件系统的时间只要数十秒钟。
2、数据的完整性ext3文件系统能够极大地提高文件系统的完整性,避免了意外宕机对文件系统的破坏。
在保证数据完整性方面,ext3文件系统有2种模式可供选择。
其中之一就是"同时保持文件系统及数据的一致性"模式。
EXT2的文件系统探析
EXT2的文件系统探析硬盘组成与分割首先说明一下磁盘的物理组成,整颗磁盘的组成主要有:∙圆形的磁盘盘(主要记录数据的部分);∙机械手臂,与在机械手臂上的磁盘读取头(可擦写磁盘盘上的数据);∙主轴马达,可以转动磁盘盘,让机械手臂的读取头在磁盘盘上读写数据。
从上面我们知道数据储存与读取的重点在于磁盘盘,而磁盘盘上的物理组成则为(假设此磁盘为单盘片,磁盘盘图标请参考下图:扇区(Sector)为最小的物理储存单位,每个扇区为 512 bytes;将扇区组成一个圆,那就是磁柱(Cylinder),磁柱是分割槽(partition)的最小单位;第一个扇区最重要,里面有:(1)主要启动区(Master boot record, MBR)及分割表(partition table),其中 MBR 占有 446 bytes,而 partition table 则占有 64 bytes。
各种接口的磁盘在Linux中的文件名分别为:/dev/sd[a-p][1-15]:为SCSI, SATA, U盘, Flash闪盘等接口的磁盘文件名;/dev/hd[a-d][1-63]:为 IDE 接口的磁盘文件名;复习完物理组成后,来复习一下磁盘分区吧!所谓的磁盘分区指的是告诉操作系统『我这颗磁盘在此分割槽可以存取的区域是由 A 磁柱到 B 磁柱之间的区块』,如此一来操作系统就能够知道他可以在所指定的区块内进行文件数据的读/写/搜寻等动作了。
也就是说,磁盘分区意即指定分割槽的启始与结束磁柱就是了。
那么指定分割槽的磁柱范围是记录在哪里?就是第一个扇区的分割表中啦!但是因为分割表仅有64bytes而已,因此最多只能记录四笔分割槽的记录,这四笔记录我们称为主要 (primary) 或延伸 (extended) 分割槽,其中扩展分配槽还可以再分割出逻辑分割槽 (logical) ,而能被格式化的则仅有主要分割与逻辑分割而已。
最后,我们再将第三章关于分割的定义拿出来说明一下啰:主要分割与扩展分隔最多可以有四笔(硬盘的限制)扩展分配最多只能有一个(操作系统的限制)逻辑分割是由扩展分配持续切割出来的分割槽;能够被格式化后,作为数据存取的分割槽为主要分割与逻辑分割。
EXT2 在磁盘及内存中的结构
在这里我们先了解一下磁盘的寻址方式:
■ 下面我们对分区表项结构进行一个简单的说明。
硬盘最基本的组成部分是由坚硬金属材料制成的涂以磁性介质的盘 片,不同容量硬盘的盘片数不等。每个盘片有两面,都可 记录信息。盘片被分成许多扇形的区域,每个区域叫一个扇区,每个扇区 可存储 128×2 的 N 次方( N = 0.1.2.3 )字节信息。在 DOS 中每扇区是 128×2 的 2 次方= 512 字节,盘片表面上以盘片中心为圆心 ,不同半径的同心圆称为磁道。硬盘中,不同盘片相同半径 的磁道所组成的圆柱称为柱面。磁道与柱面都是表示不同半径的圆,在许 多场合,磁道和柱面可以互换使用,
Boot block block group ……
block group n
Super block
group data descriptor block bitmap
inode bitmap
inode table
data blocks
超级块记录着一个分区的整体信息,例如这个分区上有多少个 inode ,多少个组,多少个数据块,多少个空闲块等。组描述 符记录了这个组中的 inode 数量,空闲块数量等信息。数据块 bitmap 和 inode bimap 分别是数据块的 inode 的位图。每一 个 bit 表示一个块或一个 inode 的状态。这样假设数据块 bitmap 是 N 个字节。那么最多只能有 8*Nge 数据块。每一 个分区中,只要有一个数据块和一个组描述符就可以了。但是 实际上,一个分区上有多个组,每一个组都有一个超级块和组 描述符。磁盘检测工具 e2fsck 会把第一个超级块复制到各个 组中,以后当 e2fsck 检测到某些错误时,可以根据备份的超 级块来恢复。
磁盘控制器通过磁头号,柱面号,扇区号来对扇区进行寻 址的,而逻辑扇区号,就是把全部的扇区看做是一个线性地址 空间上的扇区编号。 在进行读写时,磁盘控制器首先需要根据指定的磁头号, 柱面号,扇区号控制磁头移动到指定的磁道,这被称为寻道时 间。在定位好磁道后,还有等待盘片的相关扇区旋转到磁头下 面,这被称为旋转延时。
linux分区格式说明
Linux分区格式主要包括以下几种:1. Ext2:Ext2是GNU/Linux系统中标准的文件系统,适用于标准的块设备(如硬盘)和移动存储设备(如软盘)。
它具有极快的速度和极小的CPU占用率。
2. Ext3:Ext3是Ext2的下一代,它在Ext2的基础上增加了日志功能。
Ext3是一种日志式文件系统(Journal File System),能够将整个磁盘的写入动作完整地记录在磁盘的某个区域上,以便有需要时回溯追踪。
当在某个过程中断时,系统可以根据这些记录直接回溯并重整被中断的部分,重整速度相当快。
该分区格式被广泛应用在Linux系统中。
3. Linux swap:Linux swap是Linux中一种专门用于交换分区的文件系统。
整个分区被用作交换空间,一般大小为主内存的2倍。
在内存不够时,Linux会将部分数据写到交换分区上。
4. VFAT:VFAT叫长文件名系统,这是一个与Windows系统兼容的Linux文件系统,支持长文件名,可以作为Windows 与Linux交换文件的分区。
5. XFS:XFS是一种高性能的文件系统,适用于大型文件和大量并发操作的场景。
它具有很高的性能和可扩展性,支持高达100PB的文件系统容量。
6. BtrFS:BtrFS(B-Tree Filesystem)是一种先进的文件系统,具有优秀的性能、可靠性和可扩展性。
它采用B树数据结构进行文件和目录的组织,支持高达1YB的文件系统容量。
7. GlusterFS:GlusterFS是一种分布式文件系统,适用于大数据处理和云计算场景。
它将文件分布在多个物理节点上,提供高可用性、高性能和可扩展性。
以上就是Linux常见的分区格式,不同的分区格式具有不同的特点和应用场景。
在实际使用中,可以根据需求选择合适的分区格式。
Linux的Ext2文件系统详解
前述:Linux系统管理员很重要的任务之一就是管理好自己的磁盘文件系统,每个分区不可太大也不可以太小,太大会导致磁盘容量的浪费,太小会导致产生的文件无法存储的问题。
在Linux里面文件是由两部分数据组成,一部分是metadata,另一部分是data。
那么这些数据都存放在文件系统的什么地方呢?这就让我们必须得了解文件系统的Inode与Block 的基本原理了,而Linux最传统的磁盘文件系统使用的是Ext2,所以我们了解下它的内部原理。
第一部分:磁盘的组成和分区(基础)磁盘的机械部分:1、圆形的盘片(主要记录数据的部分)2、机械手臂与机械手臂上的磁头(可读写盘片上的数据)3、主轴马达,可以转动盘片,让机械手臂的磁头在盘片上读写数据磁盘的基本概念1、扇区是最小的物理存储单元(512bytes)2、将扇区组成一个园,那就是柱面,柱面是分区的最小单位3、第一个扇区最重要,里面有硬盘的主引导程序(MBR)占446bytes和分区表(partision tables)占64bytes。
4、目前流行的家用硬盘接口SATA和服务器硬盘接口SAS。
磁盘分区部分:1、主分区和扩展分区最多可以有4个(硬盘的限制)2、扩展分区最多只能有一个(操作系统限制)3、逻辑分区是由扩展分区分化出来的分区4、主分区和逻辑分区的内容可以被格式化,而扩展分区无法格式化第二部分:文件系统的基本特性我们都知道硬盘分区后都是需要格式化,之后操作系统才能使用该分区,为什么呢?这是因为各种操作系统的文件的属性和权限并不相同的,为了能够存放这些文件,因此将分区格式化,以成为操作系统能利用的系统格式。
文件系统通常会将两部分的数据分别放在不同的块,权限与属性放置到inode中,实际的数据放置到data block块中,另外还有一个超级块(superblock)会记录整个文件系统的整体信息,包括inode和block的总量、使用量、剩余量,以及文件系统的格式与信息。
u盘那种格式传输快
u盘那种格式传输快导读:U盘作为一种易于携带的存储工具,在我们日常生活中得到了广泛应用。
那么,在使用U盘的过程中,有没有发现过一些传输速度快的格式呢?本文将从U盘存储原理、传输速度与格式的关系、格式分类讨论三个方面,深入探究U盘那种格式传输快这一问题。
一、U盘存储原理U盘,又叫“优盘、闪存盘、USB闪存盘”,是一种以闪存芯片为主要存储介质、通过USB接口实现数据传输的存储设备。
U盘的闪存芯片可以分为SLC(Single Level Cell)闪存和MLC(Multi-Level Cell)闪存。
1. SLC(Single Level Cell)闪存这种存储器可以追溯到上世纪末晚期,它的闪存单元只能存储一种状态(0或1),因此它的写入时间比较短,读取速度非常快,但它的每个存储单元单价较高,因此价格也比MLC芯片贵。
SLC芯片同时还具有比MLC芯片更高的读写寿命、更好的性能稳定性等特点。
2. MLC(Multi-Level Cell)闪存MLC芯片被广泛应用于今天的U盘中。
MLC闪存单元可以存储2-4种状态,即每个存储单元可以通过设置电荷的大小来实现不同的状态存储,这样也就使得每个闪存单元具有了非常高的密度。
缺点是,MLC芯片的写入速度比较慢,同时经常删除和写入数据会加速它的退化,寿命相比SLC芯片也稍短。
二、传输速度与格式的关系1. U盘速度U盘的传输速度取决于多个因素,包括闪存芯片技术、主控芯片质量、接口标准和U盘格式等。
与SLC芯片相比,MLC芯片用于存储时的性能不如SLC芯片,但因它的价格更低、容量更大,因此MLC芯片的使用率更高。
因此,U盘的存储芯片中,以MLC芯片为主的比例也越来越高。
2. U盘格式U盘的传输速度还与U盘格式相关,格式指U盘的文件系统。
在U盘插入Windows系统的时候,Windows会自动检测U盘的文件系统,并自动将其格式化成FAT32系统。
但FAT32系统有一个最大文件限制。
EXT2文件系统的分析与研究
第 2 卷第 3 2 期 20 07年 6月
成
都
信
息
工
程ห้องสมุดไป่ตู้
学
院
学 报
Vl . 2No 3 0 2 1 .
J RNA HEN U VE S T OFI 1R A I C NOL Y OU LOFC GD UNI R I Y D M T ON TE H NF OG
下:
图 1 E T2文件系统的磁盘布 局 X
收 稿 日期 :0 61 .7 修 订 日期 :0 61 .2 2 0 .11 ; 2 0 .12
基金项 目: 成都信息工 程学 院科研基金资助项 目( R 2 0 0 ) C F 0 4 9
维普资讯
第 3期
徐 虹 等 : X 2文件 系统 的分 析与研 究 E T
31 3
Ma iN m e 文件系统安装软件用来检验是否是一个真正的 E T 文件系统超块。当前 E T 版本中为 g u br: c X2 X2
0 EF 3 x 5 。
Bok i 以字节记数的文件系统块大小 , 12 l z c S e: 如 04字节。 Bok e G op: l s r ru 每个组 中块数 目。当文件系统创建时此块大小被固定下来。 c p Fe l k 文件系统中的空闲块数。 r Bo s: e c Fe o e 文件系统中空闲 Ioe 。 r Id s: en n 数 d Fr o e: it n sI d 文件系统 中第一个 Ioe 。E T n 号 d X 2根文件系统中第一个 I e n 将是指 向‘’ d o / 目录的人 口。
11 E T . X 2的磁盘 布局
个文件系统如何在磁盘上布局 , 要考虑到数据的安全性 ; 数据结构要能高效地支持所有的操作 ; 应使数据 查找的时间尽量短以及磁盘空间的利用率。 E T 文件系统将它所 占用设备 的逻辑分区分成 了多个数据块组。每一个数据块组都包含一些有关整个文 X2 件系统的描述信息以及数据块 , 如关键的文件控制信息 ( 超级块 和文件 系统描述符和组描述符) 的副本 , 块位 图、 索引节点位图、 索引节点表以及数据区等。 引导块中含有可执行代码 , 启动计算机时 , 硬件从引导设备将引导块读人内存 , 然后执行引导程序。系统启 动后 , 引导块不再使用 。因此 , 引导块不属于文件系统管理。图 1 给出了磁盘上 的 E T 文件系统的磁盘布局。 X2 E T X 2文件 系统 中 的数 据 是 以数 据 块 的方式存储在文件中。这些数据块长度相 Sa e f m or ever gr y oup D i t nct f ever gr si or y oup 等且这个 长度可 以变化 , 一个 E T X 2文件 系统的块大小是在创建( 使用 m ef 时设 k2 ) s 置, 每个文 件 的大小 是块大小 的整数倍 。 体现了 E T X 2的灵活性和可扩展性。
Ext2 文件系统的硬盘布局
Ext2 文件系统的硬盘布局本文主要讲述Linux 上比较流行的ext2 文件系统在硬盘分区上的详细布局情况。
Ext2 文件系统加上日志支持的下一个版本是ext3 文件系统,它和ext2 文件系统在硬盘布局上是一样的,其差别仅仅是ext3 文件系统在硬盘上多出了一个特殊的inode(可以理解为一个特殊文件),用来记录文件系统的日志,也即所谓的journal。
由于本文并不讨论日志文件,所以本文的内容对于ext2 和ext3 都是适用的。
粗略的描述对于ext2 文件系统来说,硬盘分区首先被划分为一个个的block,一个ext2 文件系统上的每个block 都是一样大小的,但是对于不同的ext2 文件系统,block 的大小可以有区别。
典型的block 大小是1024 bytes 或者4096 bytes。
这个大小在创建ext2 文件系统的时候被决定,它可以由系统管理员指定,也可以由文件系统的创建程序根据硬盘分区的大小,自动选择一个较合理的值。
这些blocks 被聚在一起分成几个大的block group。
每个block group 中有多少个block 是固定的。
每个block group 都相对应一个group descriptor,这些group descriptor 被聚在一起放在硬盘分区的开头部分,跟在super block 的后面。
所谓super block,我们下面还要讲到。
在这个descriptor 当中有几个重要的block 指针。
我们这里所说的block 指针,就是指硬盘分区上的block 号数,比如,指针的值为0,我们就说它是指向硬盘分区上的block 0;指针的值为1023,我们就说它是指向硬盘分区上的block 1023。
我们注意到,一个硬盘分区上的block 计数是从0 开始的,并且这个计数对于这个硬盘分区来说是全局性质的。
在block group 的group descriptor 中,其中有一个block 指针指向这个block group 的block bitmap,block bitmap 中的每个bit 表示一个block,如果该bit 为0,表示该block 中有数据,如果bit 为1,则表示该block 是空闲的。
EXT2文件系统
ext2 文件系统格式The Second Extended File System(ext2)文件系统是 Linux 系统中的标准 文件系统,是通过对 Minix 的文件系统进行扩展而得到的,其存取文件的性能 极好。
在 ext2 文件系统中,文件由 inode(包含有文件的所有信息)进行唯一标识。
一个文件可能对应多个文件名,只有在所有文件名都被删除后,该文件才会被 删除。
此外,同一文件在磁盘中存放和被打开时所对应的 inode 是不同的,并 由内核负责同步。
ext2 文件系统采用三级间接块来存储数据块指针,并以块 (block,默认为 1KB)为单位分配空间。
其磁盘分配策略是尽可能将逻辑相 邻的文件分配到磁盘上物理相邻的块中, 并尽可能将碎片分配给尽量少的文件, 以从全局上提高性能。
ext2 文件系统将同一目录下的文件(包括目录)尽可能 的放在同一个块组中,但目录则分布在各个块组中以实现负载均衡。
在扩展文 件时,会尽量一次性扩展 8 个连续块给文件(以预留空间的形式实现)。
2.1. 总体存储布局 请点评我们知道,一个磁盘可以划分成多个分区,每个分区必须先用格式化工具(例 如某种 mkfs 命令)格式化成某种格式的文件系统,然后才能存储文件,格式 化的过程会在磁盘上写一些管理存储布局的信息。
下图是一个磁盘分区格式化 成 ext2 文件系统后的存储布局。
图 1. ext2 文件系统的总体存储布局文件系统中存储的最小单位是块(Block),一个块究竟多大是在格式化时确 定的,例如 mke2fs 的-b 选项可以设定块大小为 1024、2048 或 4096 字节。
而上图中启动块(Boot Block)的大小是确定的,就是 1KB,启动块是由 PC 标准规定的,用来存储磁盘分区信息和启动信息,任何文件系统都不能使用启 动块。
启动块之后才是 ext2 文件系统的开始, ext2 文件系统将整个分区划成若干 个同样大小的块组(Block Group),每个块组都由以下部分组成。
Linux中的EXT系列文件系统格式详解
Linux中的EXT系列⽂件系统格式详解Linux⽂件系统常见的硬盘如上图所⽰,每个盘⽚分多个磁道,每个磁道分多个扇区,每个扇区512字节,是硬盘的最⼩存储单元,但是在操作系统层⾯会将多个扇区组成块(block),是操作系统存储数据的最⼩单元,通常是8个扇区组成4K字节的块。
对于Linux⽂件系统,需要考虑以下⼏点:⽂件系统需要有严格的组织形式,使⽂件能够以块为单位存储⽂件系统需要有索引区,⽅便查找⼀个⽂件分成的多个块存在了什么位置如果有⽂件近期经常被读写,需要有缓存层⽂件应该⽤⽂件夹的形式组织起来⽅便管理和查询Linux内核要在⾃⼰的内存⾥维护⼀套数据结构,保持哪些⽂件被哪些进程打开和使⽤Linux⾥⾯⼀切皆⽂件,都有以下⼏种⽂件(从ls -l结果的第⼀位标识位可以看出来):- 表⽰普通⽂件d 表⽰⽂件夹c 表⽰字符设备⽂件b 表⽰块设备⽂件s 表⽰套接字socket⽂件l 表⽰软链接Inode和块存储下⾯就以EXT系列格式为例来看⼀下⽂件是如果存在硬盘上的。
⾸先⽂件会被分成⼀个个的块,分散得存在硬盘上,就需要⼀个索引结构来帮助我们找到这些块以及记录⽂件的⼀些元信息,这就是inode,其中i代表index。
inode数据结构如下:struct ext4_inode {__le16 i_mode; /* File mode */__le16 i_uid; /* Low 16 bits of Owner Uid */__le32 i_size_lo; /* Size in bytes */__le32 i_atime; /* Access time */__le32 i_ctime; /* Inode Change time */__le32 i_mtime; /* Modification time */__le32 i_dtime; /* Deletion Time */__le16 i_gid; /* Low 16 bits of Group Id */__le16 i_links_count; /* Links count */__le32 i_blocks_lo; /* Blocks count */__le32 i_flags; /* File flags */union {struct {__le32 l_i_version;} linux1;struct {__u32 h_i_translator;} hurd1;struct {__u32 m_i_reserved1;} masix1;} osd1; /* OS dependent 1 */__le32 i_block[EXT4_N_BLOCKS];/* Pointers to blocks */__le32 i_generation; /* File version (for NFS) */__le32 i_file_acl_lo; /* File ACL */__le32 i_size_high;__le32 i_obso_faddr; /* Obsoleted fragment address */union {struct {__le16 l_i_blocks_high; /* were l_i_reserved1 */__le16 l_i_file_acl_high;__le16 l_i_uid_high; /* these 2 fields */__le16 l_i_gid_high; /* were reserved2[0] */__le16 l_i_checksum_lo;/* crc32c(uuid+inum+inode) LE */__le16 l_i_reserved;} linux2;struct {__le16 h_i_reserved1; /* Obsoleted fragment number/size which are removed in ext4 */__u16 h_i_mode_high;__u16 h_i_uid_high;__u16 h_i_gid_high;__u32 h_i_author;} hurd2;struct {__le16 h_i_reserved1; /* Obsoleted fragment number/size which are removed in ext4 */__le16 m_i_file_acl_high;__u32 m_i_reserved2[2];} masix2;} osd2; /* OS dependent 2 */__le16 i_extra_isize;__le16 i_checksum_hi; /* crc32c(uuid+inum+inode) BE */__le32 i_ctime_extra; /* extra Change time (nsec << 2 | epoch) */__le32 i_mtime_extra; /* extra Modification time(nsec << 2 | epoch) */__le32 i_atime_extra; /* extra Access time (nsec << 2 | epoch) */__le32 i_crtime; /* File Creation time */__le32 i_crtime_extra; /* extra FileCreationtime (nsec << 2 | epoch) */__le32 i_version_hi; /* high 32 bits for 64-bit version */__le32 i_projid; /* Project ID */};其中__le32 i_block[EXT4_N_BLOCKS]存储了到数据块的引⽤,EXT4_N_BLOCKS定义如下:#define EXT4_NDIR_BLOCKS 12#define EXT4_IND_BLOCK EXT4_NDIR_BLOCKS#define EXT4_DIND_BLOCK (EXT4_IND_BLOCK + 1)#define EXT4_TIND_BLOCK (EXT4_DIND_BLOCK + 1)#define EXT4_N_BLOCKS (EXT4_TIND_BLOCK + 1)在ext2和ext3中i_block前12项存储了直接到数据块的引⽤,第13项存储的是到间接块的引⽤,在间接块⾥存储着数据块的位置,以此类推,第14项⾥存储着⼆次间接快的位置,第15项⾥存储着三次间接块的位置,如下图所⽰:不难看出,对于⼤⽂件,需要多次读取硬盘才能找到相应的块,在ext4中就提出了Extents Tree来解决这⼀问题,其核⼼思想就是把连续的块⽤开始位置加块的个数来表⽰,不再是⼀个⼀个去记录每⼀个块的位置,这样就能节约存储空间。
EXT2文件系统
EXT2⽂件系统对⽂件系统⽽⾔,⽂件仅是⼀系列可读写的数据块。
⽂件系统并不需要了解数据块应该放到物理介质上什么位置。
这些都是设备驱动的任务。
⽆论何时,只要⽂件系统需要从包含它的块设备中读取信息或数据,它就将请求底层的设备驱动读取⼀个基本块⼤⼩整数倍的数据块。
EXT2⽂件系统将它所使⽤的逻辑分区划分成数据块组。
每个数据块组都将那些对⽂件系统完整性最重要的信息复制出来,同时将实际⽂件盒⽬录看做信息与数据块。
罗即⽂件系统管理的是⼀个逻辑空间,这个逻辑空间就像⼀个⼤的数组,数组的每个元素就是⽂件系统操作的基本单位——逻辑块。
逻辑块是从0开始编号的,⽽且,逻辑块是连续的,逻辑块相对的是物理块。
通常,EXT2的物理块占⼀个或⼏个连续的扇区。
⼀般⽽⾔,只有块组0的超级块才读⼊内存,其他块组的超级块仅仅作为备份。
在系统运⾏期间,要将超级块复制到内存系统缓冲区。
块位图和节点位图在EXT2⽂件系统中,采⽤位图描述数据块和索引节点的使⽤情况,每个块组中占⽤两个块,即⼀个⽤来描述该数据块的使⽤情况,另⼀个描述该组索引节点的使⽤情况。
这两个块分别称为数据位图块和索引节点位图块。
数据位图块中的每⼀位表⽰该块组中的每⼀个块的使⽤情况,如果为0,则表⽰相应数据块空闲,如果是1,则表⽰已分配。
索引节点表每个块组中的索引节点都存储在各⾃的索引节点表中,并且按索引节点号依次存储。
索引节点表通常占好⼏个数据块,索引节点表所占的块使⽤时也想普通的数据块⼀样被调⼊块⾼速缓存。
EXT2整个磁盘的逻辑结构如图所⽰:EXT2⽂件系统的⼏个数据结构1 EXT2超级块超级块中包含了描述⽂件系统基本尺⼨和形态的信息。
⽂件系统管理器利⽤他们来使⽤和维护⽂件系统。
EXT2超级块是⽤来描述EXT2⽂件系统整体信息的数据结构,是EXT2的核⼼所在。
超级块经函数ext2_fill_supter读⼊后,⼜在内存中建⽴⼀个映像super_block.u.ext2_sb_info结构。
Ext2 核心 API 中文详解
Ext2 核心 API 中文详解 Andyu
Ext2 核心 API 中文详解
序、关于 Ext2 核心 API 1、关于 EXT 2.02
Dragging Outlook tasks into Simple Tasks
2.4、最小化系统状态功能
第一版的 SimpleTask 发布后,ExtJS 内部这里需求最大的就是最小化 window 系统状态栏的功能。我们将自动控制系统托盘 (System Tray)的功能加入到 Ext.air.NativeWindow 这个类中。这样,通过设置一下配置项就可最小化到系统托盘。
Quick view change
2.10、总结
4
Ext2 核心 API 中文详解 Andyu 无论是AIR本身的功能还是EXT的扩展,这些都可以在Simple Tasks v2 的程序源码中找到真正应用的地方。如果你正在使用着 Ext,那么我推荐浏览这些源码。 -完整的源码可以在Ext 2.02 的发布版本中的air/samples/tasks找到。 -Adobe AIR 1.0 下载 -Simple Tasks v2 面向AIR的版本 下载 -有关Simple Tasks首个版本可查阅上次的博文。
Menu column, used to set quick reminders
2.9、Siwthc 按钮
有一种类似 radio 按钮(单选按钮)的组件好像在桌面的应用程序上经常看得到。这儿就叫作“Switch”按钮,以便不会与标准 HTML 的 radio 按钮出现混淆。它的作用是:提供一组的按钮,同时“被按下”的只能是一个。
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格式分析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描述一个块)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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描述一个块)。
Ext2超块(super Block)Ext2超块中包含了描叙文件系统基本尺寸和形态的信息,是用定义在include/Linux /ext2_fs.h中ext2_supe_block数据结构描述的。
文件系统管理器利用它们来使用和维护文件系统。
通常安装文件系统时只读取数据块组0中的超块,但是为防止文件系统被破坏,每个数据块组都包含了它的拷贝。
超块中的主要信息如下:Magic Number:文件系统安装软件用来检验是否是一个真正的EXl2文件系统超块。
当前Exl2版本中为0xEF53。
Block Size:以字节记数的文件系统块大小,如1024字节。
Blocks per Group:每个组中块数目。
当文件系统创建时此块大小被固定下来。
Free Blocks:文件系统中的空闲块数。
Free Inodes:文件系统中空闲Inode数。
First Inode:文件系统中第一个Inode号。
EX配根文件系统中第一个Inode将是指向‘/’目录的人口。
ExT2组描述符(Group Descript)每个数据块组都拥有一个描叙结构的组描叙符,它是定义在include/Linux/ext2一fs.h中的ext2一group—desc结构。
组描叙符放置在一起形成了组描叙符表。
每个数据块组在超块拷贝后包含整个组描叙符表。
象超块一样,所有数据块组中的组描叙符表被复制到每个数据块组中以防文件系统崩溃。
EX配文件系统仅使用第一个拷贝(在数据块组0中)。
组描叙符主要包含以下信息:Blocks Bitm印:对应此数据块组的块分配位图的块号,在块分配和回收时使用。
Inode Bitmap:对应此数据块组的Inode分配位图的块号,在Inode分配和回收时使用。
Inode Table:对应数据块组的Inode表的起始块号。
每个Inode用下面的EX佗Inode 结构来表示。
Free blocks count,Free Inodes count,USed directory countExT2目录在ExT2文件系统中目录是包含文件存取路径的特殊文件。
目录文件是一组目录人口的链表,它们包含以下信息:Inode:对应每个目录入口的1node,被用来索引储存在数据块组的Inode表中的Inode 数组。
name length:以字节记数的目录人口长度。
name:目录人口的名称ExT2索引节点(hlode)ExT2通过一个Inode结构来说明一个文件,每个Inode有唯一的编号。
Inode描叙文件的物理位置以及文件的存取权限、文件修改时间及文件类型。
每个数据块组的EX他Inode 被保存在Inode表中,同时还有一个位图被系统用来跟踪已分配和未分配的Inode。
图2给出了EXl2 Inode的格式,ext2_in_ode定义在include/Linux/ext2_fS.h中。
EXl2目录仅是一个包含指向其目录人口指针的特殊文件(也用Inode表示)。
EXl2 Inode还可以描叙特殊设备文件,虽然它们不是真正的文件,但可以通过它们访问设备。
所有那些位于/dev 中的设备文件可用来存取Linux设备,例如mount程序可把设备文件作为参数。
块位图、Inode位图和Inode表每个块组都有一个块位图,用来描述本块组中数据块的使用状况。
块位图的每一位(bit)表示一个数据块的使用情况,“l”表示对应的数据块已占用,“0”表示空闲。
各位(bit)的顺序与块组中数据块的顺序一致。
Inode位图反映了Ino(ie表中各个表项的使用情况,其使用方法与块位图类似。
一个块组中所有文件的Inode形成了Inode表。
表项的序号就是lzlode号。
InO(1e表在块组中要占用几个逻辑块由超级块中s_inodes_per_group给出。
2、ExT2文件系统的特点EX配文件系统是标准的Linux文件系统,具有如下特点:(1)物理地址使用了15个数据块指针,采用综合索引方式,最大可支持4(jB的文件;(2)使用变长的目录项,既不浪费磁盘空间,又能支持最长达255个字符的文件名;(3)使用位图来管理空闲数据块和索引节点,解决了采用链表来管理未分配数据块和节点带来的一系列问题;(4)使用了块组的概念,使数据的读写更快、更有效,系统也变得安全可靠;(5)性能高且易于扩展。
但是,EX配系统还存在一些不足,主要体现在下述几个方面:(1)无ACL控制机制。
Linux采用了UNIX的权限控制机制,将文件的用户分为3类:文件主、组用户和其他用户。
而不是对任何特定的用户和用户组,让每个文件与特定的存取权限相关联。
而且,权限控制强度也不如其它操作系统(如Windows NT、Novell等)强。
这需要增强Linux的权限控制机制。
(2)未采用逻辑删除技术。
LinuX下的文件一旦删除,文件就无法恢复,可以采用一个逻辑删除的选项允许用户在必要时恢复以前已删除的文件内容。
(3)文件无压缩机制。
EX舵下的文件尚未采用压缩机制,文件全部按照原码存放,磁盘空间浪费较大。
(4)文件未加密存放。
EX佗中的文件按照明文存放,一旦Exlr2分区所在的磁盘被盗,Ex配上的文件就可以完全恢复过来,这样Linux系统的安全性就要大打折扣。
(5)块片技术(block fragmentation)未实现。
系统管理员对磁盘的访问通常选择较大的块,这样在大块上存放小文件就会浪费很多空间。
通过在大块的不同片上存放多个小文件的方法可以节省不少的磁盘空间。
3、各种文件类型如何使用磁盘块Ext2所认可的文件类型(普通文件、管道文件等)以不同的方式使用数据块。
有些文件不存放数据,因此根本就不需要数据块。
我们来讨论一些文件类型的存储要求:普通文件普通文件是最常见的情况,我们要重点关注它。
但普通文件只有在开始有数据时才需要数据块。
普通文件在刚创建时是空的,并不需要数据块;也可以用 truncate()或open()系统调用清空它。
这两种情况是相同的,例如,当你发出一个包含字符串 > filename的shell命令时,shell创建一个空文件或截断一个现有文件。
目录Ext2以一种特殊的文件实现了目录,这种文件的数据块把文件名和相应的索引节点号存放在一起。
特别说明的是,这样的数据块包含了类型为ext2_dir_entry_2的结构:#define EXT2_NAME_LEN 255struct ext2_dir_entry_2 {__le32 inode; /* 索引节点号 */__le16 rec_len; /* 目录项长度 */__u8 name_len; /* 文件名长度 */__u8 file_type; /* 文件类型 */char name[EXT2_NAME_LEN]; /* 文件名 */};因为该结构最后一个name字段是最大为EXT2_NAME_LEN(通常是255)个字符的变长数组,因此这个结构的长度是可变的。
此外,因为效率的原因,目录项的长度总是4的倍数,并在必要时用null字符(\0)填充文件名的末用的name_len字段存放实际的文件名长度(参见下图)。
注意:此处的目录项与VFS中的dentry不同. 这里的目录项是指目录文件中的一个item(项). 目录文件中的一个item的类型是ext2_dir_entry_2. ext2_dir_entry2实例的长度是可变的,其长度由其rec_len成员指定,而其name成员的实际长度由name_len指定.(这里我们看到了对ext2_dir_entry_2的hack)file_type字段存放指定文件类型的值(见下表):rec_len字段可以被解释为指定一个有效目录项的指针:它是偏移量,与目录项的起始地址相加就得到下一个有效目录的起始地址。
为了删除一个目录项,把它的inode字段置为0并适当地增加前一个有效目录项rec_len字段的值就足够了。
仔细看一下上边图中的rec_len字段,你会发现 oldfile项已被删除,因为usr的rec_len字段被置为12+16(usr 和oldfile目录项的长度)。
符号链接如前所述,如果符号链接的路径名小于等于60个字符,就把它存放在索引节点的i_blocks 字段,该字段是由15个4字节整数组成的数组,因此无需数据块。
但是,如果路径名大于60个字符,就需要一个单独的数据块。
设备文件、管道和套接字这些类型的文件不需要数据块。
所有必要的信息都存放在索引节点中。