作者:Daniel Robbins
安装与简介
新 Linux 2.4 内核出现了!应该立即找一台空闲 PC,装上 Linux,看看它能做些什么!在 Daniel Robbins 关于 Linux 2.4 软件 RAID 的两篇文章中,他引入了一种通过将数据分布在多个磁盘上来增强磁盘性能和可靠性的新技术。第一部分讨论软件 RAID 的安装(内核及工具的安装),并说明如何创建线性卷和 RAID-0 卷。
这个新内核包含许多极好的新功能和增强功能。其中之一就是包含了流行的软件 RAID 的实现。软件 RAID 使您不必购买昂贵的硬件 RAID 控制器和附件就能极大地增强 Linux 磁盘的 IO 性能和可靠性。由于 Linux RAID 是用软件实现的,所以它灵活、速度快 ... 而且有趣!
RAID 奇迹
软件 RAID 的概念很简单 -- 使您可以将两个或多个块设备(通常是磁盘分区)组合为单个 RAID 设备。我们假定您有三个空分区:hda3、hdb3 和 hdc3。使用软件 RAID,您就能将这些分区组合起来,并将它们作为单个 RAID 设备 /dev/md0 来处理。接下来就可以格化 md0,为其创建文件系统,并像任何其他分区一样使用它。还有许多不同的配置 RAID 卷的方法 -- 一些用于最大化性能,一些用于最大化可用性,而另一些二者兼具。
有两种 RAID 形式:线性模式和 RAID-0 模式。从技术上讲,二者都不是 RAID,因为 RAID 代表“廉价磁盘冗余阵列”,而 RAID-0 和线性模式都不提供任何类型的数据冗余。然而,两种模式 -- 尤其是 RAID-0 模式 -- 都非常有用。我首先概述这两种 "RAID" 形式,随后将逐步指导您在您的系统上安装软件 RAID。
线性模式简介
线性模式是将两个或多个块设备组合为一个 "RAID" 卷的最简便方法之一 -- 只是将设备连接起来。如果您有三个分区,hda3、hdb3 和 hdc3,每个分区的容量大约 2G,它们将构成一个 6G 的合成线性卷。线性卷的前三分之一位于 hda3 上,后三分之一位于 hdc3 上,中间三分之一位于 hdb3 上。
要配置线性卷,您至少要有两个要连接的分区。它们可以大小不同,甚至可以同时属于一个物理磁盘上,而不会对性能产生负面影响。
线性应用
线性模式是将同一磁盘上的两个或多个分区组合为单个卷的最好方法。尽管用其他 RAID 技术这么做可能导致巨大的性能损失,但线性模式不存在这个问题,因为它不以并行方式(像其它 RAID 模式那样)对各组成分区进行写操作。但也正是由于这一原因,线性模式与 RAID-0、RAID-4、RAID-5 相比有性能不足的倾向,在某种程度上也不如 RAID-1。
一般说来,线性模式并不会在非传统 RAID 分区的基础上提供任何性能改善。事实上,如果您的线性卷分布于多个磁盘上,它就很可能由于偶然的硬盘故障而变得不可用。线性卷的故障概率等于线性卷的组成物理磁盘和控制器的故障概率之和。如果一个物理磁盘报废,线性卷通常不可恢复。线性模式与使用单一磁盘相比不会产生额外的冗余。
但是线性模式是避免对单个磁盘进行重新分区的极好方法。例如,假定您的第二个 IDE 驱动器有两个未用的分区(hdb1 和 hdb3)。并假定由于关键数据在 hdb2 上,您无法对驱动器重新分区。您仍可以运用线性模式将 hdb1 和 hdb3 组合为具有内聚性的单一线性卷。
当您只需要一个单独的大分区(并且确实没必要提高性能)时,线性模式也是将不同磁盘上大小相异的分区组合起来的一种好方法。但对于除此以外的任何其它工作,您可以使用比 RAID 更好的技术。
RAID-0 模式简介
RAID-0 也是一种不带任何 "R"(冗余)的 "RAID" 模式。尽管如此,RAID-0 还是极其有用的。这主要是因为它是各种 RAID 模式中性能潜力最大的一种模式。
要安装 RAID-0 卷,您需要有两个或多个大小相同(或是几乎相同)的分区。RAID-0 代码将在所有的组成分区之间均分读写。通过在各组成设备之间并行读写,RAID-0 成倍提高了 IO 性能。如果不考虑控制器和总线带宽的复杂性,则由位于两个相同磁盘上的两个分区构成的 RAID-0 卷能提供几乎两倍于传统分区的性能。如果将您的 RAID-0 卷分布到三个磁盘,则性能也几乎是原来的三倍。这就是 IDE 磁盘的 RAID-0 阵列优于市面上最快的 SCSI 或 FC-AL 驱动器的原因。为了真正增强性能,您可以在 RAID-0 阵列中安装一组 SCSI 或 FC-AL 驱动器。这就是 RAID-0 的魅力。
要创建 RAID-0 卷,您需要彼此位于不同磁盘上的两个或多个分区。卷的容量将等于各组成分区的容量之和。就像线性模式一样,您完全可以用 RAID-0 将来自各种驱动器(诸如 IDE 和 SCSI 驱动器)的块设备组合为单个卷。
如果您正在用 IDE 磁盘创建 RAID-0 卷,您应该尽量使用符合 UltraDMA 的磁盘及控制器,以获得最大的可靠性。同时,为了避免降低性能,每个 IDE 通道上只应连接一个驱动器 -- 从属设备(尤其是当它也是 RAID-0 阵列的一部分时)对速度的负面影响几乎会抵消 RAID-0 的全部性能优势。您可能还需要外加一个 IDE 控制器,以便提供您所需的额外 IDE 通道。
如果您准备用 SCSI 设备创建一个 RAID-0 卷,注意不要让所有驱动器的总吞吐量超过 SCSI(和 PCI)总线的最大吞吐量。在这种情况下,SCSI 总线将成为限制性能的因素。举个例子,如果您在速度为 40 兆字节/秒的 68 针 Ultra Wide 总线上安装四个最大吞吐量为 15 兆字节/秒的驱动器,有时就会出现驱动器使总线饱和的情况,性能也将升高到接近 40兆字节/秒的最大值。对于您的应用程序来说这可能相当不错(毕竟,40兆字节/秒的 IO 并不是太差!),但其峰值 IO 性能可能仅与使用三个驱动器的 RAID-0 卷的峰值 IO 性能相同。
RAID-0 应用
从可靠性的立场来看,RAID-0 模式与线性模式具有同样的特征 -- 向阵列中添加的驱动器越多,卷的故障概率就越高。此外,与线性模式一样,单个驱动器的报废将会击垮整个 RAID-0 卷,而且无法恢复。要计算您的 RAID-0 卷的故障概率,只需将所有组成驱动器的故障概率相加即可。
RAID-0 对于需要获得最大 IO 性能的应用程序来说很理想,因为它是目前性能最好的 RAID 模式。但请记住,仅当您能承受更多的卷故障风险时才应使用这一模式。
如果您正在设置 compute farm 或 web 集群,RAID-0 是一种提高磁盘 IO 性能的极佳方法。由于在这种情况下您将有一定的现成冗余(大量备用机器),所以您的资源在以下这种罕见情况下仍可用:必须关闭其硬盘驱动器出现故障的机器来更换这个驱动器并重新启动。
设置 Linux 2.4 软件 RAID
使 Linux 2.4 支持软件 RAID 涉及两个步骤。首先,应在内核一级启用 RAID 支持。这通常要重新编译安装一个新内核,除非您已经在使用一个内置 RAID 支持的 Linux 2.4 内核。
然后,需编译并安装 raidtools 软件包。raidtools 是使您可以初始化、启动、停止及控制 RAID 卷的用户级工具。一旦完成了这两步,您就可以创建自己的 RAID 卷,在这些卷上创建文件系统,最后就可以挂载这些卷了。
内核问题
我使用的是 2.4.0-test10 内核。我建议您使用您能得到的最新 2.4 内核,至少应是 2.4.0-test10 内核 (但不是 2.4.0-test11,因为它有严重的系统文件损坏问题)。您可在 kernel.org 上找一个近期的内核,还可以在 developerWorks 上找到说明如何重新编译并安装一个新内核的教程(请参阅本文后面的参考资源部分)。
配置内核
我建议您对内核进行配置,以便在内核一级添加软件 RAID 支持(而不是作为模块支持)。当您输入 "make menuconfig" 或 "make xconfig" 后,您会发现软件 RAID 设置位于 "Multi-device support (RAID and LVM)" 部分。我也建议您启用与 RAID 相关的每一项支持,包括 "Boot support" 和 "Auto Detect support"。这将允许内核在引导时自动启动 RAID 卷,如果您愿意,您还可以创建一个 RAID 根文件系统。下面是 "make menuconfig" 的快照。最后两个选项(LVM 支持)不是必需的,尽管我也将它们编入了内核:
配置内核以支持 RAID
在适当配置内核之后,请安装它并重新引导。现在我们来搜索最新版的 raidtools。
安装 raidtools
在安装 raidtools 前,我们需要搜索它的最新版本。您通常可在 kernel.org 找到 raidtools 程序。查找最新的 "raidtools-0.90" 档案文件(不是 raid0145!)。当前最新的是 "raidtools-19990824-0.90.tar.gz"。
如果您喜欢冒险(如果您正在使用 2.4.0-test 内核,则您就是在冒险),您可能想访问 RedHat 网站(请参阅参考资源)并获取您可找到的最新版本的 raidtools。当前最新的是 "raidtools-dangerous-0.90-20000116.tar.gz"。
要安装 raidtools,请将档案文件解包。然后输入以下命令:
# cd raidtools-0.90
# ./configure
# make
# make install
哈哈 -- raidtools-0.90 已安装好了。现在您就可以随时开时使用软件 RAID 了。为确保内核的 RAID 支持是有效的,请确保存在 /proc/mdstat 文件。该文件包含软件 RAID 的当前配置信息:
# cat /proc/mdstat
分区设置
好了,现在该准备磁盘分区了,您至少需要两个磁盘分区。如果您使用的是 RAID-0,则应确保这些磁盘分区位于不同的磁盘上,并且其大小近似相同。毫无疑问,这些磁盘上的数据将被破坏。
另一点需要特别注意的是 -- 当您创建分区时,将分区类型指定为 "FD"。这将使 Linux 内核能将它们识别