通用线程 -- 新 Linux 2.4 内核中的软件RAID,第一部分_VMware, Unix及操作系统讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  VMware, Unix及操作系统讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 4414 | 回复: 0   主题: 通用线程 -- 新 Linux 2.4 内核中的软件RAID,第一部分        下一篇 
cc
注册用户
等级:中校
经验:1900
发帖:195
精华:0
注册:2011-7-25
状态:离线
发送短消息息给cc 加好友    发送短消息息给cc 发消息
发表于: IP:您无权察看 2011-9-14 9:55:30 | [全部帖] [楼主帖] 楼主

这个新内核包含许多极好的新功能和增强功能。其中之一就是含了流行的软件 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。




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论