Ext2那些事儿(一)

文章内容主要来源 Design and Implementation of the Second Extended Filesystem”,其中一位作者Theodore Ts'o 现在仍然是ext4文件系统的主要开发人员和维护人员。


本文翻译参考其中大部分内容,摘取感兴趣的记录整理成文。


1. Ext和Ext2的缘起

早期Linux是在Minix上交叉开发的。在两个系统之间共享硬盘显然比设计一个新的文件系统更加容易,因此Linus Torvalds决定在Linux中实现对Minix文件系统的支持。Minix文件系统是一个高效且相对来说bug较少的软件。


尽管如此,由于Minix文件系统存在不少设计上的限制:比如最大文件大小是64MB,以及文件名最长不能超过14个字符。于是人们开始考虑在Linux中实现新的文件系统。不过好像他们在实现新的文件系统时非常谨慎,没有直接实现EXT文件系统,而是弄了一个Virtual File System(VFS)出来。这个VFS实际是在系统调用接口和实际的文件系统之间增加的一个抽象层,就类似于现在的一些中间件,将底层实现和上层应用隔离开来,为上层应用提供统一的调用接口。这样,只要下面具体实现的文件系统提供这些接口,就能为Linux所用。正是这个抽象层的出现,使得Linux具有很强大的支持其他众多文件系统(如Minix FS, DOS FS, FAT32, NTFS)的功能,这也成为了Linux的一个重要特色,对于Linux的流行应该也起到了不可抹杀的作用。


那么,在VFS被整合进Linux内核之后,一个新的文件系统Extended File System(Ext)就在1992年4月加入到了Linux 0.96c版本。这个文件系统解决了前面说的Minix文件系统的两个限制,将最大文件大小扩到了2GB,最大文件名长度扩到了255个字符。当然,毕其功于一役不仅在中国是无法实现的,在Linux中也同样无法实现。EXT文件系统依然存在着这样或那样的问题:例如,未提供存取时间、inode修改时间、数据修改时间的功能。而且,Ext使用链表管理空白块和inode的方式导致较差的性能:就是随着文件系统的使用,这些链表由于缺乏整理,文件系统会变得碎片化(fragmented)。


江山代有人才出,各领风骚一两年。于是1993年1月出现了两个新的文件系统:Xia文件系统和Second Extened File System(Ext2)文件系统。Xia文件系统严重依赖Minix内核代码,并且改进不多。而Ext2则基于Ext代码,并且做了较多的改进。虽然Xia因为较少的改动而颇为稳定,但传统势力还是无法阻挡Ext2这股新兴势力的崛起,Ext2终于成为了当时事实上的标准Linux文件系统。


2. 文件系统的基本概念

每个人看待这个世界都有着自己的观点,之所以这样,当然是因为每个人的性格、智力、成长环境等各方面都是不一样的。还有很重要的一点是,人和人的层次是不一样的。正如林书记看人民群众就和人民群众看自己是不一样的,在他眼中,大家是屁民,而他自己的层次就是在屁民之上的。同样,在计算机的世界当中,层次也是非常非常重要的。每个成员都应该清楚自己在这个世界中所处的层次,明白自己的权利和义务。这样才能在金字塔结构中混的下去。那么,要想弄清楚文件系统,肯定得先弄清楚他是处于什么层次,是属于屁民层呢,还是那之上呢。


大家都知道,文件系统是帮助我们管理存储介质(目前主要说的是磁盘、电子盘)上文件的。那么文件系统看待磁盘肯定和磁盘看自己是不一样的。层次不一样嘛。磁盘或者说磁盘的驱动器看磁盘是盘面、扇区、磁道,电子盘会不同,但一般说来仍向上层提供从盘面、扇区、磁道的角度来看的方法。而文件系统看磁盘是看不到盘面、扇区、磁道的,只能看到块(block),磁盘在其看来就是一系列的块。而文件系统的作用就是将这些块组织成文件,方便他的上层领导访问文件。他的上层领导是不需要知道某个文件是由哪些块组成的,他只是告诉文件系统说,我要访问某个文件的某个地方,于是文件系统便会不辞辛劳地在块中找到领导要的内容,并提交给领导。就像所有领导希望的那样,最好在最短的时间给我正确无误的东西。正确无误的东西一般各个文件系统都能搞定,但如何在最短的时间内完成,则是八仙过海,各显神通了。由于领导交代的任务是多种多样的,有时候让你一气读一大段,有时候又让你一气写一大段,有时候给你的是大批量的小零件,有时候又交给你一个巨大无比的集装箱。要想把所有的任务都完美地完成,是mission impossible。因此,不同的文件系统的不同设计,决定了他们在不同任务执行上各有优劣。要想明白文件系统是如何组织这些块的,就得弄明白以下的概念。


Inodes

文件系统要访问一个存储在磁盘上的文件,必须知道该文件的inode。inode和其文件是一一对应的,要想访问某个文件,必须得知道该文件的inode(当然,这是针对干活的文件系统说的,而不是布置任务的上层领导)。那么inode是啥呢,光听这个名字可能大家不大好理解,但如果喊出它的一个别名:File Control Block(FCB)——文件控制块,估计大家就能望文生义了。其实,inode就是告诉文件系统这个文件所包含的信息,例如:文件类型、访问权限、所有者、时间戳、文件大小等,但最最重要的是什么呢?光知道以上的东西,你能获取文件的内容吗?就像你在马路上问一哥们,人民广场怎么走。那哥们告诉你,人民广场占地多少,于哪一年建成的,绿化率怎么样,但就是不告诉你怎么去那。你是不是很想揍他。所以inode最重要的一点,是告诉文件系统这个文件是由哪些块(前面说了,在文件系统的层次,眼中只有块)组成的,该去哪些块找你需要的文件内容。当领导需要查看某个文件的某段内容的时候,文件系统就必须从inode的记录中找到该段内容所对应的块号,用该块号作为块地址表中的索引,去读写物理块。下图来自本文开头的那篇英文论文,用来说明inode结构。

图中inode包含的节点内容包括直接块地址、间接块地址、二级间接块地址。从图中我们可以看出,直接块地址就直接指向包含文件内容的块;而间接块地址,则要再经过一道指引,才能找到包含文件内容的块;二级间接块地址,则需要经过两道指引,才能找到最终的块。为什么要这么费劲呢?对于小文件,可能只需要直接块地址就能将其指示完,而对于大文件,就得上间接块地址,甚至二级间接块地址了。就如同在一个楼里找一户人,只要知道几层几号就行了。而如果在全国范围,就得先到省,然后到市,然后到区,到街道,到楼,到户。


土鳖抗铁牛。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值