当我们都进入第三个月并寻找新项目来让我们保持参与时(阅读:理智),我们是否有兴趣学习计算机存储的基础知识?今年春天,我们已经悄悄地学习了一些必要的基础知识,例如如何测试磁盘速度以及到底什么是 RAID。在这些故事的第二个中,我们甚至承诺跟进探索 ZFS 中各种多磁盘拓扑的性能,ZFS 是您听说过的下一代文件系统,因为它的出现无处不在,从Apple到Ubuntu。
好吧,今天是探索的日子,ZFS 好奇的读者。事先知道,用 OpenZFS 开发人员 Matt Ahrens 低调的话来说,“这真的很复杂。”
但在我们得出数字之前——我保证它们会出现!——对于可以塑造相当于 8 个磁盘的 ZFS 的所有方式,我们首先需要讨论ZFS如何将您的数据存储在磁盘上。
Zpool、vdev 和设备
要真正了解 ZFS,您需要真正关注它的实际结构。ZFS 合并了传统的卷管理和文件系统层,它使用了写时复制事务机制——这两种机制都意味着系统在结构上与传统的文件系统和 RAID 阵列有很大不同。第一组主要组成部分的理解是zpools,vdevs和 devices。
水池
的zpool 是最上面的ZFS结构。一个 zpool 包含一个或多个vdevs,每个又包含一个或多个devices。Zpools 是独立的单元——一台物理计算机上可能有两个或多个独立的 zpools,但每个都完全独立于其他任何一个。Zpools 不能相互共享vdevs 。
ZFS 冗余是在vdev 级别,而不是zpool 级别。zpool 级别绝对 没有冗余——如果任何存储vdev 或SPECIAL vdev 丢失,整个zpool都会随之丢失。
现代 zpools 可以在 aCACHE 或LOG vdev丢失的情况下幸存下来 ——尽管它们可能会丢失少量脏数据,如果它们LOG 在断电或系统崩溃期间丢失了vdev。
ZFS“条带化”跨池写入是一种常见的误解,但这是不准确的。zpool 不是一个看起来很有趣的 RAID0——它是一个看起来很有趣的JBOD,具有可能会更改的复杂分发机制。
在大多数情况下,写入会根据可用的可用空间分布在可用的 vdev 上,因此理论上所有 vdev 将同时变满。在更新的 ZFS 版本中,还可能会考虑 vdev 利用率 - 如果一个 vdev 比另一个明显忙(例如:由于读取负载),尽管可用空间的比率最高,但可能会暂时跳过写入。
现代 ZFS 写入分发方法中内置的利用率意识机制可以在异常高负载期间减少延迟并增加吞吐量 - 但不应误认为是 随意将慢速 Rust 磁盘和快速 SSD 混合在同一个池中的全权委托。这种不匹配的池通常仍会执行,就好像它完全由当前最慢的设备组成。
虚拟机
每个zpool 由一个或多个vdevs(虚拟设备的简称)组成。反过来,每个 vdev 又由一个或多个实数组成devices。大多数 vdev 用于普通存储,但也存在几种特殊的 vdev 支持类,包括CACHE、LOG和 ,并且 SPECIAL. 这些 vdev 类型中的每一种都可以提供五种拓扑中的一种 - 单设备、RAIDz1、RAIDz2、RAIDz3 或镜像。
RAIDz1、RAIDz2 和 RAIDz3 是存储灰胡子所说的“对角奇偶校验 RAID”的特殊变体。1、2 和 3 指的是每个数据条带分配了多少奇偶校验块。RAIDz vdevs 不是将整个磁盘专用于奇偶校验,而是在磁盘上半均匀地分布该奇偶校验。RAIDz 阵列可能会丢失与奇偶校验块一样多的磁盘;如果它失去了另一个,它就会失败,并带走zpool它。
镜像 vdev 正是它们听起来的样子——在镜像 vdev 中,每个块都存储在 vdev 中的每个设备上。尽管两宽镜像是最常见的,但镜像 vdev 可以包含任意数量的设备——三路镜像在更大的设置中很常见,以获得更高的读取性能和抗故障能力。只要 vdev 中至少有一个设备保持健康,镜像 vdev 就可以承受任何故障。
单设备 vdev 也正是它们听起来的样子——而且它们本质上是危险的。单设备 vdev 无法在任何故障中幸存下来——如果它被用作存储或SPECIAL vdev,它的故障将使整个设备瘫痪zpool 。在这里要非常非常小心。
CACHE、LOG、 和SPECIAL vdevs 可以使用上述任何拓扑创建——但请记住,SPECIAL vdev 的丢失意味着池的丢失,因此强烈建议使用冗余拓扑。
标签:
免责声明:本文由用户上传,如有侵权请联系删除!