1概述

参考文档: http://www.xxlinux.com/linux/article/network/security/20071108/11703.html

2安装说明

系统环境:suse 10.2(该方法也适用其他文件系统)

所需安装包:mdadm-2.6-0.17.i586.rpm (系统默认已经安装)

 

3实例

步骤:

3.1 挂载虚拟硬盘sdb sdc并进行分区

一个硬盘划分一个分区,如下:

linux-sused1:/media/cdrom/suse/i586 # fdisk -l

 

Disk /dev/sda: 53.1 GB, 53184660480 bytes

255 heads, 63 sectors/track, 6466 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

 

   Device Boot      Start         End      Blocks   Id  System

/dev/sda1   *           1          20      152617   83  Linux

Partition 1 does not end on cylinder boundary.

/dev/sda2              21         282     2104515   82  Linux swap / Solaris

/dev/sda3             590        6464    47190937+  83  Linux

 

Disk /dev/sdb: 1073 MB, 1073741824 bytes

255 heads, 63 sectors/track, 130 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

 

   Device Boot      Start         End      Blocks   Id  System

/dev/sdb1               1         130     1044193+  83  Linux

 

Disk /dev/sdc: 1073 MB, 1073741824 bytes

255 heads, 63 sectors/track, 130 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

 

   Device Boot      Start         End      Blocks   Id  System

/dev/sdc1

 

3.2 创建raid阵列

执行mdadm --create --verbose /dev/md0 --level=0 --raid-device=2 /dev/sdb1 /dev/sdc1

 

执行完成后md0设备就自动启动了,可以查看状态

linux-sused1:/ # more /proc/mdstat

Personalities : [raid0]

md0 : active raid0 sdb1[0] sdc1[1]

      2088192 blocks 64k chunks

     

unused devices: <none>

 

为了以后维护方便我们还需要执行后面的步骤

 

说明:mdadm常用的参数有如下:

·         --create-C:创建一个新的软RAID,后面接raid设备的名称。例如,/dev/md0/dev/md1等。

·         --assemble-A:加载一个已存在的阵列,后面跟阵列以及设备的名称。

·         --detail-D:输出指定RAID设备的详细信息。

·         --stop-S:停止指定的RAID设备。

·         --level-l:设置RAID的级别,例如,设置--level=5”则表示创建阵列的级别是RAID 5

·         --raid-devices-n:指定阵列中活动磁盘的数目。

·         --scan-s:扫描配置文件或/proc/mdstat文件来搜索软RAID的配置信息,该参数不能单独使用,只能配置其它参数才能使用。

 

3.3 raid阵列信息添加到/etc/mdadm.conf

先扫描raid阵列信息:linux-sused1:/media/cdrom/suse/i586 # mdadm --detail -scan

ARRAY /dev/md0 level=raid0 num-devices=2 UUID=a8c122c3:26ccb2e7:2a4f6f95:b84cfc9b

将上面执行结果加入mdadm.conf,并添加device /dev/sdb1 /dev/sdc1这一行

 

 

vi /etc/mdadm.conf

device /dev/sdb1 /dev/sdc1

ARRAY /dev/md0 level=raid0 num-devices=2 UUID=a8c122c3:26ccb2e7:2a4f6f95:b84cfc9b

 

3.4 创建文件系统并mount

mkfs –t ext3 /dev/md0

mount /dev/md0 /mnt/raid0

 

写个文件测试一下

linux-sused1:/mnt/raid0 # ls

lost+found  test

linux-sused1:/mnt/raid0 # more test

jijij

linux-sused1:/mnt/raid0 #

 

3.5 加入fstab开机挂载

 vi /etc/fstab加入以下行

/dev/md0             /mnt/raid0           ext3       defaults              0 0

 

3.6 启动和停止服务

停止设备:

停止服务前 需要umount设备

linux-sused1:/ # umount /mnt/raid0/

linux-sused1:/ # mdadm -S /dev/md0

mdadm: stopped /dev/md0

 

启动设备:

linux-sused1:/ # mdadm -As /dev/md0

mdadm: /dev/md0 has been started with 2 drives.

linux-sused1:/ # mount -a

linux-sused1:/ # cd /mnt/raid0/

linux-sused1:/mnt/raid0 # ls

lost+found  test

 

4扩展阅读

注:这是一篇快速入门,若想更详细的了解mdadm的知识,可访问

1Linux下软raid的实现:http://www.ibm.com/developerworks/cn/linux/l-cn-raid/

2、常见问题解决:http://www.ibm.com/developerworks/cn/linux/l-cn-raid2/

**********************

作为一个面向服务器的网络型操作系统,Linux对数据的安全和存取速度给予了高度重视,从2.4版内核开始Linux就实现了对软件RAID的支持(关于 RAID的背景知识请见附文),这让我们可以不必购买昂贵的硬件RAID设备,就能享受到增强的磁盘I/O性能和可靠性,进一步降低了系统的总体拥有成 本。下面就让我们看一个Redhat Linux AS 4下的软件RAID配置实例吧。

系统配置情况

假设某单位新上 了一套使用Oracle数据库的能量采集系统,该系统数据量极大并且读写非常频繁,实时性要求高,高峰时有近40名用户在线,对数据库服务器的磁盘子系统 提出了很高的要求。由于预算比较紧张,经过多方比较,最终选择了采用Linux系统做软件RAID5的方案。

其配置情况如下:

操作系统为RedHat Linux AS 4

内核版本为2.6.9-5.EL

支持RAID0RAID1RAID4RAID5RAID6

五块36GB SCSI接口的磁盘,其中RedHat AS 4安装在第一块磁盘,其它四块组成RAID 5用来存放Oracle数据库。

RedHat AS 4下实现软件RAID是通过mdadm工具实现的,其版本为1.6.0,它是一个单一的程序,创建、管理RAID都非常方便,而且也很稳定。而在早期 Linux下使用的raidtools,由于维护起来很困难,而且其性能有限,在RedHat AS 4下已经不支持了。

4.1实现过程

1.创建分区

SCSI磁盘分别对应/dev/sda/dev/sdb/dev/sdc/dev/sdd/dev/sde。其中第一块磁盘/dev/sda 两个区,用于安装RedHat AS 4和做交换分区,其他四块磁盘每块只分一个主分区,分别为/dev/sdb1/dev/sdc1/dev/sdd1/dev/sde1,并且将分区 类型指定为“fd”,这将使Linux内核能将它们识别为RAID分区,且在每次引导时自动被检测并启动。创建分区使用fdisk命令。

# fdisk /dev/sdb

进入fdisk命令行后,使用命令n创建分区,命令t改变分区类型,命令w保存分区表并退出,命令m为帮助。

2.创建RAID 5

里使用了/dev/sdb1/dev/sdc1/dev/sdd1/dev/sde1四个设备创建RAID 5,其中/dev/sde1作为备份设备,其他为活动设备。备份设备主要起备用作用,一旦某一设备损坏可以立即用备份设备替换,当然也可以不使用备份设 备。命令格式如下:

# mdadm -Cv /dev/md0 -l5 -n3 -x1 -c128 /dev/sd[b,c,d,e]1

令中各参数分别表示如下作用:“-C”指创建一个新的阵列;“/dev/md0”表示阵列设备名称;“-l5”表示设置阵列模式,可以选择014 56,它们分别对应于RAID0RAID1RAID4RAID5RAID6,这里设为RAID5模式;“-n3”指设置阵列中活动设备的数目, 该数目加上备用设备的数目应等于阵列中的总设备数; “-x1”设置阵列中备份设备的数目,当前阵列中含有1个备份设备;“-c128”指设置块的尺寸为128KB,缺省为64KB“/dev /sd[b,c,d,e]1”指当前阵列中包含的所有设备标识符,也可以分开来写,中间用空格分开,其中最后一个为备份设备。

3.查看阵列状态

当创建一个新阵列或者阵列重构时,设备需要进行同步操作,这一过程需要一定时间,可以通过查看/proc/mdstat文件,来显示阵列的当前状态以及同步进度、所需时间等。

# more /proc/mdstat

Personalities : [raid5]

md0 : active raid5 sdd1[3] sde1[4] sdc1[1] sdb1[0]

75469842 blocks level 5, 128k chunk, algorithm 2 [3/2] [UU_]

[&gt;....................] recovery = 4.3% (1622601/37734912) finish=1.0min speed=15146K/sec

unused devices:

当新建或重构完成后,再次查看/proc/mdstat文件:

# more /proc/mdstat

Personalities : [raid5]

md0 : active raid5 sdd1[2] sde1[3] sdc1[1] sdb1[0]

75469842 blocks level 5, 128k chunk, algorithm 2 [3/3] [UUU]

unused devices:

过以上内容,可以很清楚地看出当前阵列的状态,各部分所代表的意思如下:“[3/3]”中的第一位数表示阵列所包含的设备数,第二位数表示活动的设备数, 如果有一个设备损坏,则第二位数将减1“[UUU]”标记当前阵列可以正常使用的设备情况,现假设/dev/sdb1出现故障,则该标记将变成 [_UU],这时的阵列以降级模式运行,即该阵列仍然可用,但是不再具有任何冗余;“sdd1[2]”指阵列所包含的设备数为n,若方括号内的数值小于 n,则表示该设备为活动设备,若数值大于等于n,则该设备为备份设备,当一个设备出现故障的时候,相应设备的方括号后将被标以(F) 
 
 

4.生成配置文件

mdadm的缺省配置文件为/etc/mdadm.conf,它主要是为了方便阵列的日常管理而设置的,对于阵列而言不是必须的,但是为了减少日后管理中不必要的麻烦,还是应该坚

 

持把这一步做完。

mdadm.conf文件中要包含两种类型的行:一种是以DEVICE开头的行,它指明在阵列中的设备列表;另一种是以ARRAY开头的行,它详细地说明了阵列的名称、模式、阵列中活动设备的数目以及设备的UUID号。格式如下:

DEVICE /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1

ARRAY /dev/md0 level=raid5 num-devices=3 UUID=8f128343:715a42df: baece2a8: a5b878e0

以上的这些信息可以通过扫描系统的阵列来获取,命令为:

# mdadm -Ds

ARRAY /dev/md0 level=raid5 num-devices=3 UUID=8f128343:715a42df: baece2a8: a5b878e0

devices=/dev/sdb1,/dev/sdc1,/dev/sdd1,/dev/sde1

使用vi命令,按照规定的格式编辑修改/etc/mdadm.conf文件

# vi /etc/mdadm.conf

5.创建文件系统并挂接(mount)使用

RAID5已经启动并处于运行状态,现在要做的就是在其上创建一个文件系统,这里使用mkfs命令,文件系统类型为ext3。命令如下:

# mkfs -t ext3 /dev/md0

当新的文件系统生成之后,就可以将/dev/md0挂接到指定的目录了。命令如下:

# mount /dev/md0 /mnt/raid

为了让系统在启动时自动将/dev/md0挂接到/mnt/raid,还需要修改/etc/fstab文件,添加如下内容:

/dev/md0 /mnt/raid ext3 defaults 0 0 

然后可以使用 mdadm -Ds /dev/md0 命令查看阵列的情况了。

 

4.2故障模拟

面的实例,让我们对Redhat Linux AS 4的软件RAID功能有了一定的认识,并且通过详细的步骤说明了如何创建RAID5。有了RAID做保障,电脑里的数据看起来似乎已经很安全了,然而现有 的情况还是不能让我们高枕无忧,想一想,万一磁盘出现故障怎么办?下面我们模拟一个更换RAID5故障磁盘的完整过程,希望以此丰富大家处理RAID5 障的经验,提高管理和维护水平。

我们仍然沿用上面的RAID5配置,首先往阵列中拷贝一些数据,接下来开始模拟/dev/sdb1设备故障。不过,对于无备份设备的RAID5的模拟过程也要经过如下三步,只是阵列重构和数据恢复是发生在新设备添加到阵列中之后,而不是设备损坏时。

1.将/dev/sdb1标记为已损坏的设备

# mdadm /dev/md0 -f /dev/sdb1 

f参数把一个设备标记为损坏设备

查看当前阵列状态

# more /proc/mdstat

Personalities : [raid5]

md0 : active raid5 sdd1[2] sde1[3] sdc1[1] sdb1[4](F)

75469842 blocks level 5, 128k chunk, algorithm 2 [3/2] [_UU]

[=&gt;...................] recovery = 8.9% (3358407/37734912) finish=1.6min speed=9382K/sec

unused devices:

因为有备份设备,所以当阵列中出现设备损坏时,阵列能够在短时间内实现重构和数据的恢复。从当前的状态可以看出,阵列正在重构,且运行在降级模式,sdb1[4]的后面已经标上了(F),活动设备数也降为2个。

经过几分钟后,再次查看当前阵列状态。

# more /proc/mdstat

Personalities : [raid5]

md0 : active raid5 sdd1[2] sde1[0] sdc1[1] sdb1[3](F)

75469842 blocks level 5, 128k chunk, algorithm 2 [3/3] [UUU]

unused devices:

此时阵列重构已经完成,数据恢复完毕,原有的备份设备sde1成为了活动设备。

2.移除损坏的设备

# mdadm /dev/md0 -r /dev/sdb1

查看当前阵列的状态:

# more /proc/mdstat

Personalities : [raid5]

md0 : active raid5 sdd1[2] sde1[0] sdc1[1]

75469842 blocks level 5, 128k chunk, algorithm 2 [3/3] [UUU]

unused devices:

损坏的sdb1已经从阵列中移掉。

3.将新设备添加到阵列中

因为是模拟操作,可以通过下面的命令再次将/dev/sdb1添加到阵列中。如果是实际操作则要注意两点:一是在添加之前要对新磁盘进行正确的分区;二是添加时要用所添加设备的设备名替换/dev/sdb1

# mdadm /dev/md0 -a /dev/sdb1

查看当前阵列的状态:

# more /proc/mdstat

Personalities : [raid5]

md0 : active raid5 sdb1[3] sdd1[2] sde1[0] sdc1[1]

75469842 blocks level 5, 128k chunk, algorithm 2 [3/3] [UUU]

unused devices:

这时sdb1作为备份设备再次出现在阵列中

4.3常用阵列维护命令

1.启动阵列

# mdadm -As /dev/md0

该命令指启动/dev/md0阵列,其中“-A”指装载一个已存在的阵列;“-s”指查找mdadm.conf文件中的配置信息,并以此为依据启动阵列。

#mdadm -As

该命令指启动mdadm.conf文件中的所有阵列。

#mdadm -A /dev/md0 /dev/sd[b,c,d,e]1

如果没有创建mdadm.conf文件则可以采用上面这种启动方式。

2.停止阵列

# mdadm -S /dev/md0

3.显示指定阵列的详细信息

# mdadm -D /dev/md0 

4. 检测一个硬盘或分区是否有阵列信息

# mdadm -E /dev/sdf