PartI.RAID基础(引用)
RAID是冗余磁盘阵列(RedundantArrayofInexpensiveDisk)的简称。它是把多个磁盘组成一个阵列,当作单一磁盘使用。它将数据以分段(striping)的方式分散存储在不同的磁盘中,通过多个磁盘的同时读写,来减少数据的存取时间,并且可以利用不同的技术实现数据的冗余,即使有一个磁盘损坏,也可以从其他的磁盘中恢复所有的数据。简单地说,其好处就是:安全性高、速度快、数据容量大。
磁盘阵列根据其使用的技术不同而划分了等级,称为RAIDlevel,目前公认的标准是RAID0~RAID5。其中的level并不代表技术的高低,RAID5并不高于RAID4,RAID0并不低于RAID2,至于选择哪一种RAID需视用户的需求而定。下面分别对常用的RAID0、RAID1、RAID5进行简单的介绍。

1.RAID0
特点:它是将多个磁盘并列起来,成为一个大硬盘。在存取数据时,将数据按磁盘的个数来进行分段,然后同时将这些数据写进这些盘中。在所有的级别中,RAID0的速度是最快的。但没有数据冗余,阵列中任何一个磁盘坏掉,意味着所有数据丢失。

磁盘利用数:n(假设有n个磁盘)。
配置条件:最低两块磁盘,且分区大小尽量相同。
应用领域:对高磁盘容量及高速磁盘存取有特殊需求,而又不计较其高故障率的工作。当然,如果你正在使用集群,RAID0无疑是提高磁盘I/O性能的最好方法,因为在这种情况下,你就不用担心冗余的问题了。

2.RAID1
特点:使用磁盘镜像(diskmirroring)的技术,在一个磁盘上存放数据的同时也在另一个磁盘上写一样的数据。因为有了备份磁盘,所以RAID1的数据安全性在所有的RAID级别上来说是最好的。尽管其写入数据的速度比较慢,但因其数据是以分段的方式作储存,因而在读取时,它几乎和RAID0有同样的性能。

磁盘利用数:n/2。
配置条件:最低两块磁盘,且分区大小尽量相同。
应用领域:数据库、金融系统等一些对数据有着高可靠性要求的领域。再者就是系统中写数据量比较少,而读数据量又比较多的情况下可以采用这一模式。

3.RAID5
特点:以数据的校验位来保证数据的安全,但它不是以单独硬盘来存放数据的校验位,而是将数据段的校验位交互存放于各个磁盘上。这样,任何一个磁盘损坏,都可以根据其他磁盘上的校验位来重建损坏的数据。并行读写数据,性能也很高。


磁盘利用数:n-1。
配置条件:最低三块硬盘,且分区大小尽量相同。
应用领域:适合于事务处理环境,例如民航售票处、销售系统等。




PartII.mdadm创建RAID5

RAID级别:5
设备列表:
Host:/dev/sda
RAIDDevices:/dev/sdb/dev/sdc/dev/sdd
SpareDevices:/dev/sde
设备准备:
直接使用硬盘硬件设备,不需要分区。
如果要具体使用哪个硬盘的分区做RAID,才需要fdisk特定的分区,并给它指定分区类型:fd。


1>创建raid:
mdadm的每个命令都有其简写形式,当然也可以使用shell的正规表达式:
#mdadm--create--verbose/dev/md0--level=raid5--raid-devices=3/dev/sdb/dev/sdc/dev/sdd--spare-devices=1/dev/sde
#mdadm-Cv/dev/md0-l5-n3/dev/sdb/dev/sdc/dev/sdd-x1/dev/sde
#mdadm-Cv/dev/md00l5-n3/dev/sd[bcd]-x1/dev/sde


2>格式化raid设备:
#mkfs-text3/dev/md0


3>挂载raid设备:
#mkdir/mnt/raid
#mount-text3/dev/md0/mnt/raid


4>查看raid设备状态:
#mdadm-D/dev/md0
/dev/md0:
Version:00.90.03
CreationTime:TueNov1310:35:352007
RaidLevel:raid5
ArraySize:2097024(2048.22MiB2147.35MB)
DeviceSize:1048512(1024.11MiB1073.68MB)
RaidDevices:3
TotalDevices:4
PreferredMinor:0
Persistence:Superblockispersistent

UpdateTime:TueNov1310:42:342007
State:clean
ActiveDevices:3
WorkingDevices:4
FailedDevices:0
SpareDevices:1

Layout:left-symmetric
ChunkSize:64K

UUID:b5e3276f:ab97e843:e601b1a4:46720384
Events:0.2

NumberMajorMinorRaidDeviceState
08160activesync/dev/sdb
18321activesync/dev/sdc
28482activesync/dev/sdd

3864-spare/dev/sde

#cat/proc/mdstat
Personalities:[raid6][raid5][raid4]
md0:activeraid5sdd[2]sde[3](S)sdc[1]sdb[0]
2097024blockslevel5,64kchunk,algorithm2[3/3][UUU]

unuseddevices:<none>
说明:
sdd[2]:此设备在RAID中的次序。
[3/3]:RAID使用3个设备,当前有3个设备正常运行。当某一个设备出错时将会显示[3/2]。
[UUU]:RAID中所有磁盘运转正常。如果出错则显示[_UU],则说明RAID中第一磁盘fail。

#mdadm-E/dev/sdb
/dev/sdb:
Magic:a92b4efc
Version:00.90.00
UUID:b5e3276f:ab97e843:e601b1a4:46720384
CreationTime:TueNov1310:35:352007
RaidLevel:raid5
DeviceSize:1048512(1024.11MiB1073.68MB)
ArraySize:2097024(2048.22MiB2147.35MB)
RaidDevices:3
TotalDevices:4
PreferredMinor:0

UpdateTime:TueNov1310:54:582007
State:clean
ActiveDevices:3
WorkingDevices:4
FailedDevices:0
SpareDevices:1
Checksum:c59d3483-correct
Events:0.2

Layout:left-symmetric
ChunkSize:64K

NumberMajorMinorRaidDeviceState
this08160activesync/dev/sdb

008160activesync/dev/sdb
118321activesync/dev/sdc
228482activesync/dev/sdd
338643spare/dev/sde



5>mdadm配置文件:
mdadm的缺省配置文件为/etc/mdadm.conf。对于阵列而言不是必须的,主要是为了方便阵列的日常管理。
使用配置文件后,我们每次启动RAID时,就不需要再次输入建立RAID时的一大堆的参数。
mdadm.conf文件中要包含两行:
第一行是以DEVICE开头的行,它指明在阵列中的设备列表。
第二行是以ARRAY开头的行,它详细地说明了阵列的名称、模式、阵列中活动设备的数目以及设备的UUID号。
一般会有如下格式:
#cat/etc/mdadm.conf
===========================================================
DEVICE/dev/sdb/dev/sdc/dev/sdd/dev/sde
ARRAY/dev/md0level=raid5num-devices=3spares=1UUID=b5e3276f:ab97e843:e601b1a4:46720384
============================================================

生成方法:
#echo'DEVICE/dev/sd[bcde]'>/etc/mdadm.conf
#mdadm-Ds>>/etc/mdadm.conf

#echo'DEVICE/dev/sdb/dev/sdc/dev/sdd/dev/sde'>/etc/mdadm.conf
#mdadm-Ds>>/etc/mdadm.conf



6>配置mdadm开机自启动:
使用配置文件后,RAID设备在重启后也可以正常的自动加载,因为系统在开机启动时会自动加载RAID。
#cat/etc/rc.d/rc.sysinit
=============================================================================
#RAIDsetup
update_boot_stageRCraid
[-x/sbin/nash]&&echo"raidautorun/dev/md0"|nash--quiet
if[-f/etc/mdadm.conf];then
/sbin/mdadm-A-s
fi
=============================================================================
设备配置文件只能使系统在开机时正常启用RAID设备,但自动挂载RAID设备还是要再修改/etc/fstab
#vi/etc/fstab
===============================================
/dev/md0/mnt/raidext3defaults00
===============================================



7>停止与开启RAID设备:
停止:
#umount/mnt/raid
#mdadm-S/dev/md0
mdadm:stopped/dev/md0
开启:
使用配置文件时:
#mdadm-As/dev/md0
mdadm:/dev/md0hasbeenstartedwith3drivesand1spare.
没有使用配置文件时:
#mdadm-A/dev/md0/dev/sd[bcde]
mdadm:/dev/md0hasbeenstartedwith3drivesand1spare.


8>故障演示
(1)将一个磁盘标记为faulty,模拟硬盘坏损
#mdadm/dev/md0-f/dev/sdb
(2)查看RAID5重建过程
#mdadm-D/dev/md0
/dev/md0:
Version:00.90.03
CreationTime:TueNov1311:55:592007
RaidLevel:raid5
ArraySize:2097024(2048.22MiB2147.35MB)
DeviceSize:1048512(1024.11MiB1073.68MB)
RaidDevices:3
TotalDevices:4
PreferredMinor:0
Persistence:Superblockispersistent

UpdateTime:TueNov1318:21:272007
State:clean,degraded,recovering
ActiveDevices:2
WorkingDevices:3
FailedDevices:1
SpareDevices:1

Layout:left-symmetric
ChunkSize:64K

RebuildStatus:48%complete

UUID:faee3020:14fc3e48:9717e6f5:d7cf7de7
Events:0.6

NumberMajorMinorRaidDeviceState
48640sparerebuilding/dev/sde
18321activesync/dev/sdc
28482activesync/dev/sdd

3816-faultyspare/dev/sdb
#cat/proc/mdstat
Personalities:[raid6][raid5][raid4]
md0:activeraid5sdb[3](F)sde[4]sdd[2]sdc[1]
2097024blockslevel5,64kchunk,algorithm2[3/2][_UU]
[=================>...]recovery=88.7%(931664/1048512)finish=0.0minspeed=24130K/sec

unuseddevices:<none>
(3)查看完成坏损设备后的RAID状态
#mdadm-D/dev/md0
/dev/md0:
Version:00.90.03
CreationTime:TueNov1311:55:592007
RaidLevel:raid5
ArraySize:2097024(2048.22MiB2147.35MB)
DeviceSize:1048512(1024.11MiB1073.68MB)
RaidDevices:3
TotalDevices:4
PreferredMinor:0
Persistence:Superblockispersistent

UpdateTime:TueNov1318:21:592007
State:clean
ActiveDevices:3
WorkingDevices:3
FailedDevices:1
SpareDevices:0

Layout:left-symmetric
ChunkSize:64K

UUID:faee3020:14fc3e48:9717e6f5:d7cf7de7
Events:0.8

NumberMajorMinorRaidDeviceState
08640activesync/dev/sde
18321activesync/dev/sdc
28482activesync/dev/sdd

3816-faultyspare/dev/sdb
#cat/proc/mdstat
Personalities:[raid6][raid5][raid4]
md0:activeraid5sdb[3](F)sde[0]sdd[2]sdc[1]
2097024blockslevel5,64kchunk,algorithm2[3/3][UUU]

unuseddevices:<none>
(4)移除坏损设备
#mdadm/dev/md0-r/dev/sdb
mdadm:hotremoved/dev/sdb
(5)添加新的设备
#mdadm/dev/md0-a/dev/sdb
mdadm:added/dev/sdb
(6)查看最终状态
#mdadm-D/dev/md0
/dev/md0:
Version:00.90.03
CreationTime:TueNov1311:55:592007
RaidLevel:raid5
ArraySize:2097024(2048.22MiB2147.35MB)
DeviceSize:1048512(1024.11MiB1073.68MB)
RaidDevices:3
TotalDevices:4
PreferredMinor:0
Persistence:Superblockispersistent

UpdateTime:TueNov1318:25:442007
State:clean
ActiveDevices:3
WorkingDevices:4
FailedDevices:0
SpareDevices:1

Layout:left-symmetric
ChunkSize:64K

UUID:faee3020:14fc3e48:9717e6f5:d7cf7de7
Events:0.10

NumberMajorMinorRaidDeviceState
08640activesync/dev/sde
18321activesync/dev/sdc
28482activesync/dev/sdd

3816-spare/dev/sdb
#cat/proc/mdstat
Personalities:[raid6][raid5][raid4]
md0:activeraid5sdb[3](S)sde[0]sdd[2]sdc[1]
2097024blockslevel5,64kchunk,algorithm2[3/3][UUU]

unuseddevices:<none>


9>mdadm中文man(引用)
基本语法:mdadm[mode][options]
[mode]有7种:
Assemble:将以前定义的某个阵列加入当前在用阵列。
Build:Buildalegacyarray,每个device没有superblocks
Create:创建一个新的阵列,每个device具有superblocks
Manage:管理阵列,比如add或remove
Misc:允许单独对阵列中的某个device做操作,比如抹去superblocks或终止在用的阵列。
FolloworMonitor:监控raid1,4,5,6和multipath的状态
Grow:改变raid容量或阵列中的device数目
可用的[options]:
-A,--assemble:加入一个以前定义的阵列
-B,--build:Buildalegacyarraywithoutsuperblocks.
-C,--create:创建一个新的阵列
-Q,--query:查看一个device,判断它为一个mddevice或是一个md阵列的一部分
-D,--detail:打印一个或多个mddevice的详细信息
-E,--examine:打印device上的mdsuperblock的内容
-F,--follow,--monitor:选择Monitor模式
-G,--grow:改变在用阵列的大小或形态
-h,--help:帮助信息,用在以上选项后,则显示该选项信息
--help-options
-V,--version
-v,--verbose:显示细节
-b,--brief:较少的细节。用于--detail和--examine选项
-f,--force
-c,--config=:指定配置文件,缺省为/etc/mdadm/mdadm.conf
-s,--scan:扫描配置文件或/proc/mdstat以搜寻丢失的信息。配置文件/etc/mdadm/mdadm.conf
create或build使用的选项:
-c,--chunk=:Specifychunksizeofkibibytes.缺省为64.
--rounding=:Specifyroundingfactorforlineararray(==chunksize)
-l,--level=:设定raidlevel.
--create可用:linear,raid0,0,stripe,raid1,1,mirror,raid4,4,raid5,5,raid6,6,multipath,mp.
--build可用:linear,raid0,0,stripe.
-p,--parity=:设定raid5的奇偶校验规则:eft-asymmetric,left-symmetric,right-asymmetric,right-symmetric,la,ra,ls,rs.缺省为left-symmetric
--layout=:类似于--parity
-n,--raid-devices=:指定阵列中可用device数目,这个数目只能由--grow修改
-x,--spare-devices=:指定初始阵列的富余device数目
-z,--size=:组建RAID1/4/5/6后从每个device获取的空间总数
--assume-clean:目前仅用于--build选项
-R,--run:阵列中的某一部分出现在其他阵列或文件系统中时,mdadm会确认该阵列。此选项将不作确认。
-f,--force:通常mdadm不允许只用一个device创建阵列,而且创建raid5时会使用一个device作为missingdrive。此选项正相反。
-a,--auto{=no,yes,md,mdp,part,p}{NN}: