IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope:Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  Linux  >

通用线程 -- 新 Linux 2.4 内核中的软件RAID,第一部分

安装与简介

developerWorks
文档选项

未显示需要 JavaScript 的文档选项


级别: 初级

Daniel Robbins, 总裁兼首席执行官, Gentoo Technologies 公司

2001 年 2 月 01 日

新的 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 内核能将它们识别为 RAID 分区,这样,这些分区就可在每次引导时自动被检测并启动。如果您没有以这种方式标记 RAID 分区,则在每次引导之后,必须首先输入 "raidstart --all" 才能挂载 RAID 卷。那将非常讨厌,所以要正确设置分区类型。





回页首


/etc/raidtab 设置

下一步是创建一个 /etc/raidtab 文件。该文件描述各个 RAID 卷的配置。以下是一个 raidtab 样本,它定义了一个由块设备 /dev/hde1 和 /dev/hdg1 组成的卷 /dev/md0 RAID-0,以及一个由块设备 /dev/hde2 和 /dev/hdg2 组成的线性卷 /dev/md1。

raiddev /dev/md0
        raid-level      0
        nr-raid-disks       2
        persistent-superblock   1
        chunk-size      32
        device          /dev/hde1
        raid-disk       0
        device          /dev/hdg1
        raid-disk       1               
raiddev /dev/md1
        raid-level      linear
        nr-raid-disks       2
        persistent-superblock   1
        chunk-size      32
        device          /dev/hde2
        raid-disk       0
        device          /dev/hdg2
        raid-disk       1               

raidtab 语法相当容易理解 -- 每一指令块都以一个 "raiddev" 条目开始,指明要创建的 RAID 卷。当您安装 raidtools 之后,Makefile 通过 md15 为您创建了 /dev/md0,因此它们已经可用了。

接下来,"nr-raid-disks" 应指定您的阵列中的磁盘数目。然后将 "persistent-superblock" 设置 为 1,告诉 raid 工具何时创建该卷,应该为每个组成设备编写特定的超级块,以描述 RAID 阵列的配置。Linux 内核使用这些信息在引导时自动检测并启动 RAID 阵列,因此您应确保对您创建的每个 RAID 卷进行了这种配置。

"chunk-size" 以千字节指定 RAID-0 使用的块大小。在本例中,RAID-0 卷会以 32k 的块写入其组成分区;即,RAID 卷的第一个 32K 在 hde1 上,第二个 32k 在 hdg1 上,依此类推。我们也为 /dev/md1 线性卷指定一个块大小 -- 不过这只是一个哑条目,没有任何实际含义。

最后,您应指定组成该卷的设备。首先您用一个 "device" 行指定实际的块设备,接下来用一个 "raid-disk" 条目指定其在阵列中的位置,从零开始。

一旦您创建了自己的 /etc/raidtab 文件,您就可以一次性初始化该阵列。





回页首


mkraid 和文件系统的创建

好了。我们已创建了分区,raidtab 文件已经就位 -- 现在是使用 mkraid 命令初始化第一个分区的时候了:

# mkraid /dev/md0

执行完这一命令之后,/dev/md0 将被初始化,同时将启动 md0 阵列。如果您输入 "cat /proc/mdstat",您应看到类似于如下一些显示:

Personalities : [linear] [raid0] [raid1] [raid5]
read_ahead 1024 sectors
md0 : active raid0 hdg1[1] hde1[0]
      90069632 blocks 32k chunks
 
unused devices: <none>

耶!RAID 设备已启动并处于运行状态。我们现在要做的全部工作就是在其上创建一个文件系统。要完成这一工作,请使用 mke2fs 命令或 mkreiserfs 命令(RAID-0 和 ReiserFS 是一对完美的组合!):

# mke2fs /dev/md0

或者

# mkreiserfs /dev/md0

现在就可以挂载您的新文件系统了:

# mkdir /mnt/raid
# mount /dev/md0 /mnt/raid

请在 fstab 文件中添加一个 /dev/md0 条目。其内容类似以下这一行:

/dev/md0      /mnt/raid      reiserfs      defaults        0 0 

如果您将分区类型正确设置为 "FD",您的 RAID 卷就会在引导时自动启动。剩下的事情就是享用您的新软件 RAID 卷了。您还应(当然:))读我的第二篇软件 RAID 文章,我将在其中探讨软件 RAID 的某些高级功能和 RAID-1。



参考资料



关于作者

Daniel Robbins 住在新墨西哥州的 Albuquerque,他是 Gentoo Technologies 公司的总载兼首席执行官,他还是 Gentoo Linux(一种运行于个人计算机上的高级 Linux)和 Portage 系统(Linux 的下一代端口系统)的创作者。他同时也是 Macmillan 出版的 Caldera OpenLinux UnleashedSuSE Linux UnleashedSamba Unleashed 几本书的重要作者之一。 由于深受 Pac Man 的影响,Daniel 在读二年级时第一次接触到 Logo 语言后即执迷于计算机。这可能是他后来作为 SONY Electronic Publishing/Psygnosis 的首席图形艺术家的原因。Daniel 喜欢与他的妻子 Mary 和他刚出生的女儿 Hadassah 共度美好时光。




对本文的评价

太差! (1)
需提高 (2)
一般;尚可 (3)
好文章 (4)
真棒!(5)

建议?




回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款