我发现我看了Linux后对搞机还挺感兴趣
文件系统 File systems
wiki : 文件系统是数据组织方式,定义数据在磁盘上的保存、读取和更新方法
个人理解:文件系统就是数据在硬盘扇区内储存的规则,好让操作系统去读取相应的扇区内的数据。
Ext2
Ext2 是Linux支持的一种文件系统。
Ext2 讲分区分成若干个分组。每个分组里含有以下这些组成部分:
1.Super block
2.File system Description
3.block bitmap
4.inode bitmap
5.inode table
6.data block
为了了解这个东西,我们需要大致了解一些概念。
block
储存数据的真正位置,比如我们有一个文件里面写着 ‘to be a happy guy' , 那么这些文本信息就会保存在block中。当我们格式化成文件系统后,就会生成若干个block,并且都一一编号(UUid).另外在每个block大小一般是一样的。通常为1K,2K,4K.
inode
在Linux中每一个文件都只对应一个inode,它记录这文件的几乎全部信息(权限,修改时间,指有多少文件名指向这个inode)。最重要的是它记录正文件内容在哪些block中。
当系统要访问一个文件的时候,首先要有文件的inode,查看上面的权限,通过了在通过上面的 block 号码,去获得文件的内容。
回到那个分组
为什么要分组?
了解了 inode 和 block 我们知道分组好像不是太必要。但是当我们结合物理就明白,这是处理物理上inode和block在扇区上分布的一种结局方案。
data block
其实就是连续的blocks。这里需要一提的就是 一个文件最少占用1个block。 所以当有一堆小文件用大block去储存会存在浪费问题。但是大文件用小block去储存就会需要更多block数,inode 就需要记录更多的block号,这影响性能,所以,选择大小需要思考。
inode table
在Ext2中,inode只有128B,很小却需要储存很多信息。
我们来算一下,一个文件400M,每个Block4K,那么inode需要记录10万个Block号码??!!
Ext2的方法是使用空的Block来记录,如 inode 记录一个 Block ,这个Block不记录正真的数据而是记录Block号码,good。记过记录一个Block能记录256个block号码。好像不太够,那就256Block在用来储存Block号码,这就变成了指数级的变化了。
Ext2 中的 inode 记录直接block号码的有 12个,一个间接,一个双间接,一个三间接。
Super block
记录文件系统使用情况,block大小等基本信息。讲道理这个东西只需要一个,所以不是每个分组都有,多个Super block也是做备份用的。
File System Description
记录分组的开始block号码与技术block号码
block bitmap && inode bitmap
分别记录那么block是空的,那么 inode 是未使用的。
Ext3
Ext2 上添加了日志功能
ext2和ext3的格式完全相同,只是在ext3硬盘最后面有一部分空间用来存放Journal的记录。
Ext4
Ext3 的升级版本,相比与Ext3有很多 优点,其有比较好的兼容性,这个就意味着结构上不会有太大的改变。个人认为其结构上比较大的改变是对大文件的处理,其使用了extent概念,就是不会每个Block号码都做记录,只记录开始Block号,连续Block数等信息(思想是这样的,但没有这么简单)来记录大文件。
参考文献
Linux文件系统第一篇—从Ext2到Ext3再到Ext4 - 徐志强
文件系统的两种文件索引模式extent和blockmap