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

作为应用程序的开发者。通过操作系统以文件的方式对硬盘读写,os的文件系统把硬盘以块划分,每个文件占据若干个块,然后通过一个文件控制块即FCB记录每个文件占据的硬盘数据块。

这个FCB在os中是inode,访问文件必须获得文件的inode,在inode中查找文件数据块索引表,根据索引中记录的硬盘地址访问硬盘,inode中记录着文件的权限所有者修改时间。文件大小,等文件属性信息,以及文件数据块硬盘地址索引,inoode是固定的结构,能够记录的硬盘地址的索引数目也是固定的,一共15个索引,前12个直接记录数据块地址,第13个索引记录一个一级索引表地址,一个索引地址对应一个索引表,每个索引表可以记录256个索引,第14个索引记录一个二级索引表的地址,第15个索引记录的是一个三级索引表的地址,这样每个inode最多一颗存储的单个文件大小是 一块的大小eg=4K*(12+256+256*256+256*256*256)=70G,可以通过扩大数据块大小,增加一个文件的大小,但是受单个硬盘容量的限制,有可能inode够用,但是硬盘空间不够用。

tip:所谓的硬链接,存储的是dentry,就是文件名和inode的对应,也就是说,dentry这个文件的内容是inode的地址。???好像不对,那文件的路径,在os看起来是什么,我觉得路径,也就是目录,也是个文件,进入一个路径就是读一个文件内容。硬链接的文件内容是这个文件的文件名字和inode地址,而inode里会有维护着有多少个dentry的引用,当引用为0,这个inode就变成再次可用了。

tip:文件对应文件控制块,进程对应进程控制块,每个PCB里面的数据结构,是包含有FCB的。但是多个进程打开同一个文件的情景呢???

tip:文件系统存放在磁盘上,磁盘划分为一个或者多个分区,每个分区中有一个独立的文件系统,磁盘的0号扇区是MBR-master boot record主引导分区,用来引导计算机,MBR的结尾是分区表,给出了每个分区的其实和结束地址,表中的一个分区被标记为活动分区。在计算机被引导时候,bios读入并且执行MBR,MBR会读取活动分区,活动分区的第一个快是boot引导块,并执行它,引导块的程序将装载该分区的os.

统一期间,每个分区都从一个引导块开始,即使它不包含一个可以启动的os,除了引导块,磁盘分区的布局是随着文件系统的不同而不同,文件系统通常包含这些项目:超级快-superblock-包含文件系统的所有参数,在计算机启动或者文件系统首次使用时候,把超级快读入内存,空闲空间管理-位图,i节点,根目录,文件和目录。

解决方案:RAID /分布式文件系统

分布式文件系统的思路是把文件分片,每片传到不同机器上,inode的索引记录的是这些分片的地址。

比如HDFS,把文件分成多个block,每个datanode存储一部分数据,这样文件就分布在整个hdfs集群中,datanode估计有几百几千台的规模,每台服务器有数块硬盘,这样整个存储集群的存储容量大概在几PB到几百PB.

namenode负责元数据管理,metadata,就是文件路径,访问权限,数据块id,存储位置,箱单关于linux的inode的角色。hdfs为了保证数据高可用,会把数据备份一共三份,分布可以在不同的机架上。

有了hdfs在配合mapreduce、spark,就可以对这个文件的数据实现并发计算。

发布了241 篇原创文章 · 获赞 25 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/u013755520/article/details/104559951