Ext2那些事儿(四)

4. Ext2文件系统

之前说了那么多,其实都是为下面的介绍做个铺垫。那就来正式介绍一下Ext2文件系统。


动机

上大学的时候,有个好哥们跟我分享他的成长心得:“以前别人和我说话,我不会想什么,直接回答。现在别人和我说话,我首先会想他说这话的目的是什么。”我挺佩服的,说心里话。这确实是个境界,想得比别人深一步,比别人远一点。我到现在也只是偶尔能记得起来要再往深了想一想,差距是明显的。


上述的“目的”,其实也就是动机。说话尚且有动机,更何况做一个文件系统。那么作者是怎么说的呢?“是为了修补第一代Ext文件系统存在的问题,才设计和实现Ext2文件系统的。”,“我们想提供一个非常鲁棒的操作系统,以减少在密集使用的情况下发生数据丢失的风险。” 这里指的数据丢失的风险,需要注意,指的是密集使用的情况下。我的理解是,密集使用仍然属于正常使用,而不包括非正常情况下,比如正在工作时异常断电的情况。这种情况,想要减少数据丢失的风险,一般会采用日志的方式,这也是Ext3出现的一个重要原因。当然,这是后话,且按下不表。


“标准的”Ext2文件系统特性

啥叫“标准的”呢?意思就是符合Unix系统的特性。比如说支持标准的Unix文件类型:普通文件、目录、设备特定文件和符号链接。这些都是Unix里面的。另外呢,Ext2将支持的最大文件扩大了:在VFS层能支持最大4TB的文件。还有,对于目录结构项,Ext2采用变长结构,能支持更长的文件名——255个字符,而且,如果需要的话,甚至可以扩大到1012个字符。Ext2还为超级用户root保留了一些块。一般是总块数的5%。这些保留的块是干嘛用的呢?就是当用户把文件系统搞的乱七八糟,填满了垃圾,不留一点空地的时候,超级用户能有空间进行操作来恢复系统。


“高级的”Ext2文件系统特性

那啥又叫“高级的”呢?嗯,当然是和“标准的”相对,指的是属于当时Unix文件系统中没有的一些特性。但是在现在看来,其实也算不上高级了。


比如说,设置一个文件或目录的属性。如果设置的是目录的属性,则以后在该目录创建的新文件也继承这些属性。还有就是在挂载Ext2文件系统时,可以选择是采用BSD语法还是System V Release4的语法习惯。在当时来说,BSD和System V可能还有些影响力,可是现在,就彻底远离大部分人的视线了。这个特性对于今天来说,也没啥意义。还有的特性就是支持BSD的同步更新方式。在挂载文件系统时,设置一个选项,那么文件系统就可以在元数据(inodes,位图块,间接块和目录块)发生改变时,同步将数据写到硬盘。


这里又出现了一个以前没出现的重要概念:位图块(bitmap block)。这是干嘛用的呢?前面已经说过,文件系统能看见的就是块,这就是他所拥有的资源。如果领导来了创建文件的要求,他得能迅速从这些资源中找到合适的块来,那肯定得有一个小本子,记着哪些块是已经被分配了,哪些块还可以给领导用。这样方便查找啊,不可能临时再去仓库里面挨个翻啊,那领导肯定得说你工作方法有问题了。这个位图块(bitmap block)就是这个小本子。它里面每一bit位就用来表示一个块是可用还是不可用。当然,位图块只是其中的一种方法,用起来比较简单。还有其他的方法,这里就先不说了。


可能有同学又会问:文件系统中的元数据发生改变,不就是在硬盘上发生改变嘛。还同步个什么劲啊?实际上是这样的,前面我们提到了VFS。VFS是装载在内存中的,并且包含实际下层文件系统相同的元文件。磁盘写比较慢,所以呢,放在内存中进行读写会快很多,提高了存取效率。当内存中的元数据发生改变时,为了保持高效率(尽量少写磁盘),暂时不写回到硬盘,等到过段时间再集中一批数据写回磁盘。虽然这样提高了效率,但这样带来了一个问题,就是在这段未写回的时间,硬盘上的数据是不正确的。如果这时候断电了,内存中的数据就丢失了,硬盘上的数据也就不正确了。所以就会有同步写回的需求存在。


接着高级特性说。Ext2可以在创建文件系统时选择块大小,典型的分别是1024,2048,4096字节。大块的好处是加快I/O速度,因为减少了I/O请求(例如写4M数据,在1024字节的情况下,需要写4096个块,而对于4096字节,则只需要写1024个块)。但是初中学过的唯物辩证法告诉我们,任何事物都有好的一面和坏的一面。大块的坏的一面是什么呢?浪费了空间。组成文件的最小单元是块,一个块是无法装两个文件的,即使两个文件的大小加起来小于这个块的大小。对于很多小文件来说,比如它只有1K,但只能放在一个4K的块中,那剩余的3K空间就浪费了。人生永远充满了选择,永远处于两难或多难当中。关键在于平衡。


土鳖抗铁牛。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值