首页 > 代码库 > 文件IO详解(一)---ext2文件系统详解
文件IO详解(一)---ext2文件系统详解
http://www.cnblogs.com/biyeymyhjob/archive/2012/07/26/2609649.html
讲解ext2整体的文件布局
http://www.cnblogs.com/peon/archive/2011/06/22/2086470.html
用实际磁盘中的数据来印证ext2文件系统的布局
- 磁盘存储数据的最小单元是扇区(Sector);ext2文件系统存储结构的最小单位是块(Block)。
- ext2文件系统中文件的物理存储结构有三个基本组成部分:superblock、block、inode。当然在实际的ext2文件系统磁盘布局中除了三个基本组成部分还有其他的组成,比如块组描述符、块位图、inode位图等等,详见上面的博客。
- 一个磁盘在分区完毕后还不能直接使用,因为分完区的磁盘并没有建立起相应的文件系统而如果没有文件系统,那我们要操作文件的时候必须要知道文件存放在磁盘的哪些扇区,通过这些扇区来读写文件,非常麻烦,如果有文件系统就可以利用文件名来读写文件(因为文件名对应了inode号码可以找到文件的内容)。所以必须还要经过格式化,格式化实际上就是在分区创建相应文件系统的存储格式并进行初始化的过程。不同的分区可以创建不一样的文件系统。分区之间是独立的,可以有不同的文件系统。
- block:是用来存放文件真正数据的地方,是文件系统的最小单位,每个block都会有一个号码。每个block中最多只能存放一个文件的数据,如果一个文件数据太大一个block中放不下,那么可以用多个block来存放,如果一个文件数据比较小,那么一个block中剩余的部分也不能被利用,也就是被浪费了。block是建立在扇区的基础上的,所以其大小必须是扇区(512Byte)的整数倍,通常block的大小可以是1K、2K、4K,这个大小在格式化的时候就已经确定好了的。
- inode:一个inode的大小默认为128B,也可以在建立文件系统时指定inode的大小。由两部分组成,一部分称为元数据,是记录文件的一些属性,权限和修改时间等等的数据,一部分就是block指针,指向所有存放此文件数据的block。每个inode都对应一个文件,而每个inode又会有一个号码,所以根据文件名可以找到inode号码,然后通过block指针,找到文件所有的数据。目录也是一种文件,其inode中存放的是是目录的一些属性,权限和block指针,其block中保存的是该目录下的文件名以及文件对应的inode号码。文件系统中会有一个inode表,而表中inode的总量也不是无限的,当达到inode上限时,就不能再创建文件了。
- superblock:一般来说,superblock的大小为1K,是存放文件系统整体信息的地方,比如块大小、文件系统版本号等等。
- 在一个inode中用作于索引block块的空间只有60B,其中每条索引要占用4个字节,也就是总共有 60/4=15 个索引项,如果一个文件较大,需要不止 15 个block块来存储数据怎么办?为了解决这个问题,其中inode中的这 15 个索引项,只有前面 12 个索引项是直接索引,而后面的三个索引项均为间接索引。分别为一级间接索引、二级间接索引和三级间接索引。
图中的 b 代表着一个block的大小,由于一个block索引需要占用 4 个字节,所以如果将一个block用来存储索引项的话,可以存储 b/4 个索引项。
===============================================================
ext2文件系统在磁盘分区上的整体布局如下图所示
磁盘的分区会被分成若干个Block Group(块组),在每个块组中又分为超级块、GDT(块组描述表)、Block Bitmap(块位图)、Inode Bitmap(inode位图)、Inode Table(inode表),然后就是Data Block(数据块)。注意磁盘分区的开始扇区是用作boot sector(启动扇区),不作为文件系统的组成部分,其大小为 1K。
各个组成部分的大小及用途参考上面的博客。
另外注意:规定根目录的inode号码永远是 2
文件IO详解(一)---ext2文件系统详解
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。