ext2/3文件系统存储,查找,新建,删除文件机制详解

ext2文件系统分为两个区域:元数据区和数据区



         元数据区包含索引节点区index node,索引位图区inode bitmap,块位图区block bitmap,分别存储:

         index node:存储文件的inode节点信息,并指向相应节点块所处的位置,以及文件的访问信息(包括accesss,modefy,change时间戳等),可以用stat 文件名来查看相关信息。

         inode bitmap:存储inode 节点是否被使用的信息,每个inode位占用1位,inode位为0表示该inode未被使用,inode位为1表示该inode已被使用。

         block bitmap :存储block块是否被使用的信息,每个block位占用1位,block数据块位为0表示该数据块未存储数据,否则该数据块已存储数据。

 

         数据区包含目录和文件,分别存储:

         目录存储当前目录下文件/一级子目录的名称(右)和对应的inode号(左),模型如下:


       文件:存储文件包含的数据,但不包含文件名,时间戳等信息。

 

         在新建文件系统时应注意

          (1)适当指定块大小,以防文件多次存储过程中造成空间碎片化导致空间严重浪费的情况;当系统主要用于存储大文件时,可以增大块大小,减少存取频率,加快存取速度;当主要用于存储小文件时,尽量减小块大小,较少磁盘碎片化现象,提高磁盘空间利用率。

          (2)Inode数和block数应该保持1:1的对应关系,这样才能保证有足够的inode节点记录block块存储位置,同时又不至于过多的inode节点数造成空间的浪费;

          (3)创建文件系统指定了Inode节点数和Block块大小和Block块数后,系统会自动为inode位图和block位图分配空间,用来实现inode索引节点和block数据块的使用情况的监控;

        

基于ext2文件系统的文件查找

         /跟路径可以自动寻址,找到相应的inode节点;

         例:寻找/var/log/message文件

         先寻址根目录,假设根目录inode号为1,在数据区1号块下寻找var目录,对应节点为90,回到inode索引区,找到var目录(90号)对应的inode节点号97:




到数据区97号block块下寻找log目录,对应节点为105,回到索引区,找到log目录(105号)对应的inode节点号133:



到数据区133号block块下寻找message文件,对应节点为138,回到索引区,找到message文件(138号)对应的inode节点号155:



通过inode索引找到message文件存储的位置155号block块:


基于ext2文件系统的文件新建:

  例:新建文件/tmp/myFile.txt

  搜索inode位图表,定位到值为0的位,找到并标记inode节点索引区对应的节点号121,以及数据区块号157



先寻址根目录,假设根目录inode号为1,在数据区1号块下寻找tmp目录,对应节点为56,回到inode索引区,找到tmp目录(56号)对应的inode节点号78:



到数据区78号block块下新建文件名myFile.txt,对应节点号为121,回到索引区,找到myFile.txt文件(121号)对应的块号157号:


假设每个数据块4k,myFile.txt文件大小为20k.在数据区为该文件分配5个block块:157—161号block块,并将数据写入block块中。与此同时,将inode 位图表中相应bit位置为1。




基于ext2文件系统的文件删除:

例:删除/etc/initrd文件

1)根据ext2文件系统寻址方式找到initrd文件;

2)将相应inode位图表中对应该Inode节点的bit位置为0即可。



:这种情况下,block块中的数据在下次新的数据填充进来之前不会被清楚掉,依然保存在block数据块中。只是inode位图表相应bit位被置为0。这种删除文件的方式加快了删除文件的效率,新文件创建时,直接向相应的block块中填充数据,就会覆盖掉原有的数据。





ext2/3,扩展文件系统,常用于Linux操作系统。是很多Linux发行版的默认文件系统Linux ext2/ext3文件系统使用索引节点来记录文件信息,作用像windows的文件分配表。 索引节点(inode)是一个结构,它包含了一个文件的长度、创建及修改间、权限、所属关系、磁盘中的位置等信息。 一个文件系统维护了一个索引节点的数组(GroupDesc),每个文件或目录都与索引节点数组中的唯一一个元素对应。 系统给每个索引节点分配了一个号码,也就是该节点在数组中的索引号,称为索引节点号。 linux文件系统文件索引节点号和文件名同保存在目录中。所以,目录只是将文件的名称和 它的索引节点号结合在一起的一张表,目录中每一对文件名称和索引节点号称为一个连接。 对于一个文件 来说有唯一的索引节点号与之对应,对于一个索引节点号,却可以有多个文件名与之对应。因此,在磁盘 上的同一个文件可以通过不同的路径去访问它。 本程序是一个ext2/ext3文件系统查看器(ext4暂不支持).可以打开镜像文件及硬盘设备文件查看具体的 文件系统结构信息,如超级块,块组信息,文件inode,目录信息,文件信息,提取文件内容等。本人写这个程序就是 为了学习一下ext2/3,也希望通过本程序能让读者了解ext2/3文件系统结构. 具体使用方法请看readme
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值