LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 3436|回复: 5

问lvm和raid的区别

[复制链接]
发表于 2004-4-8 11:18:04 | 显示全部楼层 |阅读模式
lvm的优点是可以动态的分配空间,而且可以多磁盘的使用,并且多磁盘状态下速度也不错,而raid我接触很少,请问:
1. raid也支持动态分配空间吗?
2. raid比lvm多的就是奇偶校验和备份等安全性吗?
3. 他们2个是同一概念上的问题吗?

希望大家多多帮忙!!~
 楼主| 发表于 2004-4-11 11:30:13 | 显示全部楼层
晕,这个问题真的这么弱吗?怎么没有任回答啊?
发表于 2004-5-7 13:01:37 | 显示全部楼层

学习 Linux LVM,第 1 部分 http://www-900.ibm.com

硬件支持的raid是不能动态分配空间的。比如我有三块硬盘做的raid5,其中的一个分区是加载的是/usr目录,如果分区用光了,是不能存到别的分区的。
我用过硬raid,对软raid也用过,但没有仔细学习过。

现转来几份教程,共同学习一下。。



“逻辑卷管理”为存储器管理带来的魔力

Daniel Robbins (drobbins@gentoo.org)
总裁兼 CEO,Gentoo Technologies, Inc.
2001 年 3 月

    在本文中,Daniel 向您介绍了 Linux LVM(逻辑卷管理)背后的概念,并告诉您如何将最新的内核补丁和工具安装到您的系统上。LVM 可以让您在除机器上的物理存储资源以外创建逻辑卷。不过,与物理卷不同,逻辑卷可以在系统仍处于运行状态时扩充和缩减,这样就为 Linux 系统管理员提供了他们梦寐以求的存储器灵活性。



在这一系列中,我要向您介绍如何安装和使用新的内置在 Linux 2.4 内核中的“逻辑卷管理”支持。如果您以前从未使用过任何形式的 LVM ,那么您得好好学一学;它是一种非常棒的技术。 在我们真正设置和运行 LVM 之前,我要解释一下它究竟是什么以及它是如何工作的。然后,我们准备对 LVM 做一些测试来充分了解它。

LVM 介绍
如果您象我一样,那么您对 UNIX 和 Linux 的体验是从 PC 平台,而不是从大型的商业 UNIX 服务器和工作站上开始的。在基本 PC 上,我们总是不得不对硬盘驱动器执行分区。使用 PC 的人通常相当了解 fdisk 这样的在硬盘上创建和删除主要分区和扩展分区的工具。硬盘分区是一种令人厌烦,但公认是使操作系统设置和运行进程不可或缺的一部分。

因为要做好工作,确实需要精确地估计每个分区需要多少空间,所以硬盘驱动器分区可能是非常烦人的事。如果估计得不准确,Linux 系统很可能会顾此失彼 -- 为解决这个问题,您甚至可能需要执行整个系统备份、将硬盘清除干净,然后将所有数据恢复到新的(可能比原来好一些)分区布局中。讨厌!这些就是系统管理员在一开始就尽力避免的情况。

虽然分区曾一度是静态存储器的天下,但值得庆幸的是,我们现在有许多 PC 重新分区工具(PowerQuest 的 Partition Magic 产品就是最流行的一种)。这些工具可以让您用一个特殊磁盘来引导系统,并可以动态地重新调整分区和文件系统的大小。重新引导后,您就拥有了重新调整过大小的新分区,这样就有望将您从存储器危境中解脱出来。这些重新调整分区大小的工具很有效,并从某种程度上解决了一些存储器管理问题。但它们是不是就完美了呢?不一定。

象 Partition Magic 这样的工具对于工作站来说非常有效,但对服务器来说就不合适了。首先,它们需要重新引导系统。而这正是大多数系统管理员尽量避免的。如果在每次需要调整存储器(例如,如果每周存储器调整都需要做很大调整)时不能重新引导机器怎么办?如果需要扩充文件系统使它能跨越多个硬盘驱动器会发生什么,或者如果在允许 Apache 继续提供 Web 页面的同时需要动态扩充或缩减卷的存储容量,您该怎么做?在一个高度可用的动态环境中,基本的分区大小调整器无法满足这些要求。对于这样一些和其它一些情况,“逻辑卷管理”是一种非常出色(如果不是最完美)的解决方案。

进入 LVM
现在,让我们看看 LVM 是如何解决这些问题的。我们执行下面的三步骤过程来创建 LVM 逻辑卷。首先,我们需要选择用于 LVM 的物理存储器资源。这些通常是标准分区,但也可以是我们已创建的 Linux Software RAID 卷。如果使用 LVM 术语,这些存储器资源称为“物理卷”。设置 LVM 的第一步是正确初始化这些分区以使它们可以被 LVM 系统识别。如果添加物理分区,它还包括设置正确的分区类型,以及运行 pvcreate 命令。

在初始化 LVM 使用的一个或多个物理卷后,可以继续进行第二步 -- 创建卷组。您可以把卷组看作是由一个或多个物理卷所组成的存储器池。 在 LVM 运行时,我们可以向卷组添加物理卷,甚至从中除去它们。不过,我们不能直接在卷组上安装或创建文件系统。而是告诉 LVM 使用我们的卷组存储器池创建一个或多个“逻辑卷”:

在物理卷上创建卷组
http://www-900.ibm.com/developer ... em/lvm/lvm-1/vg.gif

创建 LVM 逻辑卷非常容易,而且一旦创建它以后,我们就可以把文件系统放在它上面、安装它,然后开始使用卷来存储文件。使用 "lvcreate" 命令来创建逻辑卷,指定新卷的名称、所希望的卷的大小,以及希望这个特定逻辑卷所属的卷组。然后,LVM 系统从我们指定的卷组中分配存储量来创建准备使用的新卷。创建新卷后,可以将 ext2 或 ReiserFS 文件系统放在上面、安装它,然后照我们喜欢的方式使用它。

从现有卷组创建两个逻辑卷
http://www-900.ibm.com/developer ... /lvm-1/lvcreate.gif

范围
在幕后,LVM 系统以大小相等的“块”(称为“范围”)为单位分配存储量。我们可以指定在创建卷组时使用的特定的范围大小。范围的大小缺省为 4Mb,这对于大多数情况来说相当理想。LVM 的一个好处是在已经安装了逻辑卷并在使用逻辑卷的情况下,可以动态地改变逻辑卷使用的范围的物理存储位置(换句话说,就是存储它们所在的磁盘)。LVM 系统确保逻辑卷在管理员物理地改变存储位置的同时能够继续正常操作。

当然,因为所有事物都是在大小相等的范围之上创建的,所以要为已存在的逻辑卷分配一些额外的范围实际上很容易 -- 换句话说,动态“增长”卷:

从卷组添加额外的范围,扩展逻辑卷的大小
http://www-900.ibm.com/developer ... vm/lvm-1/lvgrow.gif
一旦扩充了逻辑卷,接下来就可以扩充 ext2 或 ReiserFS 文件系统来利用这一新的磁盘空间。如果使用例如 resize_reiserfs 这样的程序,也可以在已安装和正使用卷时扩充文件系统!真正令人称奇的是 -- 使用 LVM 和联机文件系统扩充实用程序,可以在改变存储器配置时不再需要重新引导系统,甚至不需要降低到运行级别 1。

唯一需要关闭系统的情况是在需要添加新的物理磁盘时。添加了新磁盘后,可以将这些新的物理卷添加到卷组中来创建新的范围补给。

设置 LVM
好,让我们开始安装 LVM。LVM 由两部分组成:内核部分和一套用户空间工具。为了开始,先跳到主要 LVM 页面(请参阅本文稍后部分的参考资料)并下载可以找到的最新版本的 LVM tar 文件(当前是 lvm_0.9.1_beta3.tar.gz)。LVM tar 文件包含了所有用户空间工具以及一组内核补丁程序。这正是令人感兴趣的地方。

如果已经安装了 2.4 系列内核,则系统上已有 LVM 支持,如果没有,很简单,只需要重新编译内核来启用 LVM 支持即可。不过,您可能不希望使用自带的(或发行版提供的)2.4 内核所包括的 LVM 支持。如果希望使用最新的 LVM 版本,要将 LVM tar 文件中的补丁程序应用到当前的 2.4 内核源码树。以下是执行方法。

为了开始,进入内核源码目录 (/usr/src/linux) 并创建一个称为 "extras" 的目录。然后进入该目录并抽取 LVM tar 文件:

# cd /usr/src/linux
# mkdir extras
# cd extras
# tar xzvf /path/to/location/of/lvm_0.9.1_beta3.tar.gz



执行完这一步后,您会注意到在 extras 中有一个称之为 "LVM" 的目录,它包含了另一个根据您刚刚解包的 LVM 版本命名的目录。进入这两个目录找到 LVM 源码:

清单 1:找到 LVM 源码

您将看到几个文本文件、脚本和源目录。您会在 "INSTALL" 文件中找到安装指令;我将指导您完成这一过程。首先,我们希望运行配置脚本,如下:

# ./configure --prefix=/ --mandir=/usr/man



修补
执行完这条命令后,将创建并配置 Makefile,以在 /sbin 中安装所有 LVM 工具,在 /usr/man 中安装帮助页面。如果您的帮助页面位于 /usr/share/man 中(按照 FHS 2.1),则对上述路径作相应的调整。如果内核源码不在 /usr/src/linux 中,还需要将 "--with-kernel_dir=/path/to/usr/src/linux" 选项添加到一行中。配置脚本完成后,我们就可以准备安装这些工具并生成当前内核的补丁了。让我们首先对内核加以修补。进入 PATCHES 目录:

# cd PATCHES



现在输入 "make"。makefile 将生成专用于特定 2.4 系列内核源码的补丁:

# make



补丁名为 lvm-[lvmversion]-[kernelversion].patch。例如,因为我使用的是版本 0.9.1_beta3 的 LVM 和内核 2.4.0-ac11,所以补丁名为 lvm-0.9.1_beta3-2.4.0-ac11.patch。您可以在当前目录中找到它。现在该应用补丁了。要应用补丁,需要将目录切换到内核源码所在的位置,然后使用 patch 命令,如清单 2 所示:

清单 2:patch 命令

虽然 LVM INSTALL 文档并没有提到,但我通常将 "-l" 选项传递给 patch。该选项让补丁程序补偿空白中的任何变化(例如细微的缩排变化),这些变化一般会造成补丁的某些部分失败。如果上述命令完成时没有任何带有 "FAILED" 的行,那么就可以准备安装用户磁盘空间工具了。如果不是这样,您需要审视 /usr/src/linux 目录来查找 ..rej 文件,然后使用文本编辑器手工将被拒绝的部分插入到源码中 -- 真麻烦!不过,在大多数情况下,应用补丁都很顺利,您可以迅速使用它。

配置、编译和安装
好,现在有了一个经过修补的内核,因此它具有最新可用的 LVM 代码。现在需要配置内核来启用 LVM 支持。我建议您直接将 LVM 支持编译到内核中而不是将它配置成作为一个模块编译。启动您喜爱的 Linux 内核配置方法:

# cd /usr/src/linux
# make menuconfig



您在 "Multi-device support (RAID and LVM)" 部分中可以找到 LVM 选项。一旦启用了第一个选项:
  • Multiple devices driver support (RAID and LVM)



    ....您将看到以下选项,您也应该启用它们:

    <*>   Logical volume manager (LVM) support



    根据您使用的 LVM 版本,可能还有其它一些希望启用的与 LVM 相关的选项。完成后,保存内核配置,并执行标准内核编译例程,然后重新引导。恭喜 -- 您现已启用了内核 LVM 支持;现在,我们需要编译和安装用户磁盘空间工具。这一步很简单:

    # cd /usr/src/linux/extras/LVM/0.9.1_beta3
    # make
    # make install



    另外还有一步,它是可选的。如果您要做的不仅是测试 LVM,还需要将以下几行添加到启动 rc 脚本中:

    /sbin/vgscan
    /sbin/vgchange -a y



    这些行将浏览所有可用的卷组并激活它们。然后,将以下这行添加到关机 rc 脚本中,并确保它在卸装了所有文件系统后执行:

    /sbin/vgchange -a n



    如果只是测试 LVM,可以跳过这些步骤。只是要记住,在每次重新引导后,在逻辑卷可以使用前,需要以 root 输入 "vgscan" 和 "vgchange -a y"。

    以上就是这篇文章的内容。在下一篇文章中,我将介绍如何创建您自己的逻辑卷,以及如何发挥 LVM 的威力。到时候再见!

    参考资料

        * 从 Sistina Software 下载 LVM tar 文件。
        * 请务必仔细查看 Linux LVM FAQ。
        * 等不及的读者可以查看 Heinz Mauelshagen 的 LVM HOWTO,它介绍了如何设置物理卷、卷组和逻辑卷。这是我将在下一篇文章中涉及的内容。
        * 另外还有一个有意思的 HOWTO,告诉您 如何在逻辑卷上设置根文件系统。
        * Andreas Dilger 参与了 Linux LVM 项目,他有一个看上去不错的 联机 ext2 文件系统大小调整器。
        * ReiserFS 是一种非常好的文件系统(特别在与 LVM 结合使用时)。如果使用的是 ReiserFS,需要获取 reiserfs-utils tar 文件,它包含了一个称为 "reiserfs_resize" 的程序 -- 允许对 ReiserFS 文件系统联机调整大小。
        * 有关设置 Linux Software RAID 卷的详细信息,请参阅 Daniel 在 developerWorks 上有关 Software RAID 系列的第 1 部分和第 2 部分。
        * 如果想进行回顾,请参阅 developerWorks 上的 Linux 内核编译教程。

    关于作者
    Daniel Bobbins 居住在美国新墨西哥州的阿尔布开克,他是 Gentoo Technologies, Inc. 的总裁兼 CEO,Gentoo Linux(一种用于 PC 的高级 Linux)和 Portage 系统(用于 Linux 的下一代移植系统)的主创人。他还是几本 Macmillan 出版的书籍 Caldera OpenLinux Unleashed、SuSE Linux Unleashed 和 Samba Unleashed 的投稿人。Daniel 自二年级起就与计算机结下不解之缘,那时他首先接触的是 Logo 程序语言,并沉溺于 Pac-Man 游戏中。这也许就是他至今仍担任 SONY Electronic Publishing/Psygnosis 的首席图形设计师的原因所在。Daniel 喜欢与妻子 Mary 和新出生的女儿 Hadassah 一起共度时光。
  • 发表于 2004-5-7 13:02:38 | 显示全部楼层

    学习 Linux LVM,第 2 部分

    学习 Linux LVM,第 2 部分
    cvs.gentoo.org 升级

    Daniel Robbins (drobbins@gentoo.org)
    总裁兼 CEO,Gentoo Technologies, Inc.
    2001 年 4 月

        在本文中,Daniel 和我们一起分享了他将 cvs.gentoo.org 的 /home 文件系统转换成 LVM 逻辑卷的经历。在转换之后,当 cvs.gentoo.org 的 /home 分区实时动态地进行大小调整,而无需重新引导、卸装 /home,甚至无需降低到运行级别 1 时,我们将会看到 LVM 的种种优点。所有进程在没有任何中断的情况下继续工作。Daniel 对转换的逐步详细介绍将对那些有兴趣在他们自己的机器上执行类似转换的人有所帮助。



    在我前一篇 LVM 文章中,我解释了 LVM 背后的概念。现在该是发挥 LVM 作用的时候了。在本文中,我将在官方 Gentoo Linux web/cvs/email 服务器 -- cvs.gentoo.org -- 上设置 LVM。尽管 cvs.gentoo.org 只有一个硬盘,但灵活性很强的 LVM 仍然令人难以置信地提供了比标准静态分区方法好得多的改进。我将为您介绍 LVM 转换过程的的所有步骤,这样,如果您有兴趣,可以在自己的机器上执行类似的转换。

    在开始之前有一个告诫。因为实现 LVM 是对系统进行的一项重要的变动(包括创建新分区和其它一些潜在的冒险操作),所以在开始这一过程之前备份整个系统 不失为一个好主意。如果您不想进行备份,我希望您能使用一台没有什么重要数据的测试机器 应该说我在转换到 LVM 时并没有遇到任何问题,但最好做好准备以防万一。

    那么,让我们继续。在开始转换过程之前,我对 cvs.gentoo.org 进行了升级,让它使用下列软件包。在我执行 LVM 转换的时候,这些是当时的最新版本(请参阅本文稍后部分的参考资料):

        * Linux 内核 2.4.1-ac19
        * LVM 0.9.1_beta5
        * reiserfs-utils 3.6.25

    现在轮到硬盘驱动器了。cvs.gentoo.org 有一个不错的新的 IBM 45 GB 硬盘驱动器;不过,当我在 cvs 上安装 Gentoo Linux 时,我只对驱动器中的 10 GB 进行了分区,而将余下的 35 GB 留作“将来的分区”使用。这些是在不使用 LVM 时耍的一点小计谋 -- 将部分驱动器保留不分区是一种为今后的扩充作准备的简单但有效的方式。不过,如果使用 LVM,会有更好的方法。

    空间问题
    在过去的几个星期中,我注意到我的根 ReiserFS 分区在被缓慢地填满,这可以从下面的 "df" 输出中看出:

    Filesystem           1k-blocks      Used Available Use% Mounted on
    /dev/hda3              9765200   6989312   2775888  72% /
    tmpfs                   269052         0    269052   0% /dev/shm



    现在,72% 被占满的根分区并不构成什么危机,但也决不是一种良好的状况。ReiserFS 和许多其它文件系统一样,随着它越来越满而开始逐渐减慢速度,在根文件系统被完全填满、文件系统的性能遭到重创之前,这只是时间问题。

    我决定在硬盘驱动器的结尾处使用 LVM,从 35 GB 的当前未分区空间中创建新逻辑卷来解决这一问题。然后,我会在这个卷上创建一个文件系统,并将 /dev/hda3 的大部分内容转移到其中。

    如果您考虑在自己的机器上进行类似的转换,首先需要做的就是在根文件系统上找一个合适的部分转移到逻辑卷上。对我来说,选择很容易 -- 我的 /home 树占用了大约 5.7 GB。通过将 /home 转移到它自己的 LVM 逻辑卷,我的根文件系统处于大约 20% 容量的位置。因为大多数新数据被添加到 /home,所以我的根文件系统很可能也停留在大约 20% 容量的位置 -- 一种非常健康的状态。

    解决方案的开始
    在开始转换之前,首先在硬盘驱动器的结尾处对未使用的空间进行分区。我使用 cfdisk 创建了一个 35 GB 的分区 (/dev/hda5),然后将分区的分区类型设置成 "8E"(正规 LVM 分区类型)。在这一更改后,我进行了重新引导以强制重新读取分区表。在重新引导后,我的分区表如下:

    # sfdisk -l

    Disk /dev/hda: 89355 cylinders, 16 heads, 63 sectors/track
    Units = cylinders of 516096 bytes, blocks of 1024 bytes, counting from 0

       Device Boot Start     End   #cyls   #blocks   Id  System
    /dev/hda1   *      0+    247     248-   124960+  83  Linux
    /dev/hda2        248     743     496    249984   82  Linux swap
    /dev/hda3        744   20119   19376   9765504   83  Linux
    /dev/hda4      20120   89354   69235  34894440    5  Extended
    /dev/hda5      20120+  89354   69235- 34894408+  8e  Linux LVM



    既然有了空的 35 GB 的分区,我就准备为 LVM 初始化它。以下是过程 -- 首先,我将 35 GB 初始化成物理卷;然后,使用这个物理卷创建一个卷组,最后,在卷组上分配一些范围,创建将包含新文件系统并存放当前 /home 中所有文件的逻辑卷。

    为开始这个过程,我使用 pvcreate 命令将 /dev/hda5 初始化成物理卷:

    # pvcreate /dev/hda5
    pvcreate -- physical volume "/dev/hda5" successfully created



    pvcreate 在 /dev/hda5 上设置一个特殊的“记帐”区域,称作 VGDA(“卷组描述符区域”)。LVM 使用该区域来记录物理范围是如何分配的,以及其它一些操作。

    下一步是创建卷组并向该卷组添加 /dev/hda5。卷组将充当范围池(许多存储块)。创建卷组之后,创建所需数量的逻辑卷。我决定将卷组称为 "main":

    # vgcreate main /dev/hda5
    vgcreate -- INFO: using default physical extent size 4 MB
    vgcreate -- INFO: maximum logical volume size is 255.99 Gigabyte
    vgcreate -- doing automatic backup of volume group "main"
    vgcreate -- volume group "main" successfully created and activated   



    vgcreate 命令执行几个操作。除了创建 "main" 卷组以外,它还设置 /dev/hda5,使它使用 4 MB 的范围,4 GB 是缺省范围大小。这意味着在卷组上创建的所有逻辑卷都可以以 4 MB 为增量单位来进行扩充或缩减。

    由于内核限制的原因,范围大小决定了逻辑卷的最大大小。您可以从上面的输出中看出,4 MB 的范围大小决定了逻辑卷大小限制为 256 GB,如果您向卷组添加几个高容量驱动器,这是很容易达到的逻辑卷组大小。如果每一个卷最后都大于 256 GB,我建议您在运行 vgcreate 时指定更大一些的范围大小。范围的大小可以是从 8 KB 到 512 MB 之间的任何值,并且必须总是 2 的倍数。通过将范围大小增加到 4 MB 以上,最大的物理卷大小将相应地增加到最大为 1 Petabyte(尽管当今现实世界中,x86 系统上的大小限制是 2 Terabytes)。例如,如果希望使用 32 MB 的范围创建卷组,我会输入:

    # vgcreate -s 32M main /dev/hda5



    32 MB 是个合适的范围大小,因为 32 MB 的颗粒度仍然便于管理,并将引导的最大逻辑卷大小增加到 2 TB。创建卷组之后,可以通过输入 "vgdisplay" 来查看其信息:

    # vgdisplay
    --- Volume group ---
    VG Name               main
    VG Access             read/write
    VG Status             available/resizable
    VG #                  0
    MAX LV                256
    Cur LV                0
    Open LV               0
    MAX LV Size           255.99 GB
    Max PV                256
    Cur PV                1
    Act PV                1
    VG Size               33.28 GB
    PE Size               4 MB
    Total PE              8519
    Alloc PE / Size       0 / 0
    Free  PE / Size       8519 / 33.28 GB
    VG UUID               2qC2H2-iA8s-qW6F-cwXx-JVIh-I6VC-VVCGmn



    既然有了自己的卷组,我准备创建逻辑卷。我决定在最初时将它的大小设置为 8 GB,并称它作 "lv_home":

    # lvcreate -L8G -nlv_home main
    lvcreate -- doing automatic backup of "main"
    lvcreate -- logical volume "/dev/main/lv_home" successfully created



    然后,在逻辑卷上创建文件系统:

    # mkreiserfs /dev/main/lv_home

      
      <----------- MKREISERFSv2 ----------->
       
       Block size 4096 bytes
       Block count 2097152
       Used blocks 8275
               Journal - 8192 blocks (18-8209), journal header is in block 8210
                       Bitmaps: 17, 32768, 65536, 98304, 131072, 163840,
                       196608, 229376, 262144, 294912, 327680, 360448,
                       393216, 425984, 458752, 491520, 524288, 557056,
                       589824, 622592, 655360, 688128, 720896, 753664,
                       786432, 819200, 851968, 884736, 917504, 950272,
                       983040, 1015808, 1048576, 1081344, 1114112,
                       1146880, 1179648, 1212416, 1245184, 1277952,
                       1310720, 1343488, 1376256, 1409024, 1441792,
                       1474560, 1507328, 1540096, 1572864, 1605632,
                       1638400, 1671168, 1703936, 1736704, 1769472,
                       1802240, 1835008, 1867776, 1900544, 1933312,
                       1966080, 1998848, 2031616, 2064384
        Root block 8211
    Hash function "r5"
    ATTENTION: ALL DATA WILL BE LOST ON '/dev/main/lv_home'! (y/n)y
    journal size 8192 (from 18)
    Initializing journal - 0%....20%....40%....60%....80%....100%
    Syncing..done.



    既然创建了文件系统,我就可以在 /mnt/newhome 上安装它:

    # mkdir /mnt/newhome
    # mount /dev/main/lv_home /mnt/newhome
    # df
    Filesystem           1k-blocks      Used Available Use% Mounted on
    /dev/hda3              9765200   6989840   2775360  72% /
    tmpfs                   291388         0    291388   0% /dev/shm
    /dev/main/lv_home      8388348     32840   8355508   1% /mnt/newhome



    您可以从上面看出,我几乎准备复制 /home 中的所有数据。在开始之前,我把系统降低到运行级别 1 以确保在复制 /home 中的文件时,没有用户或进程能够访问或修改它们:

    # init 1



    然后,开始复制文件:

    # cp -avx /home/* /mnt/newhome



    复制操作需要大约 10 分钟的时间完成。然后,我将原始 /home 备份成 /home.old,这只是为在复制过程中有任何错误而准备的。创建一个新的安装点,然后在 /home 上重新安装新 home:

    # cd /
    # mv home home.old
    # mkdir home
    # umount /mnt/newhome
    # mount /dev/main/lv_home /home



    然后,应该设置服务器以使我的新 /home 分区可以在每次启动机器时使用。首先修改 /etc/fstab 以使它包括新的 /home 项:

    # /etc/fstab: static file system information.
    #
    # fs                mountpoint       type         opts          dump/pass
    /dev/hda3           /                reiserfs     defaults      1 1
    /dev/main/lv_home   /home            reiserfs     defaults      2 2
    /dev/hda2           none             swap         sw            0 0
    /dev/hda1           /boot            reiserfs     noauto        0 0
    /dev/cdrom          /mnt/cdrom       iso9660      noauto,ro     0 0
    proc                /proc            proc         defaults      0 0
    none                /dev/pts         devpts       mode=620      0 0
    tmpfs               /dev/shm         tmpfs        defaults      0 0



    然后,我对初始化脚本进行了一些小小改动。我修改了 "checkroot" 启动脚本,使以下命令可以在根分区重新安装读/写后立即运行:

    /sbin/vgscan
    /sbin/vgchange -a y



    接下来,我修改了在关机时运行的文件系统卸装脚本,使以下命令在卸装了所有文件系统 后立即运行:

    /sbin/vgchange -a n



    完成了这些步骤后,我重新引导了机器,让我高兴的是一切都工作正常。在接下去的一天左右的时间里完全没有问题,随后我删除了 /home.old 以释放根文件系统上的一些空间。太棒了!到 LVM 的转换成功了。

    LVM 的优点
    虽然到 LVM 的转换有些痛苦,但一旦转换完成之后,管理文件系统就变得非常简单。例如,我决定重新调整新的 /home 逻辑卷大小,向文件系统结尾添加大约 2 GB 的空间。首先,我向 "lv_home" 逻辑卷添加了额外的容量,然后使用 resize_reiserfs 实用程序来扩充文件系统,使它可以使用额外的容量。以下是执行所有这些操作的两个命令:

    # lvextend -L+2G /dev/main/lv_home
    # resize_reiserfs -f /dev/main/lv_home



    在大约一秒钟的时间里,我将 /home 文件系统扩大了 2 GB;令人惊奇的是,我不需要重新引导、降低到运行级别 1,甚至不需要卸装 /home 来执行大小调整。一切都照常工作。是不是很了不起?下面是我的文件系统的当前状态:

    # df
    Filesystem           1k-blocks      Used Available Use% Mounted on
    /dev/hda3              9765200   1413340   8351860  15% /
    /dev/main/lv_home     10485436   5609836   4875600  54% /home



    您可以看出 LVM 的确可以让管理员的工作轻松许多。我希望在今后能将根文件系统的其它部分转移到 LVM,最终甚至将我的根文件系统转换成 LVM 逻辑卷。下面的参考资料可以帮助您了解有关 LVM 的更多知识。

    参考资料

        * 有关 LVM 的概念和如何在系统上安装最新的内核补丁和工具的建议,请参阅 developerWorks 上 Daniel 的前一篇文章, 学习 LVM,第 1 部分。
        * 从 Sistina Software 下载 LVM tar 文件。
        * 现在 Sistina 有一个非常棒的 LVM HOWTO(它与简单的 HOWTO 相比,更接近于一个完整描述的手册)。
        * 请务必仔细查看 Linux LVM FAQ。
        * 等不及的读者可以查看 Heinz Mauelshagen 的 LVM 快速入门,它包含了有关如何设置卷组和逻辑卷的更多示例。
        * 另外还有一个有意思的 HOWTO,告诉您
          如何在逻辑卷上设置根文件系统。LVM-0.9.1_final 问世后,我会尝试执行这一操作。
        * Andreas Dilger 参与了 Linux LVM 项目,他有一个看上去不错的 联机 ext2 文件系统大小调整器。
        * ReiserFS 是一种非常好的文件系统(特别在与 LVM 结合使用时)。如果使用的是 ReiserFS,需要获取 reiserfs-utils tar 文件,它包含了一个称为 "reiserfs_resize" 的程序 -- 允许对 ReiserFS 文件系统联机调整大小。
        * 有关设置 Linux 软件 RAID 卷的详细信息,请参阅 Daniel 在 developerWorks 上有关软件 RAID 系列的第 1 部分和第 2 部分。
        * 对于复习进修者,请参阅 developerWorks Linux 内核编译教程。

    关于作者
    Daniel Bobbins 居住在美国新墨西哥州的阿尔布开克,他是 Gentoo Technologies, Inc. 的总裁兼 CEO、Gentoo Linux(一种用于 PC 的高级 Linux)和 Portage 系统(用于 Linux 的下一代移植系统)的主创人。他还是几本 Macmillan 出版的书籍 Caldera OpenLinux Unleashed、SuSE Linux Unleashed 和 Samba Unleashed 的投稿人。Daniel 自二年级起就与计算机结下不解之缘,那时他首先接触的是 Logo 程序语言,并沉溺于 Pac-Man 游戏中。这也许就是他至今仍担任 SONY Electronic Publishing/Psygnosis 的首席图形设计师的原因所在。Daniel 喜欢与妻子 Mary 和新出生的女儿 Hadassah 一起共度时光。可通过 drobbins@gentoo.org 与 Daniel 联系。
    发表于 2004-5-7 13:07:06 | 显示全部楼层

    新 Linux 2.4 内核中的软件 RAID,第一部分 http://www-900.ibm.com

    新 Linux 2.4 内核中的软件 RAID,第一部分
    安装与简介

    Daniel Robbins
    Gentoo Technologies 公司总裁兼首席执行官
    2001 年 2 月

        新 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 关于 RAID 的第二篇文章,Daniel Robbins 在其中说明了软件 RAID-1、4 和 5 各能为您做什么以及不能做什么,并说明了如何在生产环境下实现这些 RAID 标准。
        * Software-RAID HOWTO 是关于 Linux 软件 RAID 相关信息的另一个极好资源
        * 如果您想学习如何创建 RAID 根文件系统,您可能需查看 Boot+Root+RAID+Lilo Software RAID HOWTO
        * 要获取 raidtools-0.90 的更新版本,请关注 ftp.kernel.org 和 people.redhat.com
        * 在 Linux 内核档案文件中找一个最近的内核
        * 学习 IBM developerWorks 的这篇教程,它介绍了如何从源代码开始编译并安装一个新内核。
        * 查找 raidtools 程序
        * 获取 raidtools 的最新版本
        * 查看有关软件 Raid 的 Linux 解决方案的更多技巧

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

    Linux 2.4 软件 RAID,第二部分 http://www-900.ibm.com

    Linux 2.4 软件 RAID,第二部分
    在生产环境中安装 RAID-1

    Daniel Robbins
    Gentoo Technologies 公司总裁兼首席执行官
    2001 年 2 月

        新的 2.4 内核终于发布了,现在应该找一台空闲 PC,装上 Linux,看看它能做些什么。在这篇两篇系列文章中,Daniel Robbins 介绍了 Linux 2.4 软件 RAID — 一种通过将数据分布于多个磁盘,从而增强磁盘性能和可靠性的技术。在本文中,Daniel 将说明软件 RAID-1、4 和 5 能做什么,不能做什么,以及应该如何在生产环境中实现这些 RAID 方案。在本文的第二部分,Daniel 将带领您体验更换 RAID-1 故障驱动器的模拟过程。



    现实中的 RAID
    在我的前一篇文章中,我介绍了 Linux 2.4 的软件 RAID 功能,并且说明了如何创建线性卷、RAID-0 卷和 RAID-1 卷。本文考察,为了在生产环境中利用 RAID-1 提高可用性,您需要了解哪些知识。与只是在测试服务器上或者在家中安装 RAID-1 相比,这要求您对 RAID 有更深入的理解,并掌握更多的知识 — 尤其是,您需要准确知道 RAID-1 可以提供哪些保护,并要了解万一出现磁盘故障,如何使 RAID 卷保持在启动运行状态。本文将探讨这些内容,首先将概述 RAID-1、4 和 5 能做什么,不能做什么,最后模拟一个更换 RAID-1 故障驱动器的完整测试过程 — 您应该尽可能实际体验一下这个过程(以本文为指南)。在完成此模拟过程之后,您将拥有在现实环境中处理 RAID-1 故障所需的全部经验。

    RAID 不能做什么
    RAID 的容错功能设计用于避免由偶发的驱动器故障所产生的负面影响。这种设计非常好。但是,对于各种各样的可靠性问题,RAID 并非总是理想的解决方案。在生产环境中,在实现具有容错功能的 RAID (1、4、5) 之前,准确了解 RAID 能做什么及不能做什么至关重要。当处于依赖 RAID 的境况中时,我们不希望对它的作用抱有错误的认识。我们首先要澄清对 RAID 1、4 和 5 的一些常见错误认识。

    许多人认为,如果将所有重要数据保存在 RAID 1/4/5 卷上,就没有必要再对这些数据执行定期的备份。这是完全错误的 — 理由如下。RAID 1/4/5 有助于避免由偶然的驱动器故障引起的意外停机。但是,它并不能防止意外或恶意的 数据损坏。如果读者在 RAID 卷上以 root 身份键入 "cd /; rm -rf *",那么顷刻之间您将丢失大量重要的数据,对于这种情况,就算拥有一个包含 10 个驱动器的 RAID-5 配置也无济于事。同样,如果您的服务器物理上失窃,或者建筑物失火,那么 RAID 也帮不上忙。毫无疑问,如果您没有实施备份策略,就不会拥有历史数据的档案文件 — 如果某位同事删除了一批重要文件,您也无法将它们恢复。仅此一点就应该足以让您相信,在大多数情况下,即使是在考虑采用 RAID-1、4 和 5 之前,都应该规划并实施一种备份策略。

    在由劣质硬件组成的系统上实施软件 RAID 是另一种错误认识。如果您正在装配一台要承担重要任务的服务器,那么在预算许可的范围之内购买质量最好的硬件是合理的。如果您的系统不稳定或者散热不良,那么将陷入一种 RAID 无能为力的困境。与此类似,如果停电,RAID 显然也不能提供更长的正常运行时间。如果服务器计划担负任何比较重要的任务,请确保已为它配备了不间断电源 (UPS)。

    接下来,本文转向讨论文件系统问题。文件系统存在于软件 RAID 卷之上。这意味着,使用软件 RAID 并不能避开文件系统问题,例如,如果您恰好在使用一种非日志文件系统或者定期整理碎片的文件系统,则可能存在耗时且易出问题的文件系统检查。因此,软件 RAID 不会提高 ext2 文件系统的可靠性;这就是为什么在 Linux 阵营中仍然强调保留 ReiserFS、JFS 和 XFS 的原因。软件 RAID 和可靠的日志文件系统是一种理想的组合。

    RAID — 智能化实现
    但愿上节已经澄清了您关于 RAID 的任何错误认识。在实现 RAID-1、4 和 5 时,将其视作一种延长正常运行时间的技术是非常重要的。一旦读者实现了其中的一种 RAID,您就可以避免一种非常特殊的情况 — 意外的全面(单个或多个)驱动器故障。如果您遇到这种情况,软件 RAID 将允许系统继续运行,同时您可安排用一个新的驱动器更换故障驱动器。换言之,如果您实现 RAID 1、4 或 5,就会降低由于全面驱动器故障而导致长时间意外停机的风险。相反,您只须短时的有计划停机 — 只需留出更换坏驱动器的时间即可。显然,这意味着,如果拥有一个高可用性系统并非您的首选,就不应该实现软件 RAID,除非您计划将它主要用作一种提高文件 I/O 性能的方法。

    精明的系统管理员会将 RAID 用于一种特定的目的 — 即提高已经相当可靠的服务器的可靠性。如果您是一位精明的系统管理员,则您已经知道这些基本内容了。您已经通过实施定期备份计划使您的组织免遭灾难。您已经将服务器连接在 UPS 上,并且 UPS 监视软件已在运行,这样,在长时间停电的情况下,您的服务器将安全关闭。也许您正在使用一种日志文件系统,如 ReiserFS,以便缩短文件系统检查时间,并增强文件系统的可靠性与性能。但愿您的服务器散热良好,并由高质量的硬件组成,而且您已经对安全问题给予了密切的关注。此时,也只有在此时,读者才应该考虑实现软件 RAID-1、4 或 5 — 这样做以后,您就可以预防服务器出现全面驱动器故障,从而潜在地将服务器的正常运行时间延长了几个百分点。软件 RAID 是一层附加的保护,它使已经很稳定的服务器变得更强健。

    RAID-1 预排
    既然您已经了解了 RAID 能做什么和不能做什么,我希望您对它抱有合理的预期和正确的态度。在这一节,我将带您体验模拟磁盘故障的整个过程,随后使您的 RAID 卷退出降级模式。读者最好能够在一台测试机器上安装一个 RAID-1 卷,并且随我一起进行模拟,我强烈建议您这样做。这种模拟可以很有趣。请稍许放松一下,这样可以确保当驱动器真正出现故障时,您能够沉着冷静,知道具体如何处置。

    好了,首先安装一个 RAID 卷;如果需要回顾一下如何实现这一点,请参阅我的前一篇文章。为了执行这个测试,您必须安装自己的 RAID-1 卷,以便在在断开一个硬盘驱动器(因为这将是我们模拟驱动器故障的方式)的情况下,仍然可以引导 Linux 系统。

    在安装好自己的卷之后,如果您执行 cat /proc/mdstat 命令,您看到的输出将类似于这个代码示例。

    请注意,这使用的是 devfs,这就是读者看到上面所列的极长设备名的原因。我实际上是将 /dev/hda5 和 /dev/hde1 用作 RAID-1 磁盘。此时,内核软件 RAID 代码正在同步这两个驱动器,以便它们彼此精确地成为对方的镜像。如果 RAID-1 卷一切正常,则可以继续向下进行,在该卷中创建一个文件系统,然后将它挂载在某个位置上。向这个卷中复制一些文件,然后设置 /etc/fstab,以便在系统引导时自动挂载这个卷 (/dev/md0)。下面是我在我 fstab 中添加的一行;您要添加的行可能稍有不同:

    /dev/md0       /mnt/raid1              reiserfs        defaults            0 0



    好了;至此我们已差不多作好了模拟驱动器故障的准备,但并非万事俱备。首先,再次执行 cat /proc/mdstat,并等待卷中的所有磁盘完成同步。完成同步之后, /proc/mdstat 将类似于这个代码示例。

    开始模拟
    好了,既然重新同步已经完成,我们已作好模拟准备。向下继续,关闭机器并且切断电源。然后,打开机箱,并断开组成 RAID-1 阵列的一个硬盘。当然,您肯定不希望断开包含 Linux 根分区的硬盘 — 我们将需用它来再次启动 Linux!好,硬盘已经断开,请重新启动机器。当您登录之后,应该发现 /dev/md0 已挂载,并且您仍然可以使用这个卷。当执行 cat /proc/mdstat 时,您将看到主要变化:

    # cat /proc/mdstat
    Personalities : [linear] [raid0] [raid1] [raid5]
    read_ahead 1024 sectors
    md0 : active raid1 ide/host0/bus0/target0/lun0/part5[0]
          4610496 blocks [2/1] [U_]

    unused devices: <none>     



    您可以看出 /dev/md0 卷正在以降级模式运行。我断开的是驱动器 /dev/hde,因此,当内核引导并且试图自动启动该阵列时,系统将找不到 /dev/hde1。幸运的是,内核找到了 /dev/hda5,而且 /dev/md0 能以降级模式启动。正如您所见,/dev/hde1 分区未在 /proc/mdstat 中列出,而且其中一个 RAID 磁盘被标记为“不可用”(是 "[U_]" 而不是 "[UU]")。但是,由于 /dev/md0 仍在运行,软件 RAID-1 正在执行预期的任务 — 保持数据是可用的。

    恢复
    我们正在经历一种模拟的驱动器故障。如果当前未加电的驱动器在系统运行时真正出现故障,那将正好是我们所处的这种情形。我们的 RAID-1 卷将以降级模式运行,即该卷仍然可用,但是不再有任何冗余。在方便的时侯,我们将希望关闭系统,更换故障驱动器,并且重新启动系统。此时我们的 RAID-1 卷仍将以降级模式运行。

    一旦在机器上装好新的驱动器,我们将希望在其上创建一个大小适当的 RAID 自动检测 ("FD") 分区。为了让 Linux 能够重新读入该磁盘的分区表,可能需要再一次重启系统。一旦系统看到这个新分区,我们就可以开始恢复降级的 RAID-1 阵列 — 此后,我们又拥有了某种冗余。

    当然,我们只是在执行一个模拟过程。为了练习向 RAID 阵列中添加一个分区,我们可以作两种处理,这取决于您要模拟哪种场景。既可以关闭机器,接上驱动器,启动机器,并将原来的分区添加到阵列中,也可以关闭机器,接上驱动器,启动机器,删除该驱动器,然后创建一个 新的 RAID 自动检测分区 ("FD") — 当然,分区的大小要适当,即至少不小于它所替代的分区 — 然后将这个崭新的分区添加到阵列中。尽管第一种方案也模拟了一些事件,如磁盘控制器故障或电缆故障,但第二种方案与对实际驱动器故障的处理更加类似 — 在第一种情况下,只是某个镜像驱动器暂时不可用,/dev/md0 以降级模式运行,在问题得到修正以后,需要再次将一个分区添加到卷中。无论选择哪些模拟方案,解决方案都是相同的 — 在新分区就绪之后,需要手工将其重新添加到 /dev/md0 卷中。

    考察 dmesg
    下一步我们将把分区重新添加到阵列中,现在研读一下内核引导信息是个不错的主意。键入 "dmesg | more",就会显示内核引导信息。您将看到类似于这个代码示例的一些文本。

    现在仔细读一下这些信息,因为它们将有助于理解内核用于自动启动 /dev/md0 的过程,从而使您从另一方面对 Linux 软件 RAID 的内部工作原理有一个有益的理解。如果您读了上面列出的内核输出,您就会发现内核找到了 /dev/hda5 和 /dev/hde1,但 hde1 与 hda5 不同步。因此内核使用 /devhda5 以降级模式启动 /dev/md0,根本不涉及 /dev/hde1。现在该将原来的(或新建的)分区添加到卷中了。方法如下文所述。

    继续恢复
    首先,如果替换分区拥有一个新的设备名,请更新 /etc/raidtab,以便它反映这个新信息。然后,执行以下命令将新分区添加到卷中,请用所添加分区的设备名替换 /dev/hde1:

    # raidhotadd /dev/md0 /dev/hde1



    重构开始后,硬盘驱动器指示灯应该开始不停地闪烁。继续下一步,执行 cat /proc/mdstat 命令,以检查正在进行的 RAID-1 重构的状态。

    几分种之后,您的 RAID-1 卷将恢复正常。

    瞧!我们已经成功地从模拟的驱动器故障中恢复,您也可以开始在生产环境中使用 RAID-1 了。您现在可以将自制的“ RAID-1 认证”标签贴在自己的前额上,张开双臂,在办公室内跑来跑去,与同事们共享快乐。实际上,也许这不是一个好主意。下篇文章再见

    参考资源

        * 请阅读 Daniel 关于 RAID 的两篇文章中的第一篇,其中介绍了 Linux 2.4 的软件 RAID 功能,并且说明了如何创建线性卷、RAID-0 卷和 RAID-1 卷
        * Software-RAID HOWTO 是关于 Linux 软件 RAID 相关信息的另一个极好资源
        * 如果您想学习如何创建 RAID 根文件系统,您可能需查看 Boot+Root+RAID+Lilo Software RAID HOWTO
        * 要获取 raidtools-0.90 的更新版本,请关注 ftp.kernel.org 和 people.redhat.com
        * 在 Linux 内核档案文件中找一个最近的内核
        * 学习 IBM developerWorks 的这篇教程,它介绍了如何从源代码开始编译并安装一个新内核。
        * 查找 raidtools 程序
        * 获取 raidtools 的最新版本
        * 查看有关软件 Raid 的 Linux 解决方案的更多技巧

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

    本版积分规则

    快速回复 返回顶部 返回列表