Linux 版 (精华区)

发信人: howdoit (教练让我上场!!!), 信区: Linux
标  题: 快速完成RAID配置
发信站: 哈工大紫丁香 (Tue May 18 08:47:26 1999), 转信

《Linux公报》……让Linux更富魅力!

              快速完成 RAID 配置

               By Eugene Blanchard   翻译:Zou hongbo

    如果你想实现一个 Linux 的软件磁盘阵列(以下简称 RAID 或

raid), 那么在开始前, 下面的这个最重要的网点是你应该首先去涉猎

的: 

    Linas Vepsta 的 raid 主页:

http://linas.org/linux/raid.html 

    本文发表的时间是 1998年10月29日, 目前已有的文档还不全, 比

较混乱. 这篇文章就是 澄清一些当你在实现 raid0 和 raid1 时会遇

到的问题. (译者注: raid0 -- 是指将数据散布在不同的硬盘上操作,

无冗余数据, 读写都可以并行 操作, 速度快, 英文简称为 striping,

以下译作"分散读写"; raid1 -- 是指磁盘镜像, 英文为 mirroring.)

    我想实现基于分散读写模式(striping)的镜像模式(mirroring).

分散读写模式具备优异 的读写性能, 而镜像模式带来备份和读的性能

增强. 

    我使用一个 2.0.30 的内核, 实现了 raid0(striping). 然后我

将内核升级到 2.0.35, 这下笑话开始了. 在同 raid0 做了一番争斗

后(译者注: 可能未成功), 我开始处理 raid1. 然后, 你猜怎样, 扔

掉你所知道所有的 raid 知识, 从打草稿开始! (因此)一个简化工作

的好主意是, 首先使 raid0 能用, 之后增加 raid1. 故事是这样的: 

工作于内核 2.0.30 下的 Raid0 (striping)

    从 2.x 版本开始, 内核已经实现了线性和 raid0(striping) 模

式. 你必须重新编译内核 以带有多设备界面支持(multiple

devices). 我强烈建议将它编译到内核中. 如果你是 使用模块方式,

你将会吃尽苦头. 

    检查是否多设备界面(multiple devices)已经安装. dmesg |more

然后检查是否 存在 md 驱动器(md driver)和 raid0 已经注册(raid0

registered)的信息(想不起精确的 词语 - "夜太深" ;-( ) 

    或敲入 cat /proc/mdstat 查看你的 md 驱动器的状态. 你应该看

到 /dev/md0 到 /dev/md3 处于非激活状态. 

    奇怪的是, 内核工具 mdtools-0.35 通常并不随销售包提供. 那

里面有建立, 运行和使 raid 停止的工具. 

    你在 Slackware 的销售包中可以找到它( 大小为 23k ) 

http://sunsite.unc.edu/pub/Linux/distributions/slackware/slakware/ap1/md.tg

z

下载到 /usr/local/src 然后: 

 

cd /  

tar -zxvf /usr/local/src/md.tgz

它将把文件放在正确的位置. 

sbin/mdadd

sbin/mdcreate

usr/etc/mdtab

install/doinst.sh

usr/man/man5/mdtab.5.gz

usr/man/man8/mdadd.8.gz

usr/man/man8/mdcreate.8.gz

usr/doc/md/COPYING

usr/doc/md/ChangeLog

usr/doc/md/README

usr/doc/md/md_FAQ

    通读 README 文件(毫无疑问, 忽略警告们). 这份文档极适合于

内核版本 2.0.30 和 线性(linear)/raid0 模式. Linux 日报(Linux

Journal)(1998年六月或七月刊)中有 一篇精采的介绍怎样实现

raid0(striping) 的文章. 它增强了我的兴趣. 

Linux 公报(LG) 中有另一篇文章, 也有所帮助: 

http://www.ssc.com/lg/issue17/raid.html 

    你应该在 fsck -a 之前开始启动 raid 阵列, 在 Slackware 中

它(fsck)通常 位于 /etc/rc.d/rc.s 文件中, 而在 /etc/rc.d/rc.0

和 rc.6 中停止 raid 阵列. (BTW: 既然在 slackware 中这两个文件

相同, 我们能不能做一个软联结, 然后只需 修改一个?) 

    为了检查它是否工作, 敲入 cat /proc/mdstat, 它(输出的信息)将

指示 md 设备的情况. (/dev/md0 raid0 using /dev/sda1 and

/dev/sdb1). 

    测试, 测试, 再测试你的 raid. 关机, 上电, 看看它是否如你所

愿地工作. 

    我曾做过有趣的拷贝, 使用 cp -rap 开关将全部目录结构拷入

raid 阵列中. (测试完成)然后修改 /etc/fstab 以包括新的驱动器

(指 raid). 

    交换分区不需要分块操作. 当一个优先级启用时, 他们将自动这

样做. 阅读 Software-RAID-mini-HOWTO 和傻瓜问题一段可知详情.

这出乎意料地简单. 

现在使用 UPS!

    如果(运行中)掉电了, 你将失去你的 raid 和上面的所有数据!

你应该使用一个 UPS 后备电源. UPS 的作用是让你的系统在灯火管制

或电源失败时能够保持运行一小段时间. UPS 能够在电源失败时通过

一个串口通知你的系统. 在后台, 有一个精灵程序在运行监控 这个串

口. 当它被通知电源失败时, 它将在发出关机命令前等待一段预定时

间 (通常是 5 分钟). 如此的工作原理是如果 5 分钟内还是无电, 那

么将持续很长时间. 

    大多数 Linux 销售包带有基本的 UPS 电源精灵程序. 使用 "man

powerd" 可以得到 更多信息. 这是一个简单的精灵程序, 它在

/etc/inittab 中. 从根本上来说, 一个 哑 UPS, 只是在串口保持一鼋恿α powerd

 检测这个联结是否已经断掉. 一旦 联结断掉, 它将在预定时间后将 PC 关闭. 警告用

户, 并且向 root 发一封邮件. 

    我使用一台 APC 智能 UPS, 它通过串口通讯. 有一个称作

apcupsd 的卓越精灵如有 神助般地工作. 它在这儿. 请阅读布告, 赞

同作者, 他完成了一项优异工作 (作者的光荣!). 安装工作如同魔法,

文档也十分优秀. 

http://www.dyer.vanderbilt.edu/server/apcupsd/ 

RAID0 基于 2.0.31 to 2.0.34

    没有尝试过. 因为我直接从 2.0.30 升级到 2.0.35, 一个最新的

稳定版本. 

RAID0 基于核心版本 2.0.35

    mdtools 在我家中的机器上编译地很顺利(运行 2.0.30), 但在我

的工作机上不能编译 (已经升级到 2.0.35). 我不断地得到一个关于

MD_Version (记不住确切的名称)没有 定义的错误. 经过大量挠头的

搜索, 我发现在 /usr/src/include/md.h 中有 md 驱动器 的版本号.

在版本 2.0.30 中, 它是 0.35; 而在 2.0.35 中它是 0.36. 如果你

使用 "mdadd -V" 它将指示 mdadd 可以工作的 md 的版本号. 所以我

取得了错误的 mdtools 版本. 这里是正确版本的位置: 

ftp://ftp.kernel.org/pub/linux/daemons/raid/raidtools-0.41.tar.gz

下载到 /usr/local/src 然后 

tar -zxvf raidtools-0.41.tar.gz

将生成一个新目录 /usr/local/src/raidtools-0.41 

进入新目录, 阅读 INSTALL 文件, 然后 

../configure

    我记不清之后是否必须做 make 和 make install. 我不能复现 这

一过程, 因为我已经为 raid 打了一个新补丁. 

    你应该有一个新的 mkraid 和 mdadd 的运行文件(binary). 敲入

mdadd -V 以 检查是否你的运行码已经更新了. 它应该显示一些像 

mdadd 0.3d compiled for raidtools-0.41的信息. 然后阅读

QuickStart.RAID 获得最新信息. 对于 raid0, 比以前版本没有多少

改变. 

RAID1 基于内核 2.0.35

    若想使用 raid1, 4 或 5, 你必须为内核打一个补丁, 它位于 

ftp://ftp.kernel.org/pub/linux/daemons/raid/alpha/raid0145-19981005-c-2.0.3

5.tz

    拷贝到 /usr/src directory, 将补丁解压缩: 

tar -zxvf raid0145-19981005-c-2.0.35.tz

    注意补丁将搜索 /usr/src/linux-2.0.35 目录. 如果你将

2.0.35 的源码安装在目录 /usr/src/linux 下, 你需要mv

/usr/src/linux /usr/src/linux-2.0.35, 然后做一个符号联结 ln -s

/usr/src/linux-2.0.35 /usr/src/linux 

    为了使用这个补丁, 进入目录 /usr/src: 

patch -p0 <raid0145-19981005-C-2.0.35

(在我的系统中有些地方小写的 c 会变成大写的 C 吗? 也许在解压

后?) 

    你现在可以去重新编译内核. 当你选择多设备(选项)时, 你将看

到有选择 raid1,4和5. 依次步骤是 

make menuconfig (or config or xconfig)

make clean

make dep

make zImage

make modules            (如果你使用了模块)

make modules_install

    将新内核拷到你系统中适当的地方(/ 或 /boot). 我建议你同时

拥有一个无 raid 的内核 和一个有 raid 的内核. 你能够通过修改

lilo.conf 来确定使用那一个内核启动. 这根本 不困难, 尽管初看起

来有些恐怖. 查看 /usr/lib/lilo 的例子和文档. (译者注: 可能为

Slackware 中的目录, Redhat5.1 中无) 

    查看 dmesg | more 的输出内容确定 md 驱动器已经装载, raid0

& 1 已经注册. 敲入 cat /proc/mdstat 看看你是否有了新的 md 驱动

器. 你应该看到 16个 md 驱动器而不是 4 个. 

    你将必须升级你的 raidtools. mdadd, /etc/mdtab 和 mdcreate

是旧的, 新工具应该是 raidstart, /etc/raidtab 和 mkraid. 从这

一点上来说, (当前的)文档的确是过时了. 

ftp://ftp.kernel.org/pub/linux/daemons/raid/alpha/raidtools-19981005-B-0.90

.tar.gz

下载到/usr/local/src 然后 

 

tar -zxvf raidtools-19981005-B-0.90.tar.gz

这将产生一个新目录 /usr/local/src/raidtools-0.90. 进入这个目

录作 

../configure

又一次, 我记不起是否该接着做 make 和 make install. 

一个较简单的方式完成内核 2.0.35 下的 RAID0

使用两个 scsi 设备 /dev/sda1 和 /dev/sdb1 完成一个 raid0 阵列

的步骤: 

   1.将 /dev/sda1 和 /dev/sdb1 分区, 让他们有相同的块大小. 

   2.将分区的类型设为 0xfd. 这是用来让新内核在启动时自动识别

      raid. 

   3.按下面例子修改 /etc/raidtab 文件(随 raidtools 提供的例子

      缺少一些重要的信息): 

       

              # Striping example 

              # /dev/md0 using /dev/sda1 and /dev/sdb1

              

              raiddev /dev/md0

                      raid-level              0

                      nr-raid-disks           2

                      persistent-superblocks  1

                      nr-spare-disks          0

                      chunk-size              32

                      device                  /dev/sda1

                      raid-disk               0

                      device                  /dev/sdb1

                      raid-disk               1

   4.敲入 mkraid -f /dev/md0 一定注意 - 阅读错误信息, 明确方向!

   5.cat /proc/mdstat 检查输出信息, 确定 md 设备是否正确地做

      好. 

   6.使用 mke2fs -c /dev/md0 格式化新 raid 设备. 

   7.产生一个安装目录(例如 /raidtest)以测试它是否工作. 

   8.mount /dev/md0 /raidtest 

   9.看你是否能将一个文件拷贝到 /raidtest. 如果你的硬盘设备有

      各自独立的 LED 灯 , 你能够看到两个设备都在工作. 

  10.重启动, 检查内核是否自动将 raid 设备 md0 关闭. 会有一些

      信息滚过屏幕. (有 谁知道如何使用 "dmesg" 读取关机信息?) 

  11.检查重启动过程中计算机是否自动识别 raid 设备和 /dev/md0

      是否作为一个 raid0 阵列. 如果不是, 检查前几个步骤, 特别

      是步骤2和步骤4. 

基于内核 2.0.35 RAID1 的新方式

    使用两个 raid0(striping)设备构造一个 raid1 阵列 /dev/md2

的步骤如下, 两个 raid0 设备为 /dev/md0 (/dev/sda1 +

/dev/sdb1) 和 /dev/md1 (/dev/sdc1 + /dev/sdd1): 

   1.按照上面(建立 raid0 的)步骤建立 /dev/md0 和 /dv/md1. 重

      要信息: 你不能安装 或者在 /dev/md0 和 /dev/md1 上建立文

      件系统. 这只是测试 raid0 是否工作! 

   2.按照下面例子修改 /etc/raidtab 文件(随 raidtools 提供的例

      子缺少一些重要 信息): 

              # Striping example 

              # /dev/md0 using /dev/sda1 and /dev/sdb1

              

              raiddev /dev/md0

                      raid-level              0

                      nr-raid-disks           2

                      persistent-superblocks  1

                      nr-spare-disks          0

                      chunk-size              32

                      device                  /dev/sda1

                      raid-disk               0

                      device                  /dev/sdb1

                      raid-disk               1

              # /dev/md1 using /dev/sdc1 and /dev/sdd1

              

              raiddev /dev/md1

                      raid-level              0

                      nr-raid-disks           2

                      persistent-superblocks  1

                      nr-spare-disks          0

                      chunk-size              32

                      device                  /dev/sdc1

                      raid-disk               0

                      device                  /dev/sdd1

                      raid-disk               1

              # Mirror example 

              # /dev/md2 using /dev/md0 and /dev/md1

              

              raiddev /dev/md2

                      raid-level              1

                      nr-raid-disks           2

                      persistent-superblocks  1

                      nr-spare-disks          0

                      chunk-size              32

                      device                  /dev/md0

                      raid-disk               0

                      device                  /dev/md1

                      raid-disk               1

   3.敲入 "mkraid -f /dev/md2" 重要信息 - 阅读错误信息, 明确

      方向! 这一步 要化一段时间, 因为磁盘要进行同步(超过 39 分

      钟). 

   4.cat /proc/mdstat 查看是否 md 设备正确地完成. 

   5.使用 mke2fs -c /dev/md2 格式化新 raid 设备 

   6.产生安装目录(例如 /raidtest_mirror) 

   7.mount /dev/md0 /raidtest 

   8.看你是否能够将文件拷到 /raidtest 中. 如果你的硬盘有各自

      独立的 LED 灯, 你可以发现它们在同时工作. 

   9.加 raidstart /dev/md2 到你的 /etc/rc.d/rc.s 文件中, 注意在

      fsck -a 之前. 一个好位置是正在 swapon -a 之后. 目前, 内核

      不能自动识别 raid1. 下一个补丁将完成它(自动识别). 

  10.修改 /etc/fstab 将 /dev/md2 安装到 /raidtest. 

              /dev/md2        /raidtest       ext2    defaults        1    

   1

  11.重启动, 看内核是否自动关闭设备 md0, md1 和 md2. 会有一些

      信息滚过屏幕. (有谁知道如何使用 "dmesg" 查看关机信息?) 

  12.检查在重启动过程中内核是否自动识别出 raid 设备 /dev/md0

      和 /dev/md1 全部 启动作为 raid0 阵列. 检查 /dev/md2 设备

      是否为一个 raid1 阵列. 

  13.cat /proc/mdstat 查看是否 md 设备正确建立. 

你应该有 基于 raid0 的 raid1 阵列在运行. 

如果你遇到问题, 这里有一些其他资源可以参考: 

   1.linux raid 档案:

      http://www.linuxhq.com/lnxlists/linux-raid/ 

   2.发一条新闻到 comp.os.linux.setup 

   3.搜索 www.dejanews.com - 过去 5 年来新闻组消息的归档站点.

   4.如果你完全不知如何是好了, 向 Linux RAID 邮件列表发

      e-mail. 询问问题, e-mail linux-raid@vger.rutgers.edu 

      参加内核 RAID 列表, e-mail majordomo@vger.rutgers.edu 在

      信体中写 subscribe linux-raid 

   5.不要 e-mail 给我, 所有我所知道的都已经写在这儿了! 

  

                       版权所有 (C) 1998 NJLUG

          出版于第35期《Linux公报》1998年12月 中文版第二期

                            


--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: bin@mtlab.hit.edu.cn]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:208.783毫秒