文章目录
  1. FAT文件系统
  2. EXT4文件系统
    1. 大容量存储
    2. 异常恢复
  3. ZFS文件系统
    1. 概述
    2. 数据完整性

FAT文件系统

FAT文件系统的结构如下:

1
2
3
---------------------------------------------------------------------------------------
| 启动扇区 | 文件分配表 | 文件分配表副本 | 根目录项 | 其他文件 |
---------------------------------------------------------------------------------------

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采用动态条带宽,不同对象校验数据块的的个数也不同,根据所需安全性来选择合适的校验数据块个数;