RAIDZ扩展码在OpenZFS Master中降落

2021-06-16 02:44:52

OpenZFS创建开发人员Matthew Ahrens将于上周将ZFS History-Raidz扩展大师的最追捧的特征合并到船舶中。新功能允许ZFS用户扩展单个RAIDZ VDev的大小。例如,您可以使用新功能将三个磁盘RAIDZ1转换为四个,五个或六个RAIDZ1。

OpenZFS是一个复杂的文件系统,事物必然会有点咀嚼,解释了该功能的工作原理。所以,如果你' zfs newbie,你可能想回到我们的综合zfs 101介绍。除了作为文件系统之外,ZFS还是一个存储阵列和卷管理器,这意味着您可以将其送到整个磁盘设备,而不仅仅是一个磁盘设备。 ZFS存储系统的核心是ZPool - 这是ZFS存储最基本的级别。 ZPool又包含vdevs,Vdevs包含它们中的实际磁盘。写入拆分为称为记录或块的单位,然后在VDEV中半均匀地分发。

存储vdev可以是五种磁盘,镜像,RAIDZ1,RAIDZ2或RAIDZ3中的五种类型之一。您可以将更多VDEV添加到ZPool,您可以将更多磁盘附加到单个或镜像vdev。但是,通过这种方式管理存储需要一些计划,并预算 - 哪些业余爱好者和家庭主妇经常areN' t太热情。

传统的RAID,不共享"池" ZFS的概念通常提供扩展和/或重塑阵列的能力。例如,您可以将单个磁盘添加到六个磁盘RAID6数组中,从而将其转换为七磁盘RAID6阵列。正在进行的活蛋白,特别是痛苦,特别是在几乎全阵列上;它完全可能需要这样的任务可能需要一周或更长时间,阵列性能限制在整个时间的正常常规或更少。

从历史上看,ZFS已经避免了这种扩展。 ZFS最初是为商业用途而开发的,而实时阵列重新塑造通常是商业世界中的非启动器。将存储'在最终的日子中对无法使用的水平丢弃,通常在工资单和开销中的成本更多,而不是购买完全新的硬件。现场扩展也是非常危险的,因为它涉及阅读和重写所有数据并将阵列放在临时,远远良好的测试中,而#34;一半,一半,"条件直到它完成。

对于具有许多磁盘的用户来说,新的RAIDZ扩展不太可能改变它们使用ZFS的方式。将VDEVS视为完整的单位而不是尝试在它们内部捣碎,它仍然更容易且更加实用。但是,使用单个vdev运行ZFS的业余爱好者,HomeBerbers和小用户可能会在新功能中获得大量使用。

从实际的角度来看,Ahrens'新的VDev扩展功能仅为现有命令添加新功能,即ZPool Attach,通常用于将磁盘添加到单个磁盘VDEV(将其转换为镜像Vdev)或将额外磁盘添加到镜子(for示例,将双磁盘镜像转换为三个磁盘镜像)。

使用新的代码,您也能将新磁盘附加到现有的RAIDZ VDEV。这样做扩展了宽度的vdev,但不会更改vdev类型,因此您可以将一个六磁盘RAIDZ2 VDEV转换为七磁盘RAIDZ2 VDEV,但您可以将其转换为七磁盘RAIDZ3。

在发出ZPool附件命令后,扩展开始。在扩展期间,每个块或记录从vdev读取正在扩展,然后重写。重写块的扇区在VDev中的所有磁盘中分发,包括新磁盘,但条带本身的宽度不会改变。因此,在扩展完成后,RAIDZ2 VDEV从六个磁盘扩展到十块仍然仍然充满六个条纹。

因此,虽然用户将看到新磁盘提供的额外空间,但由于新磁盘,扩展数据的存储效率不会改进。在上面的示例中,我们从一个六盘RAIDZ2开始,标称存储效率为67%(每六个扇区中的四个是数据)到一个十盘RAIDZ2。新写入十盘RAIDZ2的数据具有80%-八个扇区的标称存储效率是数据 - 但旧的扩展数据仍然用六个条纹写入,因此它仍然具有旧的储存效率旧的67% 。

值得注意的是,这是一个vdev的意外或奇异的状态,因为vdev是raidz已经使用动态,变量​​条带宽宽度来占块或记录太小,以在所有磁盘上条纹。一个vdev。

例如,如果您编写单个元数据块 - 包含文件' s名称,权限和磁盘上的位置的数据 - 它适合磁盘上的单个扇区。如果您将元数据块写入一个十宽的RAIDZ2,则您不会写一个完整的十宽条纹,而是写一个尺寸的块宽的块;单个数据扇区加上两个奇偶校长扇区。所以"尺寸"在一个新扩展的RAIDZ VDEV aren' t的东西是zfs困惑的东西。他们'在办公室旁边只是另一天。

正如我们上面所讨论的那样,一个新扩展的RAIDZ VDev Won' t看起来非常像是那种从&#34那样设计的那样;诞生" - 至少,不是起初。虽然混合中有更多的磁盘,但数据的内部结构是' t的变化。

向VDEV添加一个或多个新磁盘意味着它应该能够稍高的吞吐量。即使遗留块Don' t跨越Vdev的整个宽度,所添加的磁盘意味着更多主轴以分配工作。这可能会赢得' t制作了jaw滴加速度,但七碟vdev上的六个条纹意味着您仍然可以同时读取或写两个块,因此可能有任何速度改进很小。

对性能的净影响可能很难预测。例如,如果从六个磁盘RAIDZ2扩展到七磁盘RAIDZ2,例如,您的原始六磁盘配置并没有任何填充。可以将128kib块均匀地切成四个32kib数据片,两个32kib奇偶校验件。七个磁盘之间的相同记录拆分需要填充,因为128kib /五个数据件并未出现偶数扇区。

同样,在某些情况下 - 特别是小型记录或volblocksize-vollblocksize - 每个磁盘的工作量可能在较旧的,比较更广泛的更广泛的较窄的布局中可能会显着降低。将128kib块分成32kib块,用于六个RAIDZ2,每个磁盘可以更有效地读取或写入,而不是一个分成16kib件的十宽RAIDZ2,例如 - 所以它'无论是更多的克拉皮郡磁盘但较小的碎片将提供更多吞吐量,而不是更少的磁盘,但较大的碎片。

您可以确定的一件事是,新扩展的配置通常应执行以及原始的非扩展版本 - 一旦大多数数据是(重新)以新宽度编写,扩展VDev Won&#39 ; t执行任何不同,或者与从一开始时那样的任何不那么可靠。

初始扩展过程似乎奇怪的是,初始扩展过程并在新的宽度上重写所有现有块,而att#39;毕竟,它'无论如何阅读和重新编写数据,对吧?我们要求Ahrens为什么原始宽度留下,并且答案归结为"它更容易,更安全。"

识别的一个关键因素是在技术上,扩展ISN' T移动块;它'只是移动扇区。它的方式'编写的,扩展代码没有必要知道ZFS'逻辑块边界是 - 扩展例程不知道单个扇区是否是奇偶校验或数据,更不用说它属于哪个阻止它。

扩展可以遍历所有块指针来定位块边界,然后它将知道哪个扇区属于哪个块以及如何重塑块,而是根据Ahrens,做任何方式对ZFS&#39的方式非常侵入。磁盘格式。扩展需要在MetasLabs上不断更新SpaceMaps,以解释每个块的磁盘大小的变化 - 如果块是数据集的一部分,而不是zvol,更新每位数据集和每文件空间会计出色地。

如果它真的让你的牙齿痒痒地知道你在新鲜五个Vdev上有四个条纹,你可以在扩展完成后立即阅读并重新编写数据。最简单的方法是使用ZFS快照,ZFS发送,ZFS接收以复制整个数据集和ZVols。如果您'重新担心ZFS属性,简单的MV操作将完成技巧。

然而,在大多数情况下推荐我们在大多数情况下推荐放松和让ZFS做它的事情。来自旧数据的overmed块areN' t真正伤害了任何东西,当您自然删除和/或改变Vdev的使用寿命时,大多数都将根据需要自然地重新编写,而无需管理员干预或者由于痴迷阅读和重新编写所有内容,长期高存储负荷。

Ahrens'新的代码在OpenZFS Master中,但尚未成为任何OpenZFS发布的一部分,更不用说别的人添加到其他人和#39;我的存储库中。当我们期望在生产中看到代码时,我们问了Ahrens,不幸的是,它将是一段时间。

RAIDZ扩展命中硕士太晚了,即即将到来的OpenZFS 2.1发布,预计很快(现在可以使用2.1发布候选人7)。它应该包含在下一个主要的OpenZFS释放中;它&#39为混凝土日期太早,但主要发布通常每年发生一次。

广泛地说,我们预计RAIDZ扩张在2022年8月2022年8月的某个地方的ubuntu和freebsd的应用中击中了生产,但是猜测。 Truenas可能会很好地将其进入生产中的生产,因为在官方命中释放状态之前,IxSystems倾向于从Master中提取ZFS功能。