当设备大小不同时,RAID0 在底层如何工作?

当设备大小不同时,RAID0 在底层如何工作?

令我惊讶的是,CentOS 7 安装程序允许我创建一个 RAID0 设备,其中包含大约 17 GB 磁盘和 26 GB 磁盘。我预计即使允许,逻辑大小也将是2 * min(17 GB, 26 GB) ~= 34 GB.但我确实可以在文件系统级别看到 44 GB 的可用大小:

$ cat /sys/block/md127/md/dev*/size
16955392
26195968
$ df -h |grep md
/dev/md127   44G 1.9G 40G 5% /

与磁盘相同的情况相比,md 子系统的性能表现如何?因为不可能在 2 个磁盘上进行简单的平衡条带化。

答案1

raid.wiki.kernel.org说:

RAID0/条带模式:设备应该(但不必)具有相同的大小。 [...] 如果一个设备比其他设备大得多,则 RAID 设备中仍会利用额外的空间,但在 RAID 设备的高端写入期间,您将单独访问这个较大的磁盘。这当然会损害性能。

虽然这个措辞有点尴尬,但是mdadm 的维基百科页面是这样说的:

RAID 0 – 块级条带化。 MD可以处理不同长度的设备,较大设备上的额外空间不会被条带化。

因此,对于大小分别为 4 和 2 个“块”的两个磁盘的简化情况,您得到的可能如下所示:

disk0  disk1
00     01
02     03
04
05

读取“块”04-05 必须仅从 disk0 完成,因此那里没有条带化优势。md设备应该是可分区的,因此您可以在设备的开头和结尾处进行分区测试,看看速度差异是否变得明显。

答案2

从手册页md(4)

   The RAID0 driver assigns the first chunk of the array to the
   first device, the second chunk to the second device, and so on
   until all drives have been assigned one chunk.  This collection
   of chunks forms a stripe.  Further chunks are gathered into
   stripes in the same way, and are assigned to the remaining space
   in the drives.

   If devices in the array are not all the same size, then once the
   smallest device has been exhausted, the RAID0 driver starts
   collecting chunks into smaller stripes that only span the drives
   which still have remaining space.

答案3

是的,性能会受到影响。在您的情况下,您的两个磁盘上有两个分区,第一个分区是 17GB,第二个分区是 26G。

raid0 磁盘的最终大小约为 17+26=43GB。当写入第一个 2*17=34GB 时,性能如常:大约是单个磁盘的两倍(假设总线吞吐量足够)。写入最后26-17=9GB时,性能与单盘相同。

因此,如果您主要出于性能原因而使用 raid0,则应避免分区大小之间存在显着差异。

如果您像使用较小的分区创建较大的分区一样方便地使用它,那么这通常不会成为问题。在这种情况下,您将获得一些性能提升的额外好处。如果您不关心性能,请使用,linear代替raid0, 以便在发生硬件故障时更轻松地恢复数据。

相关内容