文件系统

Posted yizhangheka

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件系统相关的知识,希望对你有一定的参考价值。

技术图片

 

 

为什么分区后还要进行格式化呢

所谓的分区就是指定分区的起始柱面和结尾柱面,将将分区的信息记录到磁盘的第个扇区当中,也就是说分区只是指定了某个分区在磁盘上可以使用哪些区域而已。系统想要将数据存放在分区当中,需要按照一定的格式,因为只有按照一定的格式存放,我们在读取的时候才方便,这就像书架一样,我们按照书架上的格子对书进行拿取是比较方便的,如果没有书架,我们把很多书都扔到空箱子里面,这样在拿取的时候很不方便,所以最好按照一定的方式进行拿取。

 至于格式化成什么文件系统,这取决于系统,系统支持什么的文件系统我们就格式化成什么样文件系统。至于买什么样的书架,这取决于我们自己,我们喜欢什么样的就格式化成什么样的。

过去的时候一个分区也就对应一个文件系统,但是现在就不一样了,比如LVM(逻辑卷管理器),可以实现将多个分区整合成一个分区(卷组),在这一个分区上再划分子分区(逻辑卷),然后每一个子分区(逻辑卷)对应一个文件系统,这样就实现了一个分区对应多个不同的文件系统。

文件系统由三部分构成

  1. 超级块:记录文件系统的整体信息,包括inote/block的总量、使用量、剩余量等。
  2. Inode区域:inote区域就由inode块组成的区域,每个文件都会占用一个inode块,inote块当中记录了此文件的元数据和blcok号码。
  3. Block区域:block区域就由block块组成的区域block块里面存放的就是文件真实的数据了,这没什么好说的。

硬链接:

其实在学到这里面的时候我是有一个疑问的,就是为什么一个文件只会占用一个inode块?一个小文件元数据和block块记录只占用一个inode块我是可以理解的,但是一个1G的文件它要引用的block块那就多了,一个inode肯定是存不下呀!难道不会占用更多的inode块吗?后来我专门查了《鸟哥的私房菜》之后才知道,如果一个文件要引用的block号码实在太多了,一个inode存放不下,也不会再浪费一个inode块,而是专门拿出一个block块来存放block号码,这是第一级引用,如果需要的话,可以有二级和三级引用,所谓的二级引用就是第一级的block也存放不下block号码了,第一级block本身可以再引用一级,这就是第二级,第三级以此类推。

我们上面所述的是ext2文件系统,ext2文件系统是这样进行数据存放的,但并不所有的文件系统在存放文件的时候都是这样,比如FAT文件系统,FAT文件系统是windows上的一种文件系统,我们新买的U盘一般就是样的文件系统,这种文件系统在在存放大量的block号码的时候并不像ext2文件系统那样借用多级引用,而是不断的跳转?什么意思呢?FAT文件系统并没有inode块区域,FAT文件系统里面全都是block块区域,也就是说FAT文件系统并不能够像ext2文件系统那样通过读取inode块得知这个文件占用了多少block块,FAT文件系统上的一个文件只会连接一个block块,而每个block块都会空余出一点空间,指向下一个block块,至少会连接多少了块取决于文件的大小,当我们查看这个文件的时候就像是不断的跳转那样来读取每一个block块当中的内容,如果说,每一块他们距离的比较远,以至于跨越了多个柱面,那么在不断跳转的同时,磁头也会多次移动,可想而知这样会大大耽误数据读写的效率,所以又有了磁盘碎片整理这么一项技术。磁盘碎片整理就是将同一个文件所占用的block块尽量放到相邻的地方,比如相邻的扇区和磁道,以其通过这样的手段加快数据读取的速度。磁盘碎片整理对于FAT文件系统有很大的作用,但是对于ext系列的文件系统是没有太大意义的。

有了上面的见解,我们再去理解硬链接就简单多了。一个文件只有一个inode号码,在操作系统当中可以创建多个指向这个inode号码的链接,这就是硬链接,也就是说文件自己其实也是一个硬链接,这就是为什么我们新创建的文件,明明没有给它创建硬链接,他的硬链接数已经是1了的原因。同时,我们也应该了解,只要不把所有的硬链接全部删除干净,我们总能够通过某一个硬链接找到inode块,进而找到文件内容,所以硬链接是可以做一为一种备份的手段。

块组:

如果我们的一个文件系统很大,高达几百个G,现在这很常见呀,我现在一个windows桌面系统的D盘就有1T大小,如果这个文件系统(D盘)的block区域和inode区域都放置在一起的话,block块的号码就会被排非常大,而且在inode块引用block块的时候因为block的号码太大了也会占用太多的空间,所以实际上真实的文件系统并不是这样的,而是进一步划分了区域,真实的文件系统在创建的时候首先创建的是块组,也就是将文件系统分成一个又一个的区域,然后在区域里面再划分出block块区域、inode块区域、超级块区域这三个区域,这样一来,每一个块组内block块号码不会变得非常大,做引用的时候也不会占用太多的空间。

面试题

在ext2文件系统当中,block块要划分多大有三个标准:1KB、2KB、4KB,而且一个数据一旦被占用即使有剩余也没能被其它的文件占用了,也就是说假装你的文件系统有1G,但实际存放的数据绝不会大于或等于1G,只会小于,因为你不可能正好把每一个block块都占满呀!除非重新格式化,否则block块的大小是固定的。

 

假设你的ext2文件系统使用的是4KB的block,而文件当中有10000个小文件,每个文件是500B,请问磁盘浪费多少容量?

 

其实这个问题,只要先算一算一个文件浪费多少空间,然后乘以10000不就好了吗?我们先来算算一个文件浪费多少空间?

4KB=4096B

也就说一个文件会浪费4046B,10000个文件浪费40460000B=39511KB,39511KB=3.85MB。

 

以上是关于文件系统的主要内容,如果未能解决你的问题,请参考以下文章

Linux文件系统的文件系统

Linux里面文件系统都有哪些?

常见的文件系统都有哪些?

Android 文件系统中添加文件及添加系统属性

docker联合文件系统

深究NTFS文件系统