从磁盘到文件系统

磁盘结构

磁盘性能:随机读 与 顺序读 

磁盘碎片是什么?

什么是文件系统?

计算机是如何找到确定路径下的文件的?



前言

在学习kafka的时候,明白了log是kafka的核心,并且log是写在磁盘上的,我就有一个疑问:磁盘的速度不是很慢吗?为什么基于磁盘读写的kafka吞吐量这么大?MySQL不也是存储在磁盘上的吗,它是如何利用磁盘的特性加速存取过程的?
此外,上一篇文章文件描述符 写了关于进程与文件的关系,但这也仅限于此,inode之下还是一个黑盒子,希望通过这篇文章,打开潘多拉之盒。

磁盘


磁盘结构

以机械磁盘为例,采用的是盘面旋转,多磁头从多盘面获取信息。越靠近主轴的磁道存储的扇区越小,存储的信息越少。单位时间内,磁盘的转速越快,能读取的信息越多。多磁头可以一次性的从磁柱读取多份信息。

磁盘读取性能

磁盘读取时间 = 磁头摆动时间(seek time 5-15ms) + 磁盘转动时间(rotational delay 4-8ms) + 读取时间(transfer 25us) 


磁盘顺序读写:
因此我们可以知道,一次磁盘读写的大部分时间是用于磁道寻址与磁头摆动,而真正的读取数据时间很短。因此,绝大多数应用都是利用磁盘的顺序读写来提升性能。比如kafka,采用顺序写log的方式来记录各种数据,mysql利用顺序写来记录redo log 和 binlog。所以,它们的写入性能非常高,也就能支撑起大的吞吐量。

操作系统和应用系统需要把相关联的数据存储在临近的扇区以及同一磁柱上,这样也可以提升IO性能。相反,如果一个应用充斥着大量的随机IO,那么这个应用的性能一定是非常差的。

磁盘碎片:所谓的磁盘碎片就是逻辑上关联性强的数据被分布在跨度较大的存储区域(扇区),造成了很多随机IO,因此需要经常合并磁盘碎片,提高IO性能。


文件系统

文件系统是一种存储和组织计算机数据的方法,它使得对其访问和查找变得容易,文件系统使用文件和树形目录的抽象逻辑概念代替了硬盘和光盘等物理设备使用数据块的概念,用户使用文件系统来保存数据不必关心数据实际保存在硬盘(或者光盘)的地址为多少的数据块上,只需要记住这个文件的所属目录和文件名。

简单来讲,就是文件系统封装了复杂的底层数据结构,向上提供了统一的封装,使得用户对数据的管理更加安全便捷。

因此,一个最重要的问题就是,数据在底层到底是怎么存储的?


不同的数据存储方式对比:

连续存储

连续块存储:这是一种最简单的实现方式,管理便捷。但最大的问题是空洞问题,即使物理磁盘还有空余容量,也不能再写入文件了。常见于CD-ROM等预先明确数据大小的存储器


链表式存储

链表式存储:好处是不存在存储空洞且只需要记住第一个block的位置即可,缺点很明显:就是会造成大量的随机IO,而且读取完一个block才知道下一个block的位置,效率过低。为了改进这种效率问题,FAT诞生


FAT

FAT:链表式存储中,next指针是存储在每个block中的,而FAT把这些指针统一写在一个array中,这样获取一个文件的所有block位置就变得简单很多,效率也更高。但FAT也有一定的限制,比如FAT16只有65536个位置,FAT32虽然有更多的指针位,但是FAT表本身也占用了更大的内存。且FAT在读取某一文件中部时效率低,因为需要链表遍历。此外,FAT格式的文件系统不利于扩展文件的metadata。


Linux采用的inode格式

I-Node:Linux 文件系统的思想是把所有与数据本身无关的data(如类型,大小,owner,创建修改时间等)都存进一个特殊的block中(inode),然后通过这个block可以找到与数据相关的所有block。


通过inode寻找所有与文件相关的block

可以看到,每个inode都有12个直接block指针,假设每个block是4k,那么有48k的地址可以通过一次寻址直接找到,这对小文件的寻址速度有非常大的帮助,而文件系统中,绝大多数文件都是小文件,这样也就直接提高了文件系统的性能。如果有大文件,可以通过二次甚至三次间接寻址的方式来获取block地址,目的是能节省inode占用的空间,把更多的空间留给数据。



计算机是如何找到确定路径下的文件的?

inode寻址的例子

这里有一个比较清晰地例子表明,文件系统是如何将path转变为真正的block地址的。简而言之,inode树组成了目录树,通过树形查找获取磁盘信息。

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

推荐阅读更多精彩内容