[Linux 存储备份恢复] dmraid介绍Linux上应用ATA/SATA RAID技术

Jan 31st, 2008

转载本站文章请注明,转载自:扶凯[http://www.php-oa.com]

本文链接: http://www.php-oa.com/2008/01/31/dmraidjieshaolinuxshangyingyongatasataraidjishu.html

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

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 将最新的东西都包含进去.

Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪 ViVi 365Key 网摘 天极网摘 和讯网摘 博拉网 POCO 网摘 饭否 QQ 书签 Digbuzz 我挖网 Mister Wong
  1. Gino
    Aug 31st, 2010 at 18:41
    Reply | Quote | #2

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

  2. admin
    Sep 1st, 2010 at 09:54
    Reply | Quote | #3

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