第十八章 文件系统实例
FAT文件系统
FAT文件系统的结构如下:
1 | --------------------------------------------------------------------------------------- |
EXT4文件系统
支持大容量存储,可快速恢复异常状态。
大容量存储
索引块采用”段机制”,对于大文件(一般连续),只需要一次访问。
异常恢复
EXT4文件系统框架示意图如下:
其中Group的结构如下图:
其中,Bitmaps标志每个文件数据块是否被占用,文件数据块有两种——索引数据块与存储数据块;
当系统出现断电或者系统崩溃,有些在缓存中的数据还未写入文件,这时就出现缓存与文件的数据不一致。EXT4文件系统使用日志来恢复异常(现代的文件系统都是日志文件系统)。日志的组成如下:
其中,TxB与TxE分配标志一个日志的开始与结束,中间是日志的内容:
- I[v2]:对更改的存储数据块对应的索引数据块的改变;
- B[v2]:对更改的存储数据块对应的Bitmaps位的改变;
- Db:更改的存储数据块;
日志文件系统先将对应日志写入日志数据块,再将缓存数据写入文件。为保证TxE的正确性,先写入TxB、I[v2]、B[v2],再写入TxE。
为提高数据写入文件的速度,可采用批处理;此外,通过循环日志的方式,缩小日志数据的规模。
为了进一步提高数据写入文件的速度,metadata日志省略了在日志数据块中写入Db,但此时要调整数据写入顺序:Db写入文件->metadata写入日志数据块->metadata写入文件系统。通过强制首先写入数据,保证指针永远不会指向垃圾数据。
ZFS文件系统
概述
ZFS是一种新型的文件系统,它提供了简单的管理、事务语义、端到端数据完整性与极大的可扩展性。ZFS文件系统框架如下图:
- ZPL:封装的处理文件的接口;
- DMU:数据管理单元,提供基于对象的事务操作的支持;
- ARC:(类似内存的)缓存与替换算法;
- ZIO:对实际的I/O处理做抽象,向ARC层提供支持;
- VDEV:虚拟设备,内置了各种RAID;
ZFS文件系统使用存储池作为存储设备。取消了文件卷,采用分配与回收机制,分配的空间易于调整;
数据完整性
写时复制:对数据进行修改时,先复制数据的一个副本,在副本上修改完再写回数据的位置(提交)。
读数据时,采用分层校验,即ZFS校验树,每级目录都有校验和;
在读数据时,如果数据未能通过校验,则读取数据副本,并将副本写入数据位置。
ZFS采用动态条带宽,不同对象校验数据块的的个数也不同,根据所需安全性来选择合适的校验数据块个数;