取势 明道 优术

作者为 发表

IT•技术

我本来想在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 -l
hpt37x : 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 功能.

raid-3 畫面 使用 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 进入设定之前的画面 raid-2 畫面 Intel ICH7R BIOS RAID 设定画面 raid-1 畫面

使用 Fedora Core 5 测试

测试最顺畅的当属 Fedora Core 5(dmraid 版本 1.0.0.rc9),在放入安装光碟开机后,配合 Fedora 安装程式 anaconda 导引之下,立即找到 /dev/mapper/isw_dcaihbahhd_Volume0 这个 BIOS RAID 磁碟,至于其他安装步骤则与一般安装无异. fc5 畫面 安装完成后,在效能方面的表现相当不错,开机很顺畅,使用指令"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 磁碟. sles10 圖檔

Note:说实在的 dmraid 软件工具主要是由 RedHat 主导,Novell SuSE 其实比较建议使用 Software RAID 来取代.

SLES 10 使用 /dev/hdg 当主要硬碟画面 sles10hdg 圖檔 其他的安装流程与 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 dmraid 圖檔 第二步:解开包裹 使用指令"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”接着放入光碟片即可.

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 支援.

Note:Server 版的 Linux 通常追求的是"稳定”所以不像 Fedora 将最新的东西都包含进去.

来了就留个评论吧! 3个评论



    Gino 2010年08月31日 的 18:41

    請問有試過 rebuild 嗎 ?我這邊有些問題

      admin 2010年09月1日 的 09:54

      常常。。。。因为近来考试,玩了很久的高级软件 raid ,相当强大