微信公众号 
图码生活

每天发布有五花八门的文章,各种有趣的知识等,期待您的订阅与参与
电脑报 1992-2001 十年文章全集
电脑报 1992-2001 十年文章全集
包含从 1992 年 - 2001 年间,两万余篇期刊文章,查询最少输入两个字符
随便看看
读取中
读取中
标题在Linux中实现RAID
栏目软件世界
作者甘露
发布2001年27期
  RAID(Redundant Array of Independent Disks)是把相同的数据存储在多硬盘上的一种技术,I/O操作交替在不同的硬盘上进行,因此,整个系统失效的时间将大大延长。因此,RAID也是我们对高要求系统常采取的一种系统维护方案。下面,我们就来看看如何在Linux下实现这一功能。
   一、准备工作
  准备RAID之前,提醒你将硬盘上的重要数据备份到软盘或光盘或磁带上,以免发生意外造成不必要的损失。当然你需要至少两块硬盘,最好保证硬盘的接口类型(IDE或SCSI)、参数(柱面数/磁头数/扇区数/转速/缓存/DMA)等是一致的。
   二、实现步骤
  第一步:关机,将第二块硬盘接到第一个IDE控制器的Slave接口上。
  注:假设你跟我一样把第一块硬盘挂在第一个IDE控制器的Master接口上,而CD-ROM接在第二个IDE控制器的Master上。
  第二步:启动系统,以Root身份登录,运行以下命令对硬盘进行分区:
  # fdisk /dev/hdb
  注:将第二块硬盘划分成一个主分区,建立一个/dev/hdb1分区
  当然,为了提高访问速度,你可以将硬盘进行比较细致的划分,尽可能将分区合理分布在不同的硬盘上。然后,再用Mdcreate将它们组合成一个mdx(x:1,2,3)。如果没有在以前对硬盘进行分区,确保你的/dev目录中已经设定了RAID硬盘,请参照下例:
  # mknod /dev/md0 b 9 0
  # mknod /dev/md1 b 9 1
  # chmod 0600 /dev/md﹖
  第三步:(1)如果你还在使用2.0.x的内核版本,可能需要连上Internet去找到与你的内核版本一致的补丁,因为它只支持RAID0,至于RAID-1、RAID-4和RAID-5,则需要补丁程序,然后才能支持。绝大多数的补丁都可以在RAID tools directory(ftp://ftp.kernel.org/pub/linux/daemons/raid/)里面找到,另外也可以在Ingo Molnar’s RAID patcher directory中找找,大多数的2.2内核版本都可以找到补丁。注意要使用与你的内核版本一致的补丁,假如不一致,可能导致无法使用,或者结果更糟。使用补丁时,首先进入内核源代码目录(/usr/src),然后使用patch命令,如下例:
  # cd /usr/src/linux
  # patch -p1 <~/raid-2.2.17-A0
  加入补丁完毕以后,使用以下选项来重新编译内核。
  注:如果你正在使用的核心是2.0.X,并且不是自己编译过的话,大多数情况下是支持软RAID的。如果不能确定,则应自己编译核心。在配置时,应选择对md(Multi-Device多设备)的支持。
  .CONFIG_BLK_DEV_MD=yes
  .CONFIG_MD_STRIPED=yes
  .CONFIG_MD_MIRRORING=yes
  .CONFIG_MD_RAID5=yes
  .CONFIG_MD_BOOT=yes
  .CONFIG_AUTODETECT_RAID=yes
  接着安装RAID tools(ftp://ftp.kernel.org/pub/linux/daemons/raid/raidtools-0.41.tar.gz)工具,这是一个只有48k的小程序。下载后,进行编译:
  # gunzip -d raidtools-0.9.tar.gz
  # tar -xvf raidtools-0.9.tar
  # cd raidtools-0.9
  # ./configure
  # make
  # make install
  make install在/dev下产生md0-md3共4个设备。
  单击OK按钮,完成安装。
  # mdcreate raid0 -c8k /dev/md0 /dev/hda1 /dev/hdb1
  将它Mount到根目录下的某个目录上,就可以正式使用了。安装方法如下:
  # mount /dev/md0 /raid
  注:/raid为笔者在根分区建的一个Mount点
  使用mkraid命令创建你新定义的RAID硬盘,
  # mkraid /dev/md1 这样就可以生成一个新的设备:/dev/md1。
  同时,也需要在你新建的RAID硬盘上创建文件系统,
  # mke2fs -v /dev/md1
  注:在新的存储设备上建立Ext2文件系统
  启动新建立的RAID盘:
  # /sbin/mdadd -ar
  查看/proc/mdstats文件的内容,以检查RAID0的状态。
  # cat /proc/mdstats
  如果系统显示的跟下例相似:
  Personalities:[raid0]
  read—ahead 1024 sectors
  md0: active raid0 hda1[1]hdb1[0]2202416 blocks 8k chunks
  md1: inactive
  md2: inactive
  md3: inactive
  这说明RAID0已经正确执行了。然后将以下两个命令加入到Init.sysinit文件中,在文件系统初始化中加载RAID0,这样,只要系统一启动,首先就执行RAID,用户就不必再手工安装了。
  /sbin/mdrun -ar
  mount /dev/md0 /raid
  当然,如果你不觉得麻烦,也可以手工运行以上命令,以手动方式启动软RAID盘。
  (2)如果你使用的是最新的2.4内核版本,恭喜你,你可以省略到处找补丁和下载安装Raid tools的麻烦了,因为新发布的2.4内核已经在几个方面作了极大改进(新的版本中,本身就已经提供了Raidtools在/sbin目录中,有Raidtools的一系列工具,其中有Mkraid、Raid0run、Raidstop、Raidstart等一组工具。),包括更统一的配置,以及在/etc/raidtab目录中关于RAID更详细的说明文档,另外的好处是你可以不再写传统的脚本文档(scripts),Linux就可以自动识别和运行RAID卷了。
  如果不是你自己编译过的话,大多数Linux的发行版在一般情况下是支持软RAID的。如果不能确定,则应自己编译核心,编译方法同上。在配置时,应选择对md的支持。同时使用2.4内核版本的devfs功能。
  接着建立文件/etc/raidtab。一个简单的/etc/raidtab文件如下:
  raiddev /dev/md0(注:指明RAID设备)
  raid-level 0(注:指明将在RAID硬盘上建立何种RAID)
  nr-raid-disks 3(注:说明RAID硬盘上分区的个数)
  persistent-superblock 0(注:一般设定为1,但是如果使用的是已经有的老式的mdtools RAID硬盘,就必须设定为0)
  chunk-size 8k(注:说明RAID硬盘stripe的块大小,可以是从4k到128k,当然,应该是2的倍数。一般来说4k和8k是最常见的设定值,你可以试一下,哪个值最适合于你的系统)
  device  /dev/hda1
  raid-disk  0
  device  /dev/hdb1
  raid-disk  1
  device   /dev/hdc1
  raid-disk   2
  raiddev /dev/md1
  raid-level   5
  nr-raid-disks  4
  nr-spare-disks 1(注:如果使用RAID 5阵列,在此处说明spare的数量。注意只有两块硬盘是无法使用RAID 5的)
  persistent-superblock  1
  parity-algorithm left-symmetric(注:说明将要使用的语法,通常使用“left-symmetric”能够增加性能)
  chunk-size 8k
  device   /dev/sda1
  raid-disk  0
  device   /dev/sdb1
  raid-disk  1
  device   /dev/sdc1
  raid-disk  2
  device   /dev/sdd1
  raid-disk  3
  device   /dev/sde1
  spare-disk 0
  一旦在/etc/raidtab定义好RAID硬盘以后,同样使用mkraid命令创建新定义的RAID硬盘。
  # mkraid /dev/md1 这样就可以生成一个新的RAID设备:/dev/md1。
  同时,也需要在你新建的RAID硬盘上创建文件系统。
  # mke2fs -v /dev/md1(注:在新的存储设备上建立Ext2文件系统)
  经过大约两三分钟,新的文件系统即可正确生成。做完这些必须的工作以后,加挂新的RAID硬盘,再试试是否正常工作了。
  # mount /dev/md0 /raid(注:/raid为笔者在根分区建的一个Mount点)
  # raidstart -a(注:启动软RAID)
  # cat mdstat
  如果系统显示的跟下例相似:
  Personalities: [raid0]
  read—ahead 1024 sectors
  md0:active raid0 hda1[1] hdb1[0]2202416 blocks 8k chunks
  unused devices:
  恭喜你,这表明一切顺利,你的RAID0已正常运行了。
   三、注意事项
  值得注意的是LILO和Loadlin都需要一个没有stripped/mirrored的分区来读取内核的image映像文件,因此,如果你打算把根分区(/)也RAID,可能你将无法启动,这种情况下,你或者使用最初的ramdisk支持(使用mkinitrd命令建立你的ramdisk映像),或者注意下载网上的一些补丁。
  另外也建议你把RAID分区标志为0xfd类型,同时在配置文件中把CONFIG_AUTODETECT_RAID设为yes,这样你就不需要在一个初始化脚本文件中定义raidstart了,因为最新的内核版本会自动进入/etc/fstab目录,简单地对你的RAID硬盘与其他硬盘一视同仁,即便它被用作root device。