所有 RAID 级别都用于将多个设备组合成一个单独的 MD 阵列。MD 插件是一个区域管理器,因此 EVMS 将 MD 阵列称为“区域”。MD 可以使用磁盘、段或其他区域创建这些区域。这意味着可以使用其他 RAID 区域创建 RAID 区域,从而在单个卷堆栈中组合多个 RAID 级别。
以下小节描述了每个 Linux RAID 级别的特性。在 EVMS 中,这些级别可以被视为 MD 插件的子模块。
线性 RAID 区域通过将对象彼此附加来组合对象。线性写入(或读取)MD 区域首先写入第一个子对象。当该对象已满时,写入继续到第二个子对象,依此类推,直到最后一个子对象已满。线性 RAID 区域的子对象不必大小相同。
优点
线性 RAID 提供了一种使用多个小对象构建非常大区域的简单方法。
缺点
线性 RAID 不是“真正的” RAID,因为它没有数据冗余。如果一个磁盘崩溃,RAID 区域将不可用,并将导致该区域上部分或全部数据丢失。
线性 RAID 几乎没有或没有性能优势。这些对象以简单的线性方式组合,不允许对多个子对象进行太多(如果有的话)并行 I/O。线性 RAID 的性能通常相当于单个磁盘的性能。
RAID-0 通常被称为“条带化”。这意味着 RAID-0 区域中的数据均匀分布并交错在所有子对象上。例如,当将 16 KB 的数据写入具有三个子对象且块大小为 4 KB 的 RAID-0 区域时,数据将按如下方式写入
4 KB 到对象 0
4 KB 到对象 1
4 KB 到对象 2
4 KB 到对象 0
优点
与线性 RAID 类似,RAID-0 提供了一种使用多个小对象构建非常大区域的简单方法。
通常,RAID-0 提供 I/O 性能改进,因为它可以分解大型 I/O 请求,并在多个磁盘上并行提交它们。
缺点
与线性 RAID 类似,RAID-0 也不是“真正的” RAID,因为它没有数据冗余(因此得名 RAID“零”)。如果一个磁盘崩溃,RAID 区域将不可用,并可能导致该区域上所有数据丢失。
RAID-1 通常被称为“镜像”。RAID-1 区域中的每个子对象都包含区域中数据的相同副本。写入 RAID-1 区域会导致数据同时写入所有子对象。从 RAID-1 区域读取可以导致从任何一个子对象读取数据。RAID-1 区域的子对象不必大小相同,但区域的大小将等于最小子对象的大小。
优点
RAID-1 提供完整的数据冗余。在由 N 个子对象组成的 RAID-1 区域中,最多可以有 N-1 个对象崩溃,而该区域仍可运行,并且可以从剩余对象中检索数据。
RAID-1 可以提高 I/O 读取的性能。由于所有子对象都包含数据的完整副本,因此可以在所有对象之间进行负载均衡,以处理多个读取请求。
缺点
RAID-1 可能会导致 I/O 写入的性能下降。由于每个子对象都必须具有数据的完整副本,因此每次写入区域都必须复制并发送到每个对象。只有当所有复制的写入都完成到子对象后,写入请求才能完成。
具有 N 个磁盘的 RAID-1 区域的成本是单个磁盘的 N 倍,但仅提供单个磁盘的存储空间。
RAID-4/5 通常被称为“带奇偶校验的条带化”。与 RAID-0 类似,RAID-4/5 区域中的数据被条带化或交错在所有子对象上。但是,在 RAID-4/5 中,还为每个数据条带计算并记录奇偶校验信息,以便在其中一个对象丢失时提供冗余。如果发生磁盘崩溃,则可以根据剩余磁盘上的数据和奇偶校验信息恢复该磁盘的数据。
在 RAID-4 区域中,单个子对象用于存储每个数据条带的奇偶校验信息。但是,这可能会导致此单个对象上的 I/O 瓶颈,因为每次 I/O 写入区域都必须更新奇偶校验信息。
在 RAID-5 区域中,奇偶校验均匀分布在区域中的所有子对象上,从而消除了 RAID-4 中的奇偶校验瓶颈。RAID-5 提供了四种不同的算法来确定奇偶校验的分布方式。实际上,RAID-4 通常被认为是 RAID-5 的一种特殊情况,其奇偶校验算法只是使用一个对象而不是所有对象。这是 Linux 和 EVMS 使用的观点。因此,RAID-4/5 级别通常仅被称为 RAID-5,而 RAID-4 只是五种可用的奇偶校验算法之一。
优点和缺点
与 RAID-1 类似,RAID-4/5 在发生硬件故障时提供冗余。但是,与 RAID-1 不同,RAID-4/5 只能承受单个对象的丢失。这是因为只记录了一个对象值的奇偶校验。如果丢失的对象超过一个,则没有足够的奇偶校验信息来恢复丢失的数据。
RAID-4/5 提供的冗余比 RAID-1 更具成本效益。具有 N 个磁盘的 RAID-4/5 区域提供的存储空间是单个磁盘的 N-1 倍。冗余的成本仅为区域中单个磁盘的成本。
与 RAID-0 类似,RAID-4/5 通常可以提供 I/O 性能改进,因为大型 I/O 请求可以被分解并并行提交到多个子对象。但是,在 I/O 写入方面,性能提升将小于 RAID-0,因为每次服务写入请求时都必须计算并重写奇偶校验信息。此外,为了在 I/O 写入方面提供任何性能改进,必须为最近访问的条带维护内存缓存,以便可以快速重新计算奇偶校验信息。如果收到对未在缓存中的数据条带的写入请求,则必须首先从磁盘读取该条带的数据块才能计算奇偶校验。如果此类缓存未命中发生过于频繁,则 I/O 写入性能可能比线性 RAID 区域更差。
多路径区域由一个或多个对象组成,就像其他 RAID 级别一样。但是,在多路径中,子对象实际上代表通往同一物理磁盘的多个物理路径。这种设置通常在具有光纤连接存储设备或 SAN 的系统上找到。
多路径实际上不是 RAID 标准的一部分,但已添加到 Linux MD 驱动程序中,因为它提供了一个方便的位置来创建由多个底层设备组成的“虚拟”设备。
之前的 RAID 级别都可以使用各种存储设备创建,包括通用的本地连接磁盘(例如,IDE 和 SCSI)。但是,只有当硬件实际上包含通往存储设备的多个物理路径时,才能使用多路径,并且此类硬件通常在高档系统上可用,这些系统具有光纤或网络连接存储。因此,如果您不知道是否应该使用多路径模块,那么您很可能不需要使用它。
与 RAID-1 和 RAID-4/5 类似,多路径提供针对硬件故障的冗余。但是,与这些其他 RAID 级别不同,多路径保护的是通往设备的路径中的故障,而不是设备本身的故障。如果其中一条路径丢失(例如,网络适配器损坏或光纤电缆被拔出),I/O 将重定向到剩余路径。
与 RAID-0 和 RAID-4/5 类似,多路径可以通过在各种路径之间进行负载均衡 I/O 请求来提供 I/O 性能改进。