后端技术面试 38 讲
李智慧
同程艺龙交通首席架构师,前 Intel& 阿里架构师,《大型网站技术架构》作者
37373 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 46 讲
不定期加餐 (1讲)
后端技术面试 38 讲
15
15
1.0x
00:00/00:00
登录|注册

05丨文件系统原理:如何用1分钟遍历一个100TB的文件?

NameNode
DataNode
文件控制块
inode
固态硬盘
机械式硬盘
HDFS
RAID 6
RAID 5
RAID 10
RAID 1
RAID 0
文件系统
硬盘
思考题
分布式文件系统
RAID
文件系统
文件系统原理

该思维导图由 AI 生成,仅供参考

文件及硬盘管理是计算机操作系统的重要组成部分,让微软走上成功之路的正是微软最早推出的个人电脑 PC 操作系统,这个操作系统就叫 DOS,即 Disk Operating System,硬盘操作系统。我们每天使用电脑都离不开硬盘,硬盘既有大小的限制,通常大一点的硬盘也不过几 T,又有速度限制,快一点的硬盘也不过每秒几百 M。
文件是存储在硬盘上的,文件的读写访问速度必然受到硬盘的物理限制,那么如何才能 1 分钟完成一个 100T 大文件的遍历呢?
想要知道这个问题的答案,我们就必须知道文件系统的原理。
做软件开发时,必然要经常和文件系统打交道,而文件系统也是一个软件,了解文件系统的设计原理,可以帮助我们更好地使用文件系统,另外设计文件系统时的各种考量,也对我们自己做软件设计有诸多借鉴意义。
让我们先从硬盘的物理结构说起。

硬盘

硬盘是一种可持久保存、多次读写数据的存储介质。硬盘的形式主要两种,一种是机械式硬盘,一种是固态硬盘。
机械式硬盘的结构,主要包含盘片、主轴、磁头臂,主轴带动盘片高速旋转,当需要读写盘上的数据的时候,磁头臂会移动磁头到盘片所在的磁道上,磁头读取磁道上的数据。读写数据需要移动磁头,这样一个机械的动作,至少需要花费数毫秒的时间,这是机械式硬盘访问延迟的主要原因。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了文件系统原理及其在计算机操作系统中的重要性。首先介绍了硬盘的物理结构和文件系统的组成与工作原理,包括文件控制块和inode等概念。随后详细介绍了RAID技术,包括RAID 0、RAID 1、RAID 10、RAID 5和RAID 6的原理和应用场景。最后,文章提出了对于1分钟遍历100TB文件的更强大解决方案的探讨。通过对硬盘、文件系统和RAID技术的介绍,展现了文件系统原理的技术特点和应用场景。此外,文章还以Hadoop分布式文件系统HDFS为例,详细介绍了分布式文件系统的具体架构设计,包括DataNode和NameNode的功能及作用。最后,文章指出了文件系统设计思路的统一性,从简单操作系统文件到分布式文件系统,都体现了文件数据管理和利用更多硬盘实现大文件存储和快速读写速度的需求。整体而言,本文深入浅出地解释了文件系统原理及其技术特点,对于软件开发者和系统架构师具有重要的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《后端技术面试 38 讲》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(38)

  • 最新
  • 精选
  • ant
    老师,针对校验数据的生成过程还是不太理解!能帮忙解释的详细一些么?

    作者回复: 就是异或运算 所有数据的bit位,逐位进行异或,得到的就是校验位。 如果丢失部分数据,用校验数据和其余数据逐位进行异或运算,可到丢失部分数据。 举例,5块磁盘做RAID5,四块磁盘上的bit为:0 1 1 1 ,那么异或计算后,校验位为 1,如果丢失了第一块盘上的bit位0,那么校验位1和其他三块盘上的bit位进行异或运算,可以算出0

    2019-11-28
    5
    24
  • 探索无止境
    老师您好,文中提到inode的存储结构,其中前 12 个索引直接记录数据块地址,为什么要用前12个索引要直接存储数据块地址,如果也采用像第13,14,15的存储方式,那么一个文件不是可以存储更多的数据吗?比如就会超过70G,有点想不明白,还请老师指导!

    作者回复: 绝大部分文件都是小文件,直接索引减少查找时间,综合性能更好。

    2020-03-02
    15
  • golangboy
    老师讲的透彻,成体系,感谢!分布式存储对数据的读写,都要经过元数据节点,此后的数据读写能力会提升很多。但元数据节点应该有性能瓶颈问题,找的过程会限制读写能力,请教老师,这种一般怎么处理?

    作者回复: 元数据节点NameNode只提供类似文件控制块的数据读写,数据量非常小,不会成为瓶颈。一个数据块Block大小64M,对应的NameNode控制块数据大概只有几十个字节。

    2019-11-27
    2
    7
  • 俊伟
    老师,RAID那里图没看懂,D,a,t,p,Q都是什么意思?图有点没太明白。

    作者回复: d a t a表示需要写入RAID的数据,p q表示两种不同校验算法得到的校验数据。

    2019-11-29
    2
    3
  • Middleware
    老师好,请教一个问题,假设现在要处理一个大文件,超过 100g,甚至更大的文件,如何快速从文件内找出某几个关键词?期待老师的回复。非常感谢

    作者回复: 参考MapReduce、Spark。专栏后面会讲

    2021-09-01
    1
  • 布拉姆
    每个 inode 最多可以存储 12+256+256*256+256*256*256 个数据块,如果每个数据块的大小为 4k,也就是单个文件最大不超过 70G====》老师,怎么得出70G的啊,总数据块数量为4,295,033,100,每个4k,那磁盘总容量为4,295,033,100*4K, 单个文件是怎么得出70G的?

    作者回复: (12+256+256*256+256*256*256)*4k = 16,843,020 * 4K ≈ 70G

    2021-02-23
  • 北岸大法师
    老师,RAID究竟是往N片写数据还是N-1片写数据呢

    作者回复: RAID5数据是N-1片,加上校验位就是N片

    2020-08-16
  • 蓝魔丶
    求证老师一个问题: 我看网上解释Ext4 文件系统中13级block满满 4K 的指针。Block 指针是 32bit 的,一个 block 可以存储 4K/32bit = 1024个 Block 指针,文中是256个,这个是因为文件系统不同吗?

    作者回复: 32位指针只有4G寻址空间,应该是不够管理硬盘空间的。

    2019-12-13
  • 芒果
    这样,每个 inode 最多可以存储 12+256+256*25+256*256*256 个数据块 这里的公式写漏了,应该是12+256+256*256+256*256*256 个数据块

    作者回复: 收到,尽快修正,谢谢~

    2019-12-13
  • 老男孩
    突然发现专栏的名字好像变了?😁这估计是平台改的,这个名字目的性更强一些吧。今天的内容,老师从文件系统到RAID再到分布式文件系统讲解很系统也很全面。这里我有个问题想问一下,在分布式文件系统中,一个文件被分成多个数据块保存在不同datanode上,而且对这些数据块进行了备份。那么我们是否可以直接用RAID 0的方式把单节点的读写速度扩大N倍?还是采用RAID 5在速度和容错性之间做一个权衡?

    作者回复: HDFS缺省的高可用策略是RAID0,数据会做多个备份,应用可以指定备份数,如果想要加快读的速度,可以增加备份个数。

    2019-11-28
收起评论
显示
设置
留言
38
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部