ZFS了解

news2025/2/27 5:43:06

存储数据的管理通常涉及两个方面:对一个或多个块存储设备(如硬盘驱动器和SD卡)进行物理卷管理,并将它们组织成操作系统所看到的逻辑块设备(通常涉及卷管理器、RAID控制器、阵列管理器或合适的设备驱动程序),以及对存储在这些逻辑块设备(文件系统或其他数据存储)上的数据和文件进行管理。

与其他文件系统不同的是zfs充当着卷管理和文件系统的角色,这意味着ZFS可以创建一个跨越池和硬盘的文件系统,可以通过添加硬盘来增大池的存储容量

在这里插入图片描述

zpool是支撑zfs的最高层结构,由vdev组成

存储vdev

  • single:最简单的vdev类型,就是给定数量的硬盘

  • mirror:对于每一个写入的vdev都有一个副本

  • raidz1:1磁盘奇偶校验,类似于raid-5

  • raidz2:2磁盘奇偶校验,类似于raid-6

  • raidz3:3磁盘奇偶校验

支持vdev

  • log:作为防止崩溃的日志。在写入时会先写入log,然后到主存

  • cache:用于拓展zfs的内存缓存

  • special:允许存储系统元数据与主存分开,采用非常快的ssd,对于延迟敏感的操作(如小的数据库操作)更好

    但这也意味着如果special坏了,那就全坏。此类型在zfs0.8之后支持

  • spare:备用空间。用于驱动器发生故障时进行更换,但不能替换缓存、日志vdev

读写效率与保障

效率

zfs采用以下策略自动在pool中所有vdev分配存储数据

  • 尽可能写入相对较少数据的vdev,从而保证当池被更多地使用时,不会出现某些vdev被填满的情况。
  • 读取时从尽可能多的磁盘读取数据的不同部分,从而提供更高的读取性能

写时拷贝

在重写时将会将新数据写到不同块,在写完成之后,更新文件系统元数据使之指向新数据块。那么即使在写的时候系统崩溃,那么原数据也会被保存下来

快照

追踪文件系统的更改

数据完整性

数据完整性是通过在整个文件系统树中使用基于fletcher的校验和或SHA-256哈希来实现的。

  1. 对每个数据块进行校验和,然后将校验和值保存在指向该块的指针中,而不是保存在实际块本身中。
  2. 对块指针进行校验和,并将值保存在其指针处。
  3. 这个校验和继续沿着文件系统的数据层次结构一直到根节点,根节点也被校验和,从而创建了一个Merkle树。

大多数文件系统无法检测到运行中的数据损坏或幻读/写(数据写/读的校验和是正确的,但实际上是错误的),因为它们将校验和与数据一起存储。ZFS将每个块的校验和存储在它的父块指针中,这样整个池就可以自我验证了

在写入数据时会创建校验和,若读取时不匹配就会尝试通过冗余的数据自动修复错误

当然这种冗余带来的后果就是实际可用储存容量将会大幅下降

RAID-Z

RAID-Z是RAID-5变种,属于ZFS的RAID实现。允许更好地分配奇偶性,并消除了raid-5的”write hole“问题

wire hole问题指的是由于写过程的非原子性,系统崩溃或写操作的其他中断可能导致奇偶校验与数据不一致的状态,这样在磁盘故障的情况下,奇偶校验不能用于恢复。

RAID- z与RAID-5类似,是一种数据/校验分布方案,但使用了动态条带宽度。每个块都是自己的RAID条带,而不管块大小,因此每次RAID- z写操作都是全条带写。当与ZFS的写时复制事务语义结合使用时,可以消除write hole错误。RAID- z也比传统的RAID 5快,因为它不需要执行通常的读-修改-写序列

形形色色的不同大小,raid - z重建必须遍历文件系统元数据来确定实际的raid - z几何。如果文件系统和RAID阵列是两个独立的产品,这是不可能的,但如果数据的逻辑和物理结构有一个完整的视图,这是可行的。通过元数据意味着ZFS可以验证每个块的256位校验和,而传统的RAID产品通常不能这样做

除了处理全磁盘故障,RAID-Z还可以检测和纠正无声的数据损坏,提供“自修复数据”:当读取RAID-Z块时,ZFS将其与其校验和进行比较,如果数据磁盘没有返回正确的答案,ZFS读取校验,然后计算出哪个磁盘返回了坏数据。然后对受损数据进行修复,并将完好数据返回给请求者

RAID- z有五种不同的模式:striping(类似于RAID 0,没有冗余),RAID- z1(类似于RAID 5,允许一个硬盘故障),RAID- z2(类似于RAID 6,允许两个硬盘故障),RAID- z3 (RAID 7[a]配置,允许三个硬盘故障),镜像(类似于RAID 1,允许一个硬盘故障)

恢复

zfs没有fsck(标准unix文件系统数据检查和修复工具),而是存在一个内置的scrub用于周期性检查并修复。与fsck主要区别在于

  • fsck必须运行在脱机文件系统,这就意味着文件系统不能被挂载。而scrub则用于已经挂载的、活动的文件系统

  • FSCK通常只检查元数据(如日志日志),但从不检查数据本身。这意味着,在执行fsck之后,数据可能仍然与存储的原始数据不匹配。

    Scrub检查所有内容,包括元数据和数据

大储存

设计为128bit文件系统,这意味着每个zpool可以提供 3 ∗ 1 0 24 3*10^{24} 31024TB

Ref

  1. https://en.wikipedia.org/wiki/ZFS
  2. https://itsfoss.com/what-is-zfs/
  3. https://en.wikipedia.org/wiki/RAID
  4. https://zfs.m-jay.cn/understand-zfs
  5. https://www.reddit.com/r/zfs/comments/fn5ugg/zfs_topology_faq_whats_a_zpool_whats_a_vdev/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/990507.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用 System.exit() 来优雅地终止 Spring Boot 项目

😊 作者: 一恍过去 💖 主页: https://blog.csdn.net/zhuocailing3390 🎊 社区: Java技术栈交流 🎉 主题: 使用 System.exit() 来优雅地终止 Spring Boot 项目 ⏱️ 创作时间&am…

智安网络|面临日益增长的安全威胁:云安全和零信任架构的重要性

随着云计算技术的快速发展和广泛应用,云安全和零信任架构变得愈发重要。在数字化时代,云计算技术得到了广泛的应用和推广。企业和组织借助云服务提供商的强大能力,实现了高效、灵活和可扩展的IT基础设施。然而,随着云环境的快速发…

java设计模式,简单工厂和抽象工厂有什么区别?

java设计模式,简单工厂和抽象工厂有什么区别? 简单工厂模式: 这个模式本身很简单而且使用在业务较简单的情况下。一般用于小项目或者具体产品很少扩展的情况(这样工厂类才不用经常更改)。 它由三种角色组成&#xf…

数据可视化:四大发明的现代转化引擎

在科技和工业的蓬勃发展中,中国的四大发明——造纸术、印刷术、火药和指南针,早已不再是古代创新的象征,而是催生了众多衍生行业的崭新可能性。其中,数据可视化技术正成为这些行业的一颗璀璨明珠,开启了全新的时代。 1…

OpenCV 02(色彩空间)

一、OpenCV的色彩空间 1.1 RGB和BGR 最常见的色彩空间就是RGB, 人眼也是基于RGB的色彩空间去分辨颜色的. OpenCV默认使用的是BGR. BGR和RGB色彩空间的区别在于图片在色彩通道上的排列顺序不同. 显示图片的时候需要注意适配图片的色彩空间和显示环境的色彩空间.比如传入的图片…

微服务模式:服务发现模式

由于微服务应用的动态性,很难调用具有固定 IP 地址的服务。这就是服务发现的概念出现的背景。服务发现有助于客户端了解服务实例的位置。在这种情况下,服务发现组件将充当服务注册表。 服务注册表是一个包含服务实例位置的集中式服务器/数据库。在微服务…

Camera 信号波形状态及同步方式

方式一:解串器发出同步信号 主平台连接解串器(Deserializer)再连接四个摄像头模组,每个摄像头模组包含 Sensor 串行器。解串器产生帧同步信号 (FrameSync)传递给串行器,再传递给 Sensor&#x…

嵌入式IDE(2):KEIL中SCF分散加载链接文件详解和实例分析

在上一篇文章IAR中ICF链接文件详解和实例分析中,我通过I.MX RT1170的SDK中的内存映射关系,分析了IAR中的ICF链接文件的语法。对于MCU编程所使用的IDE来说,IAR和Keil用得比较多,所以这一篇文章就来分析一下Keil的分散文件.scf(scat…

geopandas 笔记:geometry上的操作汇总

如无特殊说明,数据主要来自:GeoDataFrame 应用:公园分布映射至subzone_UQI-LIUWJ的博客-CSDN博客 0 读入数据 subzone gpd.read_file(ura-mp19-subzone-no-sea-pl.geojson) subzone subzone_tstsubzone[0:5] subzone_tst subzone_tst.plot…

几十行C++代码生成自己的图片

背景:Kyle McCormick 在 StackExchange 上启动了一个名为 “Tweetable Mathematical Art” 的创意比赛。在这个挑战中,参与者必须在三条推文的长度内编写代码以创造一幅艺术图像。具体来说,每位参赛者需用 C 设计三个函数:RD、GR …

哪种股票可以T+0交易?

股票市场T+0交易制度是实现市场公平,解决市场多空方失衡的重要市场机制。随着中国证券市场的发展,机构投资者占比大幅提升,市场投资者理性程度不断增加,监管机制也日渐完善,恢复T+0交易制度将是…

专业的批量剪辑软件推荐,在哪可以免费下载?免费吗?

今天推荐一款适合广大短视频创作者使用的专业的批量剪辑软件,它叫做超级编导批量剪辑软件,进入超级编导官网就可以立即免费下载,同时该软件支持免费试用。 不管你是做电商带货种草视频、本地生活推广视频,还是企业拓客类的获客视频…

SpotBugs代码检查:instanceof总是返回true(BC_VACUOUS_INSTANCEOF)

https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#bc-instanceof-will-always-return-true-bc-vacuous-instanceof 使用instanceof判断的时候,总是返回true,除非被检测的结果是null。遇到这种告警,可能是写代码的人理解错误…

无涯教程-JavaScript - IMCSC函数

描述 IMCSC函数以x yi或x yj文本格式返回复数的余割。 复数的余割定义为正弦的倒数。即 余割(z) 1 /正弦(z) 语法 IMCSC (inumber)争论 Argument描述Required/OptionalInumberA complex number for which you want the cosecant.Required Notes Excel中的复数只是简单…

过滤和分页源码、接口文档、jwt介绍和构成、base64编码、drf-jwt使用

过滤和分页源码 补充 #### 为什么在视图类中配置一个过滤类,就能走-filter_backends [SearchFilter,MyFilter]-GenericAPIView:继承APIVIew的视图类,是不能这样配置的----》自己过滤-filter_backends api_settings.DEFAULT_FILTER_BACKEN…

TVjar生成踩坑记录

近期TVBox及其衍生品很火,其中,jar更是主力军 github上有相关源码。 因为github总是被墙,想着能不能自己生成呢 于是开始折腾。 1、下载仓库 以这个为例 仓库下载地址 2、尝试在电脑生成jar 直接运行 buildAndGenJar.bat 3、报错 各…

使用Spring Gateway为对象存储系统MinIo和kkFileView文档预览增加登录验证

文章目录 1、kkfileview下载部署1.1、安装包部署运行1.1.1、物理机或虚拟机上运行1.1.2、Docker容器环境环境运行 1.2、接入说明 2、使用Spring Gateway增加登录认证2.1、网关实现代码2.2、文件服务实现代码2.3、Demo运行效果 官网介绍:kkFileView为文件文档在线预览…

浅谈安科瑞智能操控装置在上海特斯拉工厂配电工程的应用

0.背景 Background 2018年10月17日,上海市临港管委会表示,特斯拉(上海)有限公司已成功摘得上海临港装备产业区Q01-05地块864885平方米(合计1297.32亩)的工业用地。2019年1月7日,位于上海东南一…

C动态分配

动态分布与静态发布: 静态分配 1、 在程序编译或运行过程中,按事先规定大小分配内存空间的分配方式。int a [10] 2、 必须事先知道所需空间的大小。 3、 分配在栈区或全局变量区,一般以数组的形式。 4、 按计划分配。 动态分配 1、在程序运…

Alins - 化繁为简、极致优雅的WebUI框架

最近造了个js框架 Alins,分享一下: 🚀 Alins: 最纯粹优雅的WebUI框架 English | 文档 | 演练场 | 更新日志 | 反馈错误/缺漏 | Gitee | 留言板 0 简介 0.1 前言 Alins是一款极致纯粹、简洁、优雅的Web UI框架。秉持0-API、Less is More 的…