作者 | 时间 | QQ技术交流群 |
---|---|---|
perrynzhou@gmail.com | 2022/09/04 | 672152841 |
RAIDZ
vs RAID
本质区别
传统
RAID
访问,如果出现坏块,上层应用也会读取到坏块
ZFS的
RAIDZ
访问,如果出现坏块,通过内部机制构造完整块给应用
ZFS存储池
设计用来管理物理设备,就像管理linux内核的虚拟内存一样
存储池
内所有文件系统共享存储空间存储池
是由一颗树组成,叶子节点是物理磁盘设备,非叶子节点是逻辑设备(逻辑设备是按照mirror/raid-1或者其他存储模式通过叶子节点的物理设备构建起来的逻辑设备
ZFS
内核架构
VFS:Linux内核的虚拟文件系统
SPA:从内核中多个设备抽象出来的存储池
ZPL:ZFS的Posix层
ZVOL:基于DMU层的提供块设备接口的抽象
ZAP:基于DMU提供的对象抽象构建name/value的键值对存储
DMU:基于块基础上提供对象管理的抽象
ZIL:记录zfs的事务的日志抽象
ARC:ZFS基于内存的数据缓存
L2ARC:ZFS基于高速设备的二次数据缓存
SLOG:ZFS的日志存储模块
ZIO:基于pipeline和事件驱动机制的ZFS IO调度器
MeataSlab:ZFS的块分配器
VDEV:基于多个磁盘设备并且为Stripe/Mirror/RaidZ多种存储模式的存储池管理和抽象
DSL:ZFS的数据集和快照管理的抽象
ZFS
内部数据组织
ZFS
中几乎存在的所有数据都是以对象的形式呈现,ZFS
存储池是以树这种数据结构呈现,uberblock
节点是对象的root,中间节点是元数据对象,叶子节点是真实数据。这个组织上最上层是
uberblock
,第二层是元数据层Meta Object Set Layer
,第三层是对象层(Object Set Layer
).uberblock
持有meta object
数据,它描述了具体Object
的元数据,object
是具体的用户数据uberblock
指向一组meta object set
的描述元数据对象.Meta Object
包括filesystem
、snapshots
、clones
、ZVOLS
、存储池的空间位图数据块.Meta-Object Set
指向一组object
对象的集合,Object Set
指向具体的文件
、目录
、硬链
等具体的数据
ZFS
内部结构关系
ZFS
刷脏流程
从刷脏流程可以看出,数据是从
Object Set Layer
->Meta Object Set Layer
->uberblock