暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

深入理解ZFS文件系统基础

568


作者时间QQ技术交流群
perrynzhou@gmail.com2022/09/04672152841




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


文章转载自存储内核技术交流,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论