【存储相关】文件系统

为什么要文件系统

在这篇【大话存储】学习笔记(一),磁盘我们说到了硬盘的原理,如果要从硬盘里面取数据,需要告诉控制器从哪里取,取多长等关键信息,如果这个步骤由应用来做,则实在太磨人了。

所以操作系统提供了一个中间层,对我们来说,只需要记住文件名和路径,其他的与磁盘块打交道的事情就交给这个中间层来做。这个中间层即为文件系统

怎么记录文件占有的磁盘块

最容易想到的自然是连续存放。这种方法在随机访问的时候效率最好,只需要知道文件起始位置以及长度,就可以像数组一样访问。

image.png

缺点也很明显,如果一个文件删除了,就会留下很多空白的位置,后面的文件再过来填充的时候,如果填不满,则会留下大量的碎片。

所以我们希望一个文件可以切分成若干小块,使用链表串接起来。

image.png

这样资源利用率当然高了,不过我们知道链表它的访问效率并不高,也就是说 每次都得从第一块开始,沿着链表往后找,非常消耗时间。

我们可以想想在图书馆怎么找书的,是不是有类似一张图书——位置的对应表,我们按图索骥即可。于是引入了索引式,使用专门的一个磁盘块来存放文件属性&文件所占的磁盘块。这个块叫inode

image.png

怎么记录目录占有的磁盘块

既然每个文件都有一个inode来描述,每个目录当然也需要一个inode,其中存放了目录的属性以及这个目录内容的磁盘块号。

image.png

比如要读取/tmp/test.log,查找次序是这样的:

根目录inode->根目录磁盘块->
tmp目录inode->tmp目录磁盘块->
test.log的 inode->读取磁盘块


image.png

流程相当复杂,特别在删除的时候,很容易就糟了。

比如想删除/tmp/test.log需要

  • 目录中删除文件
  • 释放inode到空闲的节点池
  • 将磁盘块释放到空闲的磁盘池

如果某一步出错,就可能出问题。为了解决这种问题,引入了日志。也就是说在操作之间把规划列出来,形成日志,然后按照列出来的规划进行操作,只有所有的步骤走完了才能擦除日志。

如果在某一步崩溃了,系统重启的时候会再检查日志项,发现哪些没做,则重新来一遍即可。

如何管理空闲块

我们已经解决了怎么存放文件和目录的问题。但是我们还需要知道哪些地方没有使用,也就是空闲的块在那里。也就是说把空闲块管理起来,统一进行空间分配。

我们同样可以把空闲块组成一个链表,然后分配的时候就遍历一下链表即可。但是存在一个问题,如果磁盘块号是32位,则每个块都得花32位的空间,如果空闲块非常多,则浪费极大。

既然我们只是要知道某个地方是否被占用,而某个地方只存在占用未占用两种可能,不妨使用一张位图,对于每个磁盘块,如果使用了,则标记为1,没用就标记为0。这样,每个磁盘块只是使用了一位来标记,非常节省空间。

image.png

文件系统

我们以Linux ext2文件系统为例来看一下。

image.png

硬盘主要由MBR与分区构成。
其中MBR中有引导代码与磁盘分区表

  • 引导代码
  • 分区表:记录每个分区的起始位置,已经哪个磁盘分区是主分区(活动分区)。对于主分区,系统会找到它,然后装载这个分区中的引导块

引导块里面有什么?每个分区都会一个引导块,如果本分区里面存放有操作系统,则会通过引导块来进行装载。

磁盘分区表只有64字节,而每个分区项占用16字节,则只能容纳4个分区。如果我们想有多于4个分区,则可以把其中一个设为扩展分区,然后继续划分逻辑分区即可。

每个分区由引导块和块组构成。
每个块组中有:

  • 磁盘块位图
  • inode位图
  • inode表:存放文件和目录的inode
  • 数据块

打个比方

打个不太恰当的比方,作为收尾。

可以把硬盘看做一个大仓库,而磁盘控制器就是理货员,没有文件系统之前,外面的人(应用)取货和送货都需要直接于理货员打交道,告诉他应该放那里,或者从那里取,非常的麻烦。

所以我们又请了一个仓管员(文件系统),由他来打理整个仓库,他需要对仓库里面放了什么东西,有多少空闲的地方了如指掌,所以外面的人只需要告诉仓管员要取什么文件,以及文件存放的路径即可。

那么仓管员是如何管理仓库的呢?

首先为了简化管理,他把若干房间(磁盘块)合在一起管理,形成(块组)。

然后在簇里面分一些房间专门来存放每个文件存放的具体位置,这种专门用来表示“文件——磁盘块”的映射关系的数据结构就叫inode。所以说如果要取文件的话,则可以先查看目录的inode,在里面可以找到下一级目录的inode号,然后可以去下一级目录的inode里面找,一级一级的下去,最后可以找到文件inode,即可知道文件存在哪些具体的磁盘块呢。

那么怎么存放数据呢?

仓管员把每个房间用一个格子表示,如果里面放了东西,则格子标1,如果没放,则标0 。这么通过这幅位图,就可以轻松知道那些房间是空余的了。

image.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容

  • 一个基本的计算机系统由“硬件”和“软件”组成,一台Linux设备,主要的组成如下图所示: 一般情况下,我们所说的L...
    时待吾阅读 1,583评论 0 16
  • 转载自:http://blog.csdn.net/hguisu/article/details/6122513原作...
    miaoiao阅读 1,469评论 0 7
  • 收拾书桌,书柜,翻出许多旧物,小到记作业的本子,单词本,笔记本,我全都一个不落的收着,好像这样就可以把那段散着阳光...
    kidan阅读 406评论 0 0