forked from mrchuanxu/RegularNotes
-
Notifications
You must be signed in to change notification settings - Fork 0
/
fileSystem.c
43 lines (43 loc) · 2.62 KB
/
fileSystem.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
/**
* 不动笔墨不读书系列
* 理解文件系统设计思想,站在巨人肩上
* 继续阅读
* 计算机中的谁通常是以文件的形式保存在磁盘上的
*
* 以Ext文件系统为例,深入到它底层的数据结构细节,来看看他是如何组织和使用磁盘的存储空间的
*
* Ext文件系统概述
* Ext3 较Ext2增加了日志操作支持
* Ext4 较Ext2与Ext3进一步改进,提供了更大铜梁的支持,更大的单个文件的支持,提高了大文件操作效率
* 以及其他一些扩展性和性能方面的改进
*
* Ext文件系统的总体结构
* 在磁盘上存储文件数据
* 1. 如何管理整个磁盘存储空间的
* 磁盘的整个空间是以块为单位被管理的,块也是被分配来存储数据的最小单位,一个文件即使只有一个字节,也会至少占用一个存储块
*
* 内存中使用地址标记每个字节,文件系统用存储块的块号来标记每个存储块
* 在Ext2文件系统中,可选的块大小有1kB、2KB或4KB
*
* 文件系统管理的磁盘存储空间的范围,是除了保留给引导程序用的一个扇区之外的所有剩余空间
* Ext2文件系统把它所管理的存储空间进一步分成了很多大小相同的块组,每个块组包含了固定数量的存储块
*
* 要完成持久化地存储文件数据的功能,文件系统除了要保存文件的数据之外,还需要保存一些元数据 亚数据
* 用于记录每块数据存放在何处 磁盘中已用的和空闲的存储空间有哪些,以及文件的访问属性、访问时间等
* 文件系统还需要记录被指定的块大小、索引节点数量等信息。
*
* 文件系统的设计核心就在于如何组织这些信息
* 特殊的块组中,组织成Ext2文件系统
*
* 一个块组中存储块的数量是由数据位图的标记范围来确定的
*
* 大多数Linux发行版的默认的存储块大小是4KB,每4个存储块预留一个索引节点
*
* 通过15个指针,将文件的内通分散在磁盘的不同位置,而不影响文件的读取和追加效率
* 这就是Linux很少使用磁盘碎片整理程序的原因之一
*
* 日志功能,先录入,再操作,操作完再删除
* 日志功能只能保证文件系统中元数据的一致性,但是并不能保证数据的完整性
* Ext4性能炸天,存储更高,数据完整性更好,延迟分配写完缓冲再分配 子目录数量更多 更多块与I节点数量
* 多块同时分配 持久性预分配 新增盘区结构一组连续的块 日志校验并可关闭日志功能 启用Barrier,保证数据完整性
* ***/