RAID 0为什么不能利用两个不同大小的磁盘上的所有磁盘空间?


10

引用有关RAID的Wikipedia文章

可以使用大小不同的磁盘创建RAID 0,但是每个磁盘添加到阵列的存储空间仅限于最小磁盘的大小。例如,如果将100 GB的磁盘与350 GB的磁盘条带化,则阵列的大小将为200 GB(100 GB×2)。

但是,本文没有说明为什么不能将它们一起RAID并耗尽整个磁盘空间。我知道条带化是在两者之间进行写操作,但是在运行性能下降的同时,它肯定不应该阻止写入第二个磁盘的后续扇区吗?是否有提供这种功能的备用RAID系统(例如软件RAID)?


我不确定这是否适用于某些硬件袭击但适用于软件袭击,为了利用袭击0的某些方面,同时在两个大小不同的驱动器(例如一个100GB和一个350GB)上使用更多可用空间,您可以尝试创建3个较大驱动器上有100GB分区,并在第一个驱动器上划分了100KB分区,在第二个驱动器上划分了3个100GB分区。突袭等级0将为您提供400个演出的使用空间,同时还可以提高读/写性能,但它可能比您对两个200GB的驱动器进行条带化要少。
基思·雷诺兹

通常,您不希望这样做。出于演示目的,我使用一个1G和16G闪存驱动器设置了RAID0。我做了一个扩展分区,填满了每个磁盘。然后,我在每个驱动器上做了一个981MB的分区,直到它们满为止。然后我在Linux上使用命令使用16个分区进行了突袭mdadm --create --verbose /dev/md0 --chunk=512 -l0 -n16 /dev/sdd5 /dev/sde5 /dev/sde6 /dev/sde7 /dev/sde8 /dev/sde9 /dev/sde10 /dev/sde11 /dev/sde12 /dev/sde13 /dev/sde14 /dev/sde15 /dev/sde16 /dev/sde17 /dev/sde18 /dev/sde19。我结束了更少的空间比原先我只是使用了16GB的驱动器
基思·雷诺兹

Answers:


11

将大小限制为最小磁盘大小的原因与“交替”写入条带且必须具有相同大小这一事实有关。

在两磁盘系统中,所有奇数条带都在一个磁盘上,偶数条带在另一磁盘上。在磁盘之间交替写入,奇/偶/奇/偶/ ...

由于条带的大小必须相同且成对(对于两个磁盘),因此最大可用空间限制为2 *(最小磁盘的大小)。


3

可以使用剩余空间。您可以使用剩余空间创建卷,甚至可以将其用作另一个RAID的一部分。但是,由于两个不同的进程可能正在尝试访问同一物理控制器和磁盘,因此使用此额外空间将降低RAID 0为您提供的性能。

您为什么不能将此额外空间添加到原始RAID?好吧,由于RAID使用的算法,因此无需赘述。RAID 0先写入RAID中的第一个磁盘,然后再写入下一个磁盘。这可以提高性能,因为它不必等待先前的磁盘完成读取或写入操作。如果使用帖子中的250 GB,则大部分写入操作将写入第一个磁盘,几乎消除了任何性能提升。

RAID可能不是您要寻找的解决方案,如果要使用驱动器的所有空间,则应该跨越卷。跨接使您可以容纳多个卷并将它们串联在一起。跨越不提供性能提升或冗余。


这并不能解释为什么不能在一个卷中同时使用两个驱动器。另外,单独的卷部分根本不会引起性能问题-低级别的磁盘IO控制是通过disk.sys的中断来处理的,因此无论如何都对读/写请求进行了管道传输,Windows也支持重叠的IO。
多项式

好的,您的更新仍然没有解释。我熟悉条带化的工作原理,但这并不能解释为什么一旦较小的磁盘已满,它就不能仅仅降至单磁盘模式(具有标准的单磁盘性能)。感谢您提及音量跨度-看起来很有用。
多项式

1
因为那就是RAID的工作方式。如果确实需要,则可以将RAID 0设置为可用,然后创建具有可用空间的卷,然后跨越RAID和额外的卷。但是我不认为任何RAID控制器都能让您做到这一点。您可能可以结合使用硬件和软件RAID来做到这一点。
Keltari

1
-1“这将提高性能,因为它不必等待先前的磁盘完成读取或写入操作”,对于RAID 0中两个不同大小的硬盘也可以这样说
Celeritas 2013年

2
@Polynomial那不是RAID0。您问为什么RAID 0无法使用所有磁盘空间,然后您回答“为什么不能...”。不能,因为它是RAID0。如果它做了其他事情,那将是其他事情。
David Schwartz 2014年

0

RAID是一种伪标准,描述了如何将数据存储在磁盘阵列上。该标准描述了四种存储数据的方式(技术上更多,但几乎没人在乎其他方式):

突袭-0:条纹。每个数据块均在RAID设备的每个成员之间分配。没有冗余,因此它更多的是廉价磁盘阵列,而不是廉价磁盘冗余阵列。

突袭1:镜像。每个数据块都存储在阵列中的每个磁盘上。因为只有两个磁盘,所以才真正做到这一点。RAID 1/0或仅RAID 10是镜像和条带化的组合,可用于利用两个以上的磁盘。

突袭5:平价。每个数据块均在RAID设备的每个成员之间拆分+一个磁盘专用于奇偶校验。

RAID 6:双重奇偶校验:与RAID 5相同,但具有两个奇偶校验磁盘。

而已。Raid并未描述如何解决大小不匹配或其他问题,但条带化仅适用于大小相同的磁盘。通常,解决此问题的方法是可以将剩余空间用作单独的磁盘驱动器。

摆脱RAID作为创建大型磁盘阵列的一种方式,您可以使用ZFS之类的东西,只需将磁盘添加到存储池即可。ZFS将始终尝试尽可能高效地使用两个磁盘,并且您可以告诉ZFS您对哪种冗余级别感到满意。

先前的技术是诸如卷映射(例如LVM或与Windows等效)之类的技术,它抽象了将块映射到磁盘的想法。使用LVM,您可以跨磁盘,扩展分区,具有非连续分区等。卷映射不是RAID,而是随磁盘增加而提高性能,它只是根据文件系统中的位置随机选择写入一个磁盘或另一个磁盘。这被称为扩展,如果要使用IOPS而不是原始性能,它通常比RAID更好。


0
A RAID 0 can be created with disks of differing sizes, but the storage
space added to the array by each disk is limited to the size of the
smallest disk.

这可以是正确的,并且对于大多数RAID0实现都是正确的。但是,并非全部。

使用RAID 0的原因有两个:

  1. 将多个磁盘合并为一个大卷。
  2. 性能。

选项2是最常见的选项,我认为几乎所有当前的RAID 0实现中都会使用它。技术上的解释是信息在磁盘之间交替写入。

以非技术的方式:将磁盘视为两本书。这些书的访问(读/写)速度有限。因此,我们而不是将两本100页的书重新格式化为两本书,而是将页重新编号,以便所有偶数写在一本书中,而所有奇数写在另一本书中。

现在,我们的新“ R0书”的行为就在于它是否是一本书,其页数和速度都翻了一番。


选项1可以很简单,例如“背对背胶”。在这种情况下,您无法提高速度,但可以粘贴不同页数的书。我似乎想起了1990年左右的一些“ RAID0”实现。但这并不是大多数人认为的“适当的RAID 0”。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.