RAID学习笔记

几种常用RAID的简介

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

1.RAID 0

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

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

2.RAID 1

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

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

3.RAID 5

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

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

● 操作系统为RedHat Linux AS 4;
● 内核版本为2.6.9-5.EL;
● 支持RAID0、RAID1、RAID4、RAID5、RAID6;
● 五块36GB SCSI接口的磁盘,其中RedHat AS 4安装在第一块磁盘,其它四块组成RAID 5用来存放Oracle数据库。
在RedHat AS 4下实现软件RAID是通过mdadm工具实现的,其版本为1.6.0,它是一个单一的程序,创建、管理RAID都非常方便,而且也很稳定。而在早期Linux下使用的raidtools,由于维护起来很困难,而且其性能有限,在RedHat AS 4下已经不支持了。

实现过程

-:配置RAID1

第一步:以root用户登录系统,对磁盘进行分区。
#fdisk /dev/sdb
将设备/dev/sdb上的全部磁盘空间划分给一个主分区,建立/dev/sdb1分区,并修改分区的类型标识为fd(linux raid auto),然后对剩余的磁盘做同样的操作。创/dev/sdb1,/dev/sdc1,/dev/sdd1三个分区。

第二步:创建RAID阵列
#mdadm -Cv /dev/md0 -l1 -n2 -x1 /dev/sd{b,c,d}1
小提示:-C参数为创建阵列模式。/dev/md0为阵列的设备名称。-l1为阵列模式,可以选择0,1,4,5等多种不同的阵列模式,分别对应 RAID0,RAID1,RAID4,RAID5。-n2为阵列中活动磁盘的数目,该数目加上备用磁盘的数目应该等于阵列中总的磁盘数目。-x1为阵列中备用磁盘的数目,因为我们是RAID1所以设置当前阵列中含有一块备用磁盘。/dev/sd{b,c,d}1为参与创建阵列的磁盘名称,阵列由三块磁盘组成,其中两块为镜象的活动磁盘,一块备用磁盘提供故障后的替换。

第三步:查看RAID阵列情况
创建RAID过程需要很长时间,因为磁盘要进行同步化操作,查看/proc/mdstat文件,该文件显示RAID的当前状态和同步完成所需要的时间。
#cat /proc/mdstat
系统会显示——
personalities:[raid1]
read_ahead 1024 sectors
event:1
md0:active raid1 sdb1[0] sdc1[1] sdd1[2]
18432000 blocks [2/2] [UU]
unused devices:<none>
出现上面的提示后就表示创建的RAID1已经可以使用了。

第四步:编辑阵列的配置文件
mdadm的配置文件主要提供人们日常管理,编辑这个文件可以让RAID更好的为我们工作,当然这个步骤不是必须的。不经过编辑配置文件也可以让RAID工作。
首先扫描系统中的全部阵列
#mdadm --detail -scan
扫描结果将显示阵列的名称,模式和磁盘名称,并且列出阵列的UUID号,UUID也同时存在于阵列的每个磁盘中,缺少该号码的磁盘是不能够参与阵列的组成的。
接下来编辑阵列的配置文件/etc/mdadm.conf文件,将扫描的显示结果按照文件规定的格式修改后添加到文件的末尾。
#vi /etc/mdadm.conf
添加以下内容到mdadm.conf文件中
device /dev/sdb1 /dev/sdc1 /dev/sdd1
array /dev/md0 level=raid1 num-devices=2 uuid=2ed2ba37:d952280c:a5a9c282:a51b48da spare-group=group1
在配置文件中定义了阵列的名称和模式,还有阵列中活动磁盘的数目与名称,另外也定义了一个备用的磁盘组group1。

第五步:启动停止RAID1阵列
启动和停止RAID1阵列的命令非常简单。启动直接执行“mdadm -as /dev/md0”即可。执行mdadm -s /dev/md0将停止RAID1阵列。另外在rc.sysinit启动脚本文件中加入命令mdadm -as /dev/md0后将设置为阵列随系统启动而启动。

总结:配置RAID1的步骤相对RAID5来说不是很烦琐,不过在使用mdadm时应该注意就是不要在一块硬盘上划分多个分区,再将多个分区组成阵列,这种方式不但不能提高硬盘的访问速度,反而会降低整体系统的性能。正确的方法是将一块硬盘分成一个或多个分区,然后将多块不同硬盘的分区组成阵列。另外系统目录如/usr最好不要放在阵列中,因为一旦阵列出现问题系统将无法正常运行。

二:配置RAID 5

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
用命令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
parity-algorithm left-symmetric
parity-algorithm表示raid5的奇偶效验的运算法则,可用选择有:
left-symmetric left-asymmetric right-symmetric right-asymmetric
最佳性能的是:left-symmetric
命令中各参数分别表示如下作用:“-C”指创建一个新的阵列;“/dev/md0”表示阵列设备名称;“-l5”表示设置阵列模式,可以选择0、1、4、 5、6,它们分别对应于RAID0、RAID1、RAID4、RAID5、RAID6,这里设为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_]
[>....................] 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

故障模拟

上面的实例,让我们对Redhat Linux AS 4的软件RAID功能有了一定的认识,并且通过详细的步骤说明了如何创建RAID5。有了RAID做保障,电脑里的数据看起来似乎已经很安全了,然而现有的情况还是不能让我们高枕无忧,想一想,万一磁盘出现故障怎么办?下面我们模拟一个更换RAID5故障磁盘的完整过程,希望以此丰富大家处理RAID5故障的经验,提高管理和维护水平。
我们仍然沿用上面的RAID5配置,首先往阵列中拷贝一些数据,接下来开始模拟/dev/sdb1设备故障。不过,对于无备份设备的RAID5的模拟过程也要经过如下三步,只是阵列重构和数据恢复是发生在新设备添加到阵列中之后,而不是设备损坏时。

1.将/dev/sdb1标记为已损坏的设备
# mdadm /dev/md0 -f /dev/sdb1
查看当前阵列状态
# 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]
[=>...................] 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作为备份设备再次出现在阵列中
常用阵列维护命令

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



RAID 0

特征: 并行读写数据,性能高,但没有数据冗余,阵列中任何一个硬盘坏掉,意味着所有数据丢失
容量:所有硬盘容量之和
条件:至少两块硬盘,做为RAID的分区大小必须是几乎相同的.

首先将各个分区的分区类型标识为FD:
[root@LFS ~]# fdisk /dev/hda
Command (m for help): t
Partition number (1-4): 1
Hex code (type L to list codes): fd
Changed system type of partition 1 to fd (Linux raid autodetect)
Command (m for help): p
/dev/hda1 1 646 325552+ fd Linux raid autodetect

使用mdadm创建raid-0:
[root@LFS ~]# mdadm --create --verbose /dev/md0 --level=raid0 \
--raid-devices=2 --chunk=4 /dev/hda1 /dev/hdb1

......
raid0: done.
raid0 : md_size is 650880 blocks
raid0 : conf ->hash_spacing is 650880 blocks
raid0 : nb_zone is 1.
raid0 : Allocating 4 byte for hash
mdadm: array /dev/md0 started

查看状态:
[root@LFS ~]# mdadm -D /dev/md0

创建mdadm.conf(这步可省略,但为了便于以后管理,建议使用)
[root@LFS ~]# echo DEVICE /dev/hd*[0-9] /dev/sd*[0-9] > /etc/mdadm.conf
[root@LFS ~]# mdadm --detail --scan >> /etc/mdadm.conf


创建文件系统,挂载:
[root@LFS ~]# mkreiserfs /dev/md0
[root@LFS ~]# mount -t reiserfs /dev/md0 /mnt/raid0

加入到/etc/fstab,系统启动自动挂载:
/dev/md0 /mnt/raid0 reiserfs defaults 1 2



RAID 1

特征:数据冗余,可靠性强。任何一块硬盘坏掉,不会丢失数据。写入慢,读取快。
容量:所有硬盘容量/2
条件:至少两块硬盘,做为RAID的分区大小必须是几乎相同的.

使用mdadm创建raid-1:
[root@LFS ~]# mdadm --create --verbose /dev/md1 --level=raid1 \
--raid-devices=2 --spare-devices=1 --chunk=4 /dev/hda2 /dev/hdb2 /dev/hdc2


[root@LFS ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 hdc2[2] hdb2[1] hda2[0]
325440 blocks [2/2] [UU]

unused devices:
[root@LFS ~]# mkreiserfs /dev/md1
[root@LFS ~]# mount -t reiserfs /dev/md1 /mnt/raid1

device /dev/hdc2
spare-disk 0

表示用/dev/hdc2做为spare disk,当hda2或hdb2坏掉时,raid会自动启用/dev/hdc2做为镜像.


RAID 5

使用mdadm创建raid-5:
[root@LFS ~]# mdadm --create --verbose /dev/md5 --level=raid5 \
--raid-devices=3 --chunk=32 /dev/hda3 /dev/hdb3 /dev/hdc3

[root@LFS ~]# mkreiserfs /dev/md5
[root@LFS ~]# mount -t reiserfs /dev/md5 /mnt/raid5

parity-algorithm left-symmetric
parity-algorithm表示raid5的奇偶效验的运算法则,可用选择有:
left-symmetric left-asymmetric
right-symmetric right-asymmetric
最佳性能的是:left-symmetric

LVM+RAID :
LVM的物理卷(PV)可以是标准硬盘分区也可以是RAID设备,因此可以在RAID上使用LVM管理分区。
创建PV
[root@LFS ~]#pvcreate /dev/md5
Physical volume "/dev/md5" successfully created
创建VG
[root@LFS ~]#vgcreate raid_lvm /dev/md5
Volume group "raid_lvm" successfully created
创建LV:
[root@LFS ~]#lvcreate -L 300M -n "lv_data" raid_lvm
Logical volume "lv_data" created
创建reiserfs:
[root@LFS ~]#mkreiserfs /dev/raid_lvm/lv_data
[root@LFS ~]#mkdir /mnt/data
[root@LFS ~]#mount -t reiserfs /dev/raid_lvm/lv_data /mnt/data



mdadm 使用参考

mdadm是linux下用于管理软件 raid 的工具

基本语法 : mdadm [mode] [options]

[mode] 有7种:

Assemble:将以前定义的某个阵列加入当前在用阵列。

Build:Build a legacy array ,每个device 没有 superblocks

Create:创建一个新的阵列,每个device 具有 superblocks

Manage: 管理阵列,比如 add 或 remove

Misc:允许单独对阵列中的某个 device 做操作,比如抹去superblocks 或 终止在用的阵列。

Follow or Monitor:监控 raid 1,4,5,6 和 multipath 的状态

Grow:改变raid 容量或 阵列中的 device 数目

可用的 [options]:

-A, --assemble:加入一个以前定义的阵列

-B, --build:Build a legacy array without superblocks.

-C, --create:创建一个新的阵列

-Q, --query:查看一个device,判断它为一个 md device 或是 一个 md 阵列的一部分

-D, --detail:打印一个或多个 md device 的详细信息

-E, --examine:打印 device 上的 md superblock 的内容

-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=:Specify chunk size of kibibytes. 缺省为 64.

--rounding=: Specify rounding factor for linear array (==chunk size)

-l, --level=:设定 raid level.

--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作为missing drive。此选项正相反。

-a, --auto{=no,yes,md,mdp,part,p}{NN}:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值