Linux硬盘与文件系统(2)
为了让房子能够住人,通常需要装修,买家具。硬盘也一样,分区后的硬盘需要经过格式化才能使用,格式化的过程就是安装文件系统的过程。有了文件系统才能存放数据(毛坯房才能住人)。
一个分区只能格式化为一种文件系统,所以我们常常会听到“一个文件系统就是一个分区”的说法。
文件系统通常把文件分为属性和数据。属性存放在inode中,数据存放在block中。
文件系统中除了inode和block以外,还有superblock,这里面主要存放了整个文件系统的信息,包括inode和block的总量,使用量,剩余量。
superblock:记录文件系统的整体信息,包括inode和block的总量,使用量,剩余量,以及文件系统的格式。 inode:记录文件的属性,一个文件占用一个inode。除了记录属性,还要记录文件的数据(即文件的内容)所在的block号。 block:记录文件的内容,如果文件很大,则一个文件会占用多个block。block大小在格式化的时候确定,一旦格式化完成,将无法修改这个大小。常见block大小有1KB、4KB,特殊生产场景还有4MB的情况。
在创建文件系统的时候(即格式化的时候)会创建inode和block,假设文件属性、block号存放在下图中的11号inode中,假设block号是2,5,14,17,那么操作系统就可以按照图示的方式读出来:
在11号inode里记录了文件数据的实际存放位置为2,5,14,17这4个区块,此时操作系统就能够拿到这四个存储位置并一次性把它的内容读出来。
对于上面的这种从inode里拿到所有的区块信息的管理方式,我们成为索引式文件系统。
我们再来看看windows下的FAT格式的文件系统是怎么管理文件的。FAT格式的文件系统没有inode的存在,所以操作系统也就无法一次读取所有的区块,在FAT中,每个区块号码都记录在前一个区块当中,有点像下面这样:
我们的数据依次写入1,8,15,11四个区块,但是在读取文件的时候,只能先取到第一个区块,然后才能知道下一个区块在哪,依次类推。如果同一个文件数据写入的区块比较散乱,则磁盘需要不断的切换磁道和扇区,这样就会影响读取数据的速度。这也是我们在windows会经常听说有磁盘碎片整理这么个东西的原因。经过碎片整理,同一个文件的数据会尽量的放在相邻的区块中,这样在读取的时候可以减少磁盘频繁切换磁道和扇区,减少转动次数,进而提高读写性能。
对于索引式文件系统,不需要碎片整理。
上面提到的inode、block、superblock在ext2/ext3/ext4中体现的淋漓尽致。现在我们的一个文件系统(对应一个分区)能够达到几百GB甚至达到TB。那么如果把所有的inode和block放在一起管理是非常不方便的。所以ext文件系统在格式化的时候会创建多个区块群组(block group),每个block group都有自己的inode、block、superblock,我们用图来理解:
上图是一个文件系统(对应一个分区)的结构,如果有多个分区,那就有多个上面的结构。block Group最前面的Boot Sector是作为启动扇区,可以存放启动程序,因此,如果有多个分区,那么每个分区都可以有自己的boot sector,这也是我们笔记本能够装多个操作系统的原因。
今天的内容就到这,下次推文我们开始学习inode的知识。
《Linux基础及进阶》:
012 - Linux文件与目录管理(9)
013 - Linux文件与目录管理(10)014 - Linux文件与目录管理(11)
015 - Linux文件与目录管理(12) 016 - Linux硬盘与文件系统(1)看完本文有收获?请分享给更多人
推荐关注「Cloud研习社」,带你从零开始掌握云计算技术!
微信号|bjdream-1
Cloud研习社 ·