答: RAID 是一种将多个磁盘驱动器组合成一个单一实体的方法,以提高性能和/或可靠性。RAID 有多种不同的类型和实现方式,每种方式都有其自身的优点和缺点。例如,通过在两个磁盘上放置相同数据的副本(称为磁盘镜像,或 RAID 级别 1),可以通过交替从镜像中的每个磁盘读取来提高读取性能。平均而言,每个磁盘的负载都较低,因为它仅处理 1/2 的读取(对于两个磁盘),或 1/3(对于三个磁盘)等。此外,镜像可以提高可靠性:如果一个磁盘发生故障,则另一个磁盘(或多个磁盘)具有数据的副本。将磁盘组合成一个整体的不同方式,称为 RAID 级别,可以提供比简单镜像更高的存储效率,或者可以改变延迟(访问时间)性能或吞吐量(传输速率)性能,以进行读取或写入,同时仍然保留对于防止故障有用的冗余。虽然 RAID 可以防止磁盘故障,但它不能防止操作员和管理员(人为)错误,也不能防止由于编程错误(可能由于 RAID 软件本身的错误)造成的损失。网上充斥着系统管理员搞砸 RAID 安装并丢失所有数据的悲惨故事。RAID 不能替代频繁的、定期计划的备份。
RAID 可以在硬件中实现,以专用磁盘控制器的形式,或者在软件中实现,作为内核模块,该模块位于低级磁盘驱动程序和位于其上的文件系统之间。RAID 硬件始终是“磁盘控制器”,即可以连接磁盘驱动器的设备。通常,它以适配器卡的形式出现,该卡将插入 ISA/EISA/PCI/S-Bus/MicroChannel 插槽。但是,一些 RAID 控制器采用盒子的形式,该盒子连接到普通系统磁盘控制器和磁盘驱动器之间的电缆中。小的可以安装在驱动器托架中;大的可以内置到带有自身驱动器托架和电源的存储柜中。与最新和最快的 CPU 一起使用的最新 RAID 硬件通常会提供最佳的整体性能,尽管价格昂贵。这是因为大多数 RAID 控制器都配备了板载 DSP 和内存缓存,可以从主 CPU 上卸载大量的处理工作,并允许高传输速率进入大型控制器缓存。旧的 RAID 硬件在与较新的 CPU 一起使用时可能会充当“减速器”:昨天的精美 DSP 和缓存可能会成为瓶颈,并且其性能通常会被纯软件 RAID 和新型但普通的磁盘控制器所超越。如果 RAID 硬件可以利用磁盘主轴同步及其对磁盘盘片位置(相对于磁盘头)以及所需磁盘块的了解,则 RAID 硬件可以提供优于纯软件 RAID 的优势。然而,大多数现代(低成本)磁盘驱动器无论如何都不提供此信息和控制级别,因此,大多数 RAID 硬件都没有利用它。RAID 硬件通常在不同的品牌、制造商和型号之间不兼容:如果 RAID 控制器发生故障,则必须更换为相同类型的另一个控制器。截至本文撰写之时(1998 年 6 月),各种各样的硬件控制器都可以在 Linux 下运行;但是,它们目前都没有附带在 Linux 下运行的配置和管理实用程序。
Software-RAID(软件 RAID)是一组内核模块,以及管理实用程序,它们纯粹在软件中实现 RAID,并且不需要非凡的硬件。Linux RAID 子系统作为内核中的一层实现,该层位于低级磁盘驱动程序(用于 IDE、SCSI 和 Paraport 驱动器)和块设备接口之上。文件系统,无论是 ext2fs、DOS-FAT 还是其他,都位于块设备接口之上。Software-RAID(软件 RAID)由于其软件特性,往往比硬件解决方案更灵活。缺点是,与相当的硬件系统相比,它当然需要更多的 CPU 周期和功耗才能良好运行。当然,成本是无与伦比的。软件 RAID 还有一个重要的区别特征:它在分区到分区的基础上运行,其中许多单独的磁盘分区被组合在一起以创建 RAID 分区。这与大多数硬件 RAID 解决方案形成对比,后者将整个磁盘驱动器组合成一个阵列。使用硬件,RAID 阵列的存在对于操作系统来说是透明的,这往往简化了管理。使用软件,有更多的配置选项和选择,这往往使事情复杂化。
截至本文撰写之时(1998 年 6 月),在 Linux 下管理 RAID 远非易事,最好由经验丰富的系统管理员尝试。操作理论很复杂。系统工具需要修改启动脚本。并且从磁盘故障中恢复并非易事,并且容易出现人为错误。RAID 不适合新手,它可能带来的可靠性和性能优势很容易被额外的复杂性所抵消。实际上,现代磁盘驱动器非常可靠,现代 CPU 和控制器非常强大。您可能更容易通过购买更高质量和/或更快的硬件来获得所需的可靠性和性能水平。
答: 不同的 RAID 级别具有不同的性能、冗余、存储容量、可靠性和成本特性。大多数但并非所有 RAID 级别都提供针对磁盘故障的冗余。在提供冗余的级别中,RAID-1 和 RAID-5 是最流行的。RAID-1 提供更好的性能,而 RAID-5 提供更有效地利用可用存储空间。然而,性能调整完全是另一回事,因为性能在很大程度上取决于各种因素,从应用程序的类型到条带、块和文件的大小。性能调整的更困难的方面将推迟到本 HOWTO 的后面部分。以下描述了 Linux 软件 RAID 实现中不同的 RAID 级别。
- RAID-linear(RAID-线性)是分区的简单串联,以创建更大的虚拟分区。如果您有多个小驱动器,并希望创建一个单一的大分区,则它很方便。此串联不提供冗余,实际上降低了整体可靠性:如果任何一个磁盘发生故障,组合分区将失败。
- RAID-1 也被称为“镜像”。两个(或更多)分区,所有分区大小相同,每个分区都存储所有数据的精确副本,逐个磁盘块。镜像为防止磁盘故障提供了强大的保护:如果一个磁盘发生故障,则另一个磁盘具有相同数据的精确副本。镜像还可以帮助提高 I/O 负载系统的性能,因为读取请求可以在多个磁盘之间分配。不幸的是,镜像在存储效率方面也是最低的:两个镜像分区存储的数据不能超过一个分区。
- Striping(条带化)是所有其他 RAID 级别背后的基本概念。条带是磁盘块的连续序列。条带可以短至单个磁盘块,也可以由数千个磁盘块组成。RAID 驱动程序将其组件磁盘分区拆分为条带;不同的 RAID 级别在如何组织条带以及在其中放入什么数据方面有所不同。条带的大小、文件系统中文件的典型大小以及它们在磁盘上的位置之间的相互作用决定了 RAID 子系统的整体性能。
- RAID-0 非常像 RAID-linear,只是组件分区被分成条带,然后交错排列。与 RAID-linear 一样,结果是一个更大的虚拟分区。与 RAID-linear 一样,它不提供冗余,因此会降低整体可靠性:单个磁盘故障将导致整个系统瘫痪。通常声称 RAID-0 比简单的 RAID-linear 提高了性能。然而,这可能为真,也可能不为真,具体取决于文件系统的特性、文件与条带大小相比的典型大小以及工作负载的类型。
ext2fs
文件系统已经将文件分散在整个分区中,以尽量减少碎片。因此,在最简单的级别上,任何给定的访问都可能转到多个磁盘中的一个,因此,跨多个磁盘交错排列条带似乎没有提供额外的优势。然而,存在性能差异,并且这些差异取决于数据、工作负载和条带大小。
- RAID-4 像 RAID-0 一样交错排列条带,但它需要一个额外的分区来存储奇偶校验信息。奇偶校验用于提供冗余:如果任何一个磁盘发生故障,则可以使用剩余磁盘上的数据来重建故障磁盘上的数据。给定 N 个数据磁盘和一个奇偶校验磁盘,奇偶校验条带是通过从每个数据磁盘中取一个条带并将它们进行 XOR 运算来计算的。因此,(N+1) 磁盘 RAID-4 阵列的存储容量为 N,这比镜像 (N+1) 个驱动器要好得多,并且几乎与大型 N 的 RAID-0 设置一样好。请注意,对于 N=1,其中有一个数据驱动器和一个奇偶校验驱动器,RAID-4 非常像镜像,因为两个磁盘中的每一个都是彼此的副本。但是,RAID-4 不提供镜像的读取性能,并且提供的写入性能显着降低。简而言之,这是因为更新奇偶校验需要读取旧的奇偶校验,然后才能计算和写出新的奇偶校验。在写入量大的环境中,奇偶校验磁盘可能会成为瓶颈,因为每次写入都必须访问奇偶校验磁盘。
- RAID-5 通过交替地将奇偶校验条带存储在每个驱动器上来避免 RAID-4 的写入瓶颈。然而,写入性能仍然不如镜像,因为在写入之前仍然必须读取和 XOR 奇偶校验条带。读取性能也不如镜像好,因为毕竟只有一个数据副本,而不是两个或更多。RAID-5 相对于镜像的主要优势在于,当与三个或更多驱动器一起使用时,它提供冗余和针对单驱动器故障的保护,同时提供更大的存储容量。
- RAID-2 和 RAID-3 很少再使用,并且在某种程度上已被现代磁盘技术淘汰。RAID-2 类似于 RAID-4,但存储 ECC 信息而不是奇偶校验。由于所有现代磁盘驱动器都在底层集成了 ECC,因此这提供的额外保护很少。如果在写入期间断电,RAID-2 可以提供更高的数据一致性;然而,电池备份和干净的关机可以提供相同的好处。RAID-3 类似于 RAID-4,只是它使用尽可能小的条带大小。因此,任何给定的读取都将涉及所有磁盘,使得重叠的 I/O 请求变得困难/不可能。为了避免由于旋转延迟造成的延迟,RAID-3 要求所有磁盘驱动器主轴同步。大多数现代磁盘驱动器都缺乏主轴同步能力,或者,如果能够做到,则缺乏所需的连接器、电缆和制造商文档。Linux Software-RAID 驱动程序不支持 RAID-2 和 RAID-3。
- Other RAID levels(其他 RAID 级别)已由各种研究人员和供应商定义。其中许多代表在另一种 RAID 之上分层一种 RAID 类型。有些需要特殊的硬件,另一些则受专利保护。对于这些其他级别,没有普遍接受的命名方案。有时,这些其他系统的优势很小,或者至少在系统高度紧张之前并不明显。除了在 RAID-0/linear 之上分层 RAID-1 之外,Linux 软件 RAID 不支持任何其他变体。