- 作者: 雪山肥鱼
- 时间:20210629 06:47
- 目的:快速文件系统
# 简单文件系统的问题
# Fast File System
## 组织结构:柱面组
## 一般策略,如何分配文件和目录
## 大文件策略
简单文件系统的问题
![](https://img.haomeiwen.com/i25953572/8a6259a67cba0232.png)
超级块S包含整个文件系统的信息,卷的大小,有多少inode, 指向空闲列表块的头部指针等。磁盘inode区域包含文件系统的所有inode。最后大部分磁盘被数据占用。
- 问题1:
vsfs 即 老的 unix 文件系统将磁盘当成随机存取的内存,即数据遍布各处,但是忘了介质是磁盘的非内存的事实,有非常高的定位成本。
文件的数据块通常举例inode非常远。所以每当第一次读取inode 然后读取文件的数据块时,就会出现非常耗时的 寻道。 -
问题2:
文件系统会变得非常碎片化,因为空闲空间没有被得到有效管理。文件的存储与删除过程如下:
文件存储流程.png
删掉BD.png
存储E.png
非常明显的碎片化,当要读写E时,无法顺序读写,发生寻道。
磁盘碎片整理工具的作用就是重新组织磁盘数据以连续放置文件,并为让空闲空间成为一个或者几个连续的区域,移动数据,然后重新ninode等以反应变化。
- 问题3:
原始块太小了,512bytes,即 1 block = 1 sector,虽然防止了内存碎片化,但每个块都需要定位开销来访问它,因此传输不加。
待解决的问题
- 如何组织文件系统数据结构以提高性能?
- 数据结构之上需要哪些类型的分配策略
- 如何让磁盘系统具有磁盘意识
Fast File System
快速文件系统,让文件系统的结构和分配策略具有磁盘意识。意思就是,知道介质是磁盘,定位开销大。
组织结构: 柱面组
![](https://img.haomeiwen.com/i25953572/bbdd308f82cc336b.png)
效果如上图所示:
对外来说,现代驱动并不会给文件系统暴露这些细节,磁盘只是到处block的逻辑地址,并且隐藏了上述的几何信息。
暴露给文件系统的是块组。block group. 就上图来说,有3个柱面组(最里面的不算)即3个block group
![](https://img.haomeiwen.com/i25953572/eb5f37150eee7a9a.png)
那么在同一个 group组,放置2个文件,FFS可以确保先后访问两个文件,不至于发生寻道。所以为达到以上目的,可以在每个 block group 中分配文件和目录。
![](https://img.haomeiwen.com/i25953572/1c5455399e1251ac.png)
对于超快来说,每一个group 都有一个副本,有自己的ib,db,inodes table 和 data region. 每一个group都是原来的vsfs的结构。
一般策略: 如何分配文件和目录
如何在磁盘上放置文件和目录以及相关metadata呢?
原则:相关的东西放一起。那么问题来了,什么是相关的呢?
- 目录的放置。找到分配量少的柱面,(希望负载均衡),和拥有大量自由的inode(有足够大的地方放置文件)
- 将目录数据 和 inode 放到该分组。
- 对于单个文件来说:FFS 需要将 数据块分配到与其inode相同的 block group 中。防止inode 和 数据之间的长时间寻道。
- 将位于统一目录中的所有文件,放在他们所在目录的柱面组中。
相关的放在一个 block group 里就对了。
效果图对比/a/c, /a/d, /a/e, /b/f:
![](https://img.haomeiwen.com/i25953572/09258d2e07896958.png)
![](https://img.haomeiwen.com/i25953572/af129e9d35f9e71e.png)
大文件策略
大文件并不是顺序排列的。并非占住了一个坑,后续的data 坑位都是属于它的。
大吻技安的存储并非如此:
![](https://img.haomeiwen.com/i25953572/a22f0a189212c284.png)
这样存放很明显的缺点就是,inodes table中有很多空闲inode,但data 区并没有什么空间可以存放数据了。
这样存储大块文件,会导致磁盘搜索的速度降低,特别是在顺序访问的情况下。
但只要控制大块文件的大小,我们大部分时间仍然花费在磁盘的传输数据上。而在大块之间寻道的时间却相对减少。
类似这种概念,块足够大,那么就可以一半时间传输数据,一般时间寻道,
网友评论