blog » 存储备份恢复 » dmraid介绍Linux上应用ATA/SATA RAID技术
dmraid介绍Linux上应用ATA/SATA RAID技术
我本来想在P35的主板ICH9R上使用他的硬件Raid技术,没有想到,怎么样都不行.
下面是一个不错的文章,有关linux对硬件Raid的技术的说明。
同时,希望Redhat快点更新dmraid支持ICH8R和ICH9R.
作者:徐秉义
本文主要介绍 dmraid 工具:Linux 上使用 ATA / SATA RAID 技术。
此处所提及的 ATA / SATA RAID 功能,主要是由主机板上的晶片所提供,
与往常伺服器常见的 SCSI RAID 不太一样。
“软体模拟”RAID 对上“硬体运算”RAID 以及“软硬兼施”BIOS RAID
RAID 一般分类成 Software RAID 与 Hardware RAID 说明如下:
Software RAID
Software RAID 是由作业系统来提供 RAID 功能,此举会耗用较多 CPU 运算资源来作动,
所以要运行软体模拟 RAID 最好是双 CPU 以上且高时脉等级主机,不然当遇到大量运算时,
整体效能会大打折扣。
温馨提示:Linux 上 Software RAID 技术已是相当成熟,使用装置 /dev/md0、
/dev/md1、/dev/md2 依此类推,MD 是 Mutiple Device 之意。
Hardware RAID
Hardware RAID 由专属 RAID 运算晶片,晶片位于介面卡或直接嵌入在主机板上,
这时候作业系统只需要驱动 RAID 晶片即可,如此一来把 RAID 任务分工给 RAID 晶片,
CPU 也较为轻松,管理上会比较简便。
温馨提示:Hardware RAID 厂商通常会提供监控 RAID 状态工具,若是遇到磁碟
有故障情形时,主机会闪烁故障灯号或是发出哔哔声。
Hardware RAID 以往应用在 SCSI 硬碟较多、使用 ATA/IDE 硬碟较少,近年来因为
SATA 硬碟价格低、容量大、效能还不差,厂商纷纷出产使用 SATA 硬碟的磁碟阵列卡,
购买需考量到价格、效能、功能、连接磁碟数量外,还有是否支援您所使用的作业系统。
Note:中、小企业所使用到磁碟阵列卡通常会提供驱动程式支援 Windows、Linux
与 Mac OS X(FreeBSD 核心)
ATA(SATA) RAID / BIOS RAID / Fake RAID
这类型 RAID 介于 Software RAID 与 Hardware RAID 之间,算是半个 Hardware RAID,
通常由主机板晶片来“帮忙”RAID 运算,因此有 Fake RAID(假 RAID)之称。
要启动这个 RAID 功能,要先在 BIOS 画面设定以后,再使作业系统能够正确辨识装置即可。
因为这款 RAID 要在 BIOS 内开启,所以亦有人称之为 BIOS RAID。
Linux 在这方面支援,主要是使用 dmraid 套件搭配 device-mapper 功能,来存取 BIOS RAID
磁碟,以下是使用 Fedora Core 5 执行指令“dmraid -l”(参数是小写 L)内容,
可看出 dmraid 支援各大厂商主机板 RAID 晶片,像是 Intel、VIA、NVidia 都有包含在其内,
括号内是针对某款晶片所支援的 RAID Level(级别)。
[root@www ~]# dmraid -lhpt37x : Highpoint HPT37X (S,0,1,10,01) hpt45x : Highpoint HPT45X (S,0,1,10) isw : Intel Software RAID (0,1) lsi : LSI Logic MegaRAID (0,1,10) nvidia : NVidia RAID (S,0,1,10) pdc : Promise FastTrack (S,0,1,10) sil : Silicon Image(tm) Medley(tm) (0,1,10) via : VIA Software RAID (S,0,1,10) dos : DOS partitions on SW RAIDs
在 dmraid 说明文件中(指令 man dmraid)寻找 list 字眼会找到这一段说明,这里清楚看出 dmraid 除了支援一般常见的 RAID0、RAID1 以外,尚有 RAID10、RAID01 与 Span
{-l|--list_formats} List all available metadata format handlers with their names and
descriptions. Supported RAID levels are listed in parenthesis: S: Span (concatination)
0: RAID0 (stripe)
1: RAID1 (mirror)
10: RAID10 (mirror on top of stripes)
01: RAID10 (stripe on top of mirrors)
| S | Span concatination |
将磁碟串接在一起并采用循序方式存取 (一颗硬碟用完再用下一颗) |
| 0 | RAID0 Stripe | 也是将磁碟串接在一起 但不同于 S 的地方是采用随机方式存取 (立即将资料分散在不同硬碟) |
| 1 | RAID1 Mirror | 使用镜像方式使得两/多颗磁碟资料同步 |
| 10 | RAID10 | 10 是上层做 1(镜像)底下做 0(串接) |
| 01 | RAID10 | 01 是上层做 0(串接)底下做 1(镜像) |
Note:RAID10 最少需要四颗硬碟。
您发现了吗?似乎是没有支援 RAID5 功能!在笔者截稿前(2006年10月)dmraid 新版(1.0.0.rc11)已经支援 Nvidia 晶片 RAID5 功能。因为 Fedora Core 5 内建 dmraid 版本(1.0.0.rc9)较旧,故看不到相关资讯。
实战应用 dmraid
印象中 Linux 对于伺服器等级硬体设备,像是 SCSI 介面卡、SCSI RAID 介面卡、Fibre Channel 介面卡这些的驱动支援算是“不遗余力”,但是遇到这种 BIOS RAID 比较像是桌上型/工作站使用的硬体配备来说,就不见得能够正常驱动了。
笔者手边的这台硬体‘ASUS P5LD2 主机板’原本想说内建的 BIOS RAID 于先前查询测试过好像不支援 Linux,在最近机缘巧合下,拿了张 Fedora Core 5 安装片一试,没想到居然可以使用了耶!于是就索性研究相关技术以及测试验证,介绍给大家参考,手边若有类似硬体的读者朋友们,不妨一同来玩玩吧!
测试硬体配备介绍
此次所使用的测试主机相关规格如下:华硕(ASUS)P5LD2 主机板,搭配两颗相同容量大小的 SATA 硬碟,另外备用一颗 IDE 硬碟。较值得一提的是,这个内建的 BIOS RAID 主要是由 Intel ICH7R 晶片提供,功能包括 RAID0、RAID1、RAID5 及 RAID10,详细规格说明请至华硕官方网站查询,网址 http://taiwan.asus.com.tw/products4.aspx?modelmenu=2&model=515&l1=3&l2=11&l3=185
另外在测试部份,一方面因为笔者手边只有两颗相同规格的 SATA 硬碟,二方面 dmraid 对于这款晶片暂时只支援到 raid0 与 raid1,所以就只能先测试这部份的功能啰。
| 设备 | 型号/数量 | 用途 |
| 主机板 | 华硕 P5LD2 主机板 | 测试 BIOS RAID |
| SATA 硬碟 | 两颗同规格 SATA 硬碟 | 测 RAID0 与 RAID1 |
| IDE 硬碟 | 一颗普通 IDE 硬碟 | 用来安装与执行 SLES 10 |
Note:对于无法直接经由安装程式就抓到 BIOS RAID 磁碟的 Linux Distribution(例如 SLES 10),笔者是先将 SLES 10 装在 IDE 硬碟上,待更新 dmraid 工具后,就可以使用 BIOS RAID 磁碟。
测试软体介绍
软体部份笔者准备了包括 Fedora Core 5 / Fedora Core 4 与 SLES 10(SuSE Linux Enterprise Server)与 SLED 10(SuSE Linux Enterprise Desktop)这几个 Linux Distribution,另外还有将 dmraid 新版从原始码编译并执行的整个过程。
测试情形
调整 BIOS 内有关 SATA 运作模式
在 P5LD2 主机板 BIOS 设定画面中,找到控制 SATA 运作模式有三种,分别为 Standard IDE、AHCI 与 RAID,通常主机板针对 SATA 会有两到三个选项,大概意思不外乎是‘向下相容 IDE’(旧规格)、‘当成 SATA’(新规格)或是‘做 RAID’,这次主要就是测试 SATA RAID 功能,所以当然是选择“RAID”啰!
温馨提示:AHCI(Advanced Host Controller Interface)是 Intel 针对 SATA 介面所开出的一个特殊规格(提供 SATA 介面 NCQ 功能),这款 ICH7R 晶片恰好有这项功能,这也意味着并不是所有 Intel 晶片皆提供 AHCI 功能。

使用 Linux 观察磁碟装置代号来判断 SATA 运作模式是个不错的方式,整理如下表:
| 磁碟装置代号 | 意义 | 范例 |
| hd(IDE hard disk) | SATA 硬碟被当作 IDE 磁碟(旧规格) | /dev/hda |
| sd(SCSI disk) | SATA 硬碟被当作 SCSI 磁碟(标准方式) | /dev/sda |
| 位于 mapper 底下 | SATA 硬碟被当作 BIOS RAID 磁碟 | /dev/mapper/isw_dcaihbahhd_Volume0 |
BIOS RAID 设定画面
在开启 BIOS RAID 后,可以进入其设定画面,通常可以在这边设定 RAID0、RAID1、RAID5 及 RAID10 等等,笔者先将两颗硬碟设定成 RAID0(追求效能为主)来做测试。
按下 Ctrl + i 进入设定之前的画面

Intel ICH7R BIOS RAID 设定画面

使用 Fedora Core 5 测试
测试最顺畅的当属 Fedora Core 5(dmraid 版本 1.0.0.rc9),在放入安装光碟开机后,配合 Fedora 安装程式 anaconda 导引之下,立即找到 /dev/mapper/isw_dcaihbahhd_Volume0 这个 BIOS RAID 磁碟,至于其他安装步骤则与一般安装无异。

安装完成后,在效能方面的表现相当不错,开机很顺畅,使用指令“hdparm -t /dev/mapper/isw_dcaihbahhd_Volume0”测出来磁碟 I/O 速度达到 100 MB/sec 以上,若拿这个主机来当 File Server 或是多媒体编辑工作站应该会是个物超所值的选择。
[root@r5-129 ~]# hdparm -t /dev/mapper/isw_dcaihbahhd_Volume0/dev/mapper/isw_dcaihbahhd_Volume0: Timing buffered disk reads: 316 MB in 3.01 seconds = 105.07 MB/sec HDIO_DRIVE_CMD(null) (wait for flush complete) failed: Inappropriate ioctl for device [root@r5-129 ~]#
至于 Fedora Core 4(dmraid 版本 1.0.0.rc8)与 Fedora Core 3(dmraid 版本 1.0.0.rc5)这些比较旧版的 Linux Distribution,在安装时都无法正确抓到 BIOS RAID 所提供的磁碟。
SLES 10 与 SLED 10 在安装过程中,也是无法正确抓到 BIOS RAID 磁碟,接着同时按下“Alt + Ctrl + F2”来到安装时的命令列中,输入“dmraid -a y”指令,出现错误讯息并且依然无法驱动 BIOS RAID。
# dmraid -a yERROR: isw: volume Volume0 is broken ERROR: isw: volume Volume0 is broken
Note:SLES 10 与 SLED 10 的 dmraid 版本皆为 1.0.0.rc8
测试的结论是,若是要直接使用 BIOS RAID 磁碟开机,就需使用能够于安装过程中即驱动 BIOS RAID 磁碟的 Linux Distribution,而能不能够驱动 BIOS RAID 磁碟,主要与 dmraid 版本够不够新、合不合用有关系,并且搭配 device-mapper 方式,来驱动 BIOS RAID 磁碟。
将 Linux 先安装在 IDE 硬碟
对于那些无法于安装期间就正常抓到 BIOS RAID 磁碟的 Linux Distribution,笔者的处理方式是先将 Linux 安装在另一颗 IDE 硬碟上,待正常开机后再补装新版 dmraid 软体来辨识 BIOS RAID 装置。
进阶学习:也可以尝试将新版 dmraid 兜进 Distribution 的安装程式中(网路上有类似的文件),并且安装程式也能够支援 BIOS RAID 磁碟的话,其实就不需要先将 Linux 安装在其他硬碟上了。
使用 SLES 10 + 新版 dmraid 测试
Novell / SuSE 与今年(2006)发表 SLES 10 与 SLED 10,笔者手边刚好有拿到安装光碟,所以就使用 SLES 10 先装在备用的 IDE 硬碟上,待安装完成重新启动后,再补装新版的 dmraid 套件来测试。
在安装期间 SLES 10 已经有跳出错误讯息告诉我们她无法使用 BIOS RAID 而只能认得 /dev/sda 与 /dev/sdb 这两颗硬碟,我们应该先安装在 /dev/hdg(备用 IDE 硬碟)并且先不要去存取 /dev/sda 与 /dev/sdb,待安装完成后,再来换新版 dmraid 存取 BIOS RAID 磁碟。

Note:说实在的 dmraid 软件工具主要是由 RedHat 主导,Novell SuSE 其实比较建议使用 Software RAID 来取代。
SLES 10 使用 /dev/hdg 当主要硬碟画面

其他的安装流程与 Fedora 类似,也是相当的人性化,几乎没遇到甚么困难就安装完成了。
在安装完成重新开机后,使用指令“dmraid -V”来观看 dmraid 版本(1.0.0.rc8)以及指令“dmraid -a y”来尝试驱动 BIOS RAID 磁碟(失败,并有错误讯息),在 /dev/mapper/ 底下也只看见预设的 control 连结档
r7-136:~ # dmraid -Vdmraid version: 1.0.0.rc8 (2005.05.19) dmraid library version: 1.0.0.rc8 (2005.05.19) device-mapper version: 4.5.0 r7-136:~ # dmraid -a y ERROR: isw: volume Volume0 is broken ERROR: isw: volume Volume0 is broken r7-136:~ # ls -l /dev/mapper/ 总计 0 lrwxrwxrwx 1 root root 16 2006-10-14 00:10 control -> ../device-mapper r7-136:~ #
手动安装 dmraid 新版
第一步:下载 dmraid 原始程式码
来到 dmraid 位于 RedHat 网站,网址 http://people.redhat.com/~heinzm/sw/dmraid/src 目录,下载到的档案名称为 dmraid-1.0.0.rc11.tar.bz2

第二步:解开包裹
使用指令“tar jxvf dmraid-1.0.0.rc11.tar.bz2”来解开包裹,会产生 dmraid 目录及其下 1.0.0.rc11 目录
r7-136:~ # tar jxvf dmraid-1.0.0.rc11.tar.bz2...忽略 dmraid/1.0.0.rc11/CREDITS dmraid/1.0.0.rc11/LICENSE_LGPL dmraid/1.0.0.rc11/aclocal.m4 r7-136:~ # ls dmraid 1.0.0.rc11 r7-136:~ # ls dmraid/1.0.0.rc11/ aclocal.m4 config.status dmraid.spec lib Makefile man autoconf configure doc LICENSE Makefile.in README CHANGELOG configure.in include LICENSE_GPL make.tmpl TODO config.log CREDITS KNOWN_BUGS LICENSE_LGPL make.tmpl.in tools r7-136:~ #
温馨提示:tar 指令配合参数 jxvf 可解开 tar.bz2 档案;配合参数 zxvf 可解开 tar.gz 档案
第三步:切换到相关目录下并编译程式
使用指令“cd dmraid/1.0.0.rc11/”切换到相关目录下,使用指令“./configure”、“make”与“make install”来编译与安装程式
r7-136:~ # cd dmraid/1.0.0.rc11/r7-136:~/dmraid/1.0.0.rc11 # ./configure ...忽略 config.status: creating tools/version.h config.status: creating Makefile config.status: creating make.tmpl r7-136:~/dmraid/1.0.0.rc11 # make ...忽略 gcc -o dmraid dmraid.o commands.o toollib.o -rdynamic -L../lib \ -L/lib -ldmraid -ldevmapper make[1]: Leaving directory `/root/dmraid/1.0.0.rc11/tools' r7-136:~/dmraid/1.0.0.rc11 # make install ...忽略 make[1]: Entering directory `/root/dmraid/1.0.0.rc11/tools' Installing dmraid in /sbin make[1]: Leaving directory `/root/dmraid/1.0.0.rc11/tools' r7-136:~/dmraid/1.0.0.rc11 #
温馨提示:若发生找不到 gcc 的情形,在 SuSE 只要使用指令“ yast2 -i gcc”接着放入光碟片即可。

使用 dmraid 新版
使用指令“dmraid -V”会发现 dmraid 已经换成新版(1.0.0.rc11)
再次使用指令“dmraid -a y”来启用 BIOS RAID 磁碟,这次就没有错误讯息,并观察 /dev/mapper/ 目录下,有着 BIOS RAID 磁碟的装置档案 isw_dcaihbahhd_Volume0
r7-136:~ # dmraid -Vdmraid version: 1.0.0.rc11 (2006.05.15) dmraid library version: 1.0.0.rc11 (2006.05.15) device-mapper version: 4.5.0 r7-136:~ # dmraid -a y r7-136:~ # ls /dev/mapper/ control isw_dcaihbahhd_Volume01 isw_dcaihbahhd_Volume0 isw_dcaihbahhd_Volume02 r7-136:~ #
使用指令“fdisk -l /dev/mapper/isw_dcaihbahhd_Volume0”(参数是小写的 L),看得出来是我们先前安装在 BIOS RAID 磁碟的 Fedora Core 5 预设磁碟配置方式,一个是 FC5 的 /boot 区、一个是 LVM 区(包括 FC5 的根目录“/”与 Swap)
r7-136:~ # fdisk -l /dev/mapper/isw_dcaihbahhd_Volume0Disk /dev/mapper/isw_dcaihbahhd_Volume0: 500.1 GB, 500113342464 bytes255 heads, 63 sectors/track, 60801 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/mapper/isw_dcaihbahhd_Volume0p1 * 1 13 104391 83 Linux /dev/mapper/isw_dcaihbahhd_Volume0p2 14 60801 488279610 8e Linux LVM
使用 hdparm 测磁碟 I/O 速度,当然是 100 MB/sec 以上的啦!
r7-136:~ # hdparm -t /dev/mapper/isw_dcaihbahhd_Volume0/dev/mapper/isw_dcaihbahhd_Volume0: Timing buffered disk reads: 350 MB in 3.02 seconds = 116.05 MB/sec
挂载及使用 Linux 分割区其实还蛮简单的,底下以 Fedora Core 5 的 /boot 区(装置为 /dev/mapper/isw_dcaihbahhd_Volume01)来做示范。另外较复杂的是包含在 LVM 里面的磁区,所以底下也会介绍“如何挂载及使用 LVM 分割区”
使用指令“mount /dev/mapper/isw_dcaihbahhd_Volume01 /mnt”就可以将 FC5 /boot 资料,挂载在 /mnt 下
看完里面的内容后,若没有要再继续使用,请记得卸载,使用指令“umount /mnt”即可
r7-136:~ # mount /dev/mapper/isw_dcaihbahhd_Volume01 /mntr7-136:~ # ls /mnt/ config-2.6.15-1.2054_FC5smp lost+found grub System.map-2.6.15-1.2054_FC5smp initrd-2.6.15-1.2054_FC5smp.img vmlinuz-2.6.15-1.2054_FC5smp r7-136:~ # umount /mnt/
挂载及使用 LVM 分割区
第一步:使用指令“pvscan”来扫描是否有 Physical Volume(PV),结果找到 /dev/dm-2 隶属于 VolGroup00 群组(VG)
Note:在这情形下 /dev/dm-2、/dev/mapper/isw_dcaihbahhd_Volume02、/dev/mapper/isw_dcaihbahhd_Volume0p2 其实都是同一个装置
r7-136:~ # pvscan /dev/sda2: read failed after 0 of 2048 at 499998195712: 输入/输出错误 PV /dev/dm-2 VG VolGroup00 lvm2 [465.66 GB / 32.00 MB free] Total: 1 [465.66 GB] / in use: 1 [465.66 GB] / in no VG: 0 [0 ]
第二步:使用指令“vgchange -a y”来启用 VolGroup00,在 VolGroup00 下有两个 Logical Volume 被启用
r7-136:~ # vgchange -a y 2 logical volume(s) in volume group "VolGroup00" now active
温馨提示:指令“dmraid -a y”、“vgchange -a y”使用方法有些类似,一个是用来启用 BIOS RAID;一个是用来启用 LVM Volume Group,您也可以使用指令“dmraid -a n”、“vgchange -a n”来停用相关设备。
第三步:使用指令“lvscan”来扫描 Logical Volume(LV),发现两个 LV 磁区,其中 LogVol00 是 Fedora Core 5 根目录、LogVol01 是 Swap
r7-136:~ # lvscan ACTIVE '/dev/VolGroup00/LogVol00' [463.69 GB] inherit ACTIVE '/dev/VolGroup00/LogVol01' [1.94 GB] inherit
第四步:接下来就是挂载(mount)与卸载(umount)的指令,与一般方式雷同,故不再赘述
r7-136:~ # mount /dev/VolGroup00/LogVol00 /mnt/r7-136:~ # ls /mnt/ bin dev home lost+found misc opt proc sbin srv tmp var boot etc lib media mnt poweroff root selinux sys usr r7-136:~ # umount /mnt
温馨提示:在先前的指令范例中,许多 /dev 目录下的这些设备名称相当的长,甚至小写的 L“l”与数字的 1、数字零“0”与字母 o 的大写“0”很容易看错或打错(例如 VoLGroup零零、LogVoL零零)因此在使用 Linux 文字模式时,建议您在输入指令时,搭配‘TAB 键’使用,会帮您“补目录名称”,不只节省输入按键的数量,重要的是还可以避免打错字。
结语 - Linux 对硬体的支援
核心(Kernel)主要功能用最平民化的方式来说就是‘支援软体’与‘驱动硬体’,撇开软体的部份不说,以现今情况来看,每当硬体厂商出产新产品 时,首要之务还是得先使得微软作业系统能够驱动(使用),再来几乎就是 Linux 与 Mac OS X 的天下了,这种情形又以伺服器类的硬体更加明显偏向 Linux(桌上型硬体还没那么明显),所幸 BIOS RAID 在 Linux 还是可以使用的。
在笔者使用 Linux 的这几年来,早期从显示卡、音效卡需要自行安装驱动程式(还不见得能够正常)到现在大部分的硬体几乎都能够被 Linux 内建核心模组(驱动程式)启用来看,Linux 对于硬体的支援度方面,真的是大大的进步,而且硬体厂商也渐渐的乐意提供 Linux 驱动程式(甚至是原始码)来实现对 Linux 的支援。
这一次测试 BIOS RAID 其实还不算测试的很详细,能够再接着测试的像是设定成 RAID1 或甚至模拟 RAID1 其中一颗硬碟故障还原等等。像 BIOS RAID / dmraid 这类新一代的硬体/软体,其实还是很需要藉由群众实际多加运用来考验,这方面的技术才会更加实用与稳定,而不只是纯粹在价格上优势而已,像 SLES10 这种专为伺服器量身打造 Linux,虽然当下还没(或是还不愿意)支援最新的 BIOS RAID,其实只要 BIOS RAID 未来够成熟稳定,相信 SLES 以后的版本也会很愿意的预设内建 BIOS RAID 支援。

Leave a Reply