linux下的ext2文件系统

当我们刚拿到一块磁盘的时候,我们需要将磁盘格式化成某种格式的文件系统,这样才能让磁盘存储数据。在windows下,使用的是一种叫做NTFS的文件系统,而在Linux下,使用的是ext系列的文件系统,现在最新的版本是ext4,不过原理都差不多,这里就ext2文件系统做个简要的介绍。

在文件系统中,最小的单位是块,默认情况下,一个块的大小是4096个字节,当然你也可以在初始化分区的时候自己指定。我们知道,磁盘中的一个扇区是512个字节,因此,一般来说,块的大小是512的整数倍。

当一个磁盘分区被格式化成ext2文件系统时,它的格式如下:

首先,最开始是启动块(boot block),它的大小是1KB,也就是1024字节,这个大小是固定的,它是由计算机联盟规定的。它是用来存储磁盘分区情况和启动信息的,任何的文件系统都不能使用它。它就相当于我们磁盘的第一个扇区一样,保存着电脑开机的启动程序。因此,这个启动块是不属于文件系统的。

启动块之后,才是真正的文件系统。但是文件系统把多个块结合起来,形成块组,便于管理。我们重点介绍一下,单个块组里面的成员。

第一个叫做超级块(super block),它记录了该分区文件系统的整体信息,比如说块大小,版本号等信息。

超级块之后是块组描述符表(GDT),这个我们先放在后面讲。

之后是块位图(block bitmap),它标记了一个组里面最多有多少个块,前面提到,一个块默认是4096字节,也就是说有32768比特位,那么该块组最多只能由32768个块组成。当我们使用了该组里面的某一块时,系统就把该块置为1,没有被使用的置为0。因此,block bitmap是记录整个组的使用情况。

再往下就是inode位图(inode bitmap),前面刚刚讲了块位图的作用,那么inode位图也是一样的,它也是标识了inode的使用情况。

inode位图后接inode表(inode table),该表是由若干个块组成的,里面存放着若干个inode,每个inode的大小是固定的为128字节。当该表中的某个inode被使用了,inode位图中的某一位就会被置为1。

最后就是我们的数据块(data block)了,数据块是以块为单位的。数据块里面当然是保存我们文件的内容了。

前面说过,超级块之后是GDT,这个里面保存了什么东西呢?GDT主要记录了块位图是从哪个块开始的,inode位图是从哪个块开始的,inode表是哪里开始的等信息。

在提提inode表,前面提过,该表里存放着inode,每个inode有128字节,那么inode又是如何划分的呢?inode由两部分组成,一部分保存着文件属性(创建日期,文件名,权限等信息),另一部分是一个指针数组,60字节左右,当我们将数据存放到文件里时,系统就会检索指针指向的那块数据块,将数据存放到该数据块中。你可能发现了,inode里有15个指针,每个指针指向一个数据块,那么当我们的文件过大的时候,这些数据块就不够用了,因此,倒数第三个指针所指的数据块又分成一个个指针,然后这些指针指向的数据块才是存放数据的地方,这样容量就大了。这被称为一级寻址。倒数第二个则是再增加一层指针,称为二级寻址,最后一个被称为三级寻址。有人经过计算,当三级寻址后,文件的大小可过1T,若文件有好几个T,那么怎么办呢?决解的办法有很多,比如说,增加四级寻址,或者增加块大小等。

最后附上ext2文件系统简图:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值