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
本文参与
腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-09-09,如有侵权请联系
cloudcommunity@tencent.com 删除