首页 > 代码库 > Raid 后台管理

Raid 后台管理

一、RAID 简介

RAID 是英文Redundant Array of Independent Disks 的缩写,翻译成中文意思是“独立磁盘冗余阵列”,有时也简称磁盘阵列(Disk Array)。

简单的说,RAID是一种把多块独立的硬盘(物理硬盘)按不同的方式组合起来形成一个硬盘组(逻辑硬盘),从而提供比单个硬盘更高的存储性能和提供数据备份的技术。

组成磁盘阵列的不同方式称为RAID级别(RAID Levels),常见的RAID Level 包括raid0, raid1, raid5, raid10。各level 对比如下:

RAID等级最少硬盘最大容错可用容量读取性能写入性能安全性目的应用产业
020nnn一个硬盘异常,全部硬盘都会异常追求最大容量、速度3D产业实时渲染、视频剪接高速缓存
12n-11n1最高,一个正常即可追求最大安全性个人、企业备份
531n-1n-1n-1追求最大容量、最小预算个人、企业备份
104n/2n/2nn/2安全性高综合RAID 0/1优点,理论速度较快大型数据库、服务器

说明:n 代表硬盘总数

关于RAID的详细介绍,请参考:http://zh.wikipedia.org/wiki/RAID

二、系统环境

实验环境:Oracle VM VirtualBox

系统平台:CentOS release 6.3 (Final)

mdadm 版本:mdadm - v3.2.6 - 25th October 2012

三、设置磁盘

在Oracle VM VirtualBox 里模拟物理增加磁盘,在这篇文章中,我们将创建RAID0, RAID1, RAID5分区,RAID0 需要两块硬盘,RAID1 需要两块硬盘,RAID5需要四块硬盘,所以在这里添加了八块物理硬盘,每块5.00 GB.

技术分享

在Linux 系统里使用fdisk –l 命令查看。

技术分享

四、安装mdadm

mdadm 是multiple devices admin 的简称,它是Linux下的一款标准的软件RAID 管理工具。

4.1 查看是否安装了mdadm软件

# rpm -qa|grep mdadm

技术分享

4.2 如果未安装,则使用yum 方式安装。

技术分享

准备工作完毕,下面可以着手创建raid 了。

五、创建RAID0

5.1 新建分区

创建RAID0 需要两块硬盘,所以我们拿/dev/sdb 和/dev/sdc 来实验。

# fdisk /dev/sdb        //对sdb 进行分区

输入"m", 获取帮助,输入"p", 查看分区前磁盘状态,其他Command action 具体含义请自行Google, Baidu。

技术分享

输入"n" 新建分区,这里我们将整个磁盘都划分成一个分区,然后输入"p" 查看分区情况。

技术分享

5.2 修改分区类型

默认新建分区的类型是Linux,代号83,我们需要将其修改为raid 类型。输入"t" ,然后输入"L" 列出所有的文件格式,这里我们选择"fd Linux raid auto", 输入"fd",然后再输入"p" 查看分区情况,这是分区格式已经变成了Linux raid autodetect.

技术分享

5.3 保存分区

输入"w" 保存分区。

技术分享

使用同样方法对/dev/sdc 进行分区操作。

5.4 同步分区情况

使用partprobe 命令同步分区情况。

技术分享

5.5 查看现在的状态

# fdisk -l /dev/sdb /dev/sdc

技术分享

5.6 开始创建RAID0

# mdadm -C /dev/md0 -ayes -l0 -n2 /dev/sd[b,c]1

技术分享

说明:

-C  --create   创建阵列;

-a  --auto    同意创建设备,如不加此参数时必须先使用mknod 命令来创建一个RAID设备,不过推荐使用-a yes参数一次性创建;

-l   --level   阵列模式,支持的阵列模式有 linear, raid0, raid1, raid4, raid5, raid6, raid10, multipath, faulty, container;

-n     --raid-devices    阵列中活动磁盘的数目,该数目加上备用磁盘的数目应该等于阵列中总的磁盘数目;

/dev/md0     阵列的设备名称;

/dev/sd{b,c}1  参与创建阵列的磁盘名称;

5.7 查看raid0 状态

# cat /proc/mdstat

# mdadm -D /dev/md0

技术分享

说明:Raid Level : 阵列级别; 

   Array Size : 阵列容量大小;

   Raid Devices : RAID成员的个数;

   Total Devices : RAID中下属成员的总计个数,因为还有冗余硬盘或分区,也就是spare,为了RAID的正常运珩,随时可以推上去加入RAID的;

   State : clean, degraded, recovering 状态,包括三个状态,clean 表示正常,degraded 表示有问题,recovering 表示正在恢复或构建;

   Active Devices : 被激活的RAID成员个数;

   Working Devices : 正常的工作的RAID成员个数;

   Failed Devices : 出问题的RAID成员;

   Spare Devices : 备用RAID成员个数,当一个RAID的成员出问题时,用其它硬盘或分区来顶替时,RAID要进行构建,在没构建完成时,这个成员也会被认为是spare设备;

   UUID : RAID的UUID值,在系统中是唯一的;

5.8 创建RAID 配置文件/etc/mdadm.conf

RAID 的配置文件为/etc/mdadm.conf,默认是不存在的,需要手工创建。

该配置文件的主要作用是系统启动的时候能够自动加载软RAID,同时也方便日后管理。但不是必须的,推荐对该文件进行配置。

我们这里需要创建这个文件,测试中发现,如果没有这个文件,则reboot 后,已经创建好的md0 会自动变成md127。

/etc/mdadm.conf 文件内容包括:

由DEVICE 选项指定用于软RAID的所有设备,和ARRAY 选项所指定阵列的设备名、RAID级别、阵列中活动设备的数目以及设备的UUID号。

5.8.1 创建/etc/mdadm.conf

# echo DEVICE /dev/sd{b,c}1 >> /etc/mdadm.conf

# mdadm –Ds >> /etc/mdadm.conf

5.8.2 修改配置文件

当前生成的/etc/mdadm.conf 文件内容并不符合所规定的格式,所以也是不生效的,这时需要手工修改该文件内容为如下格式:

# cat /etc/mdadm.conf

DEVICE /dev/sdb1 /dev/sdc1

ARRAY /dev/md0 level=raid0 num-devices=2 UUID=5160ea40:cb2b44f1:c650d2ef:0db09fd0

5.9 格式化磁盘阵列

# mkfs.ext4 /dev/md0

技术分享

5.10 建立挂载点并挂载

# mkdir /raid0

# mount /dev/md0 /raid0/

技术分享

可以看到,/dev/md0 的可用大小为9.9G。

5.11 写入/etc/fstab

为了下次开机还能正常使用我们的RAID设备,需要将挂载的信息写入/etc/fstab 文件中。

技术分享

然后reboot 测试开机是否自动挂载,raid0 创建完毕。

六、创建RAID1

和创建raid0 类似,我们拿/dev/sdd 和/dev/sde 这两块硬盘来做实验。

6.1 新建分区并修改分区类型

技术分享

使用同样方法对/dev/sde 进行分区操作,分区结果如下:

技术分享

6.2 开始创建RAID1

# mdadm -C /dev/md1 -ayes -l1 -n2 /dev/sd[d,e]1

技术分享

6.3 查看raid1 状态

# cat /proc/mdstat

# mdadm -D /dev/md1

技术分享

说明:Used Dev Size : RAID单位成员容量大小,也就是构成RAID的成员硬盘或分区的容量的大小;

可以看到,raid1 正在创建,待创建完毕,状态如下:

技术分享

6.4 添加raid1 到RAID 配置文件/etc/mdadm.conf 并修改

# echo DEVICE /dev/sd{b,c}1 >> /etc/mdadm.conf

# mdadm –Ds >> /etc/mdadm.conf

技术分享

6.5 格式化磁盘阵列

# mkfs.ext4 /dev/md1

技术分享

6.6 建立挂载点并挂载

# mkdir /raid1

# mount /dev/md1 /raid1/

技术分享

可以看到,/dev/md1 的可用大小为4.9G。

6.7 写入/etc/fstab

技术分享

然后reboot 测试开机是否自动挂载,raid1 创建完毕。

七、创建RAID5

RAID5 至少需要三块硬盘,我们拿/dev/sdf, /dev/sdg, /dev/sdh, /dev/sdi 这四块硬盘来做实验,三块做为活动盘,另一块做为热备盘。

7.1 新建分区并修改分区类型

分区结果如下:

技术分享

7.2 开始创建RAID5

# mdadm -C /dev/md5 -ayes -l5 –n3 -x1 /dev/sd[f,g,h,i]1

技术分享

说明:"-x1" 或"--spare-devices=1" 表示当前阵列中热备盘只有一块,若有多块热备盘,则将"--spare-devices" 的值设置为相应的数目。

7.3 查看raid5 状态

# cat /proc/mdstat

# mdadm -D /dev/md5

技术分享

说明:Rebuild Status : RAID 的构建进度;

         4 8 113 2 spare rebuilding /dev/sdh1 注:未被激活,正在构建中的成员,正在传输数据;

         3 8 129 - spare /dev/sdi1 热备盘

raid5 正在创建,而且速度很慢,待创建完毕,状态如下:

技术分享

7.4 添加raid5 到RAID配置文件/etc/mdadm.conf 并修改

# echo DEVICE /dev/sd{f,g,h,i}1 >> /etc/mdadm.conf

# mdadm –Ds >> /etc/mdadm.conf

技术分享

7.5 格式化磁盘阵列

# mkfs.ext4 /dev/md5

技术分享

7.6 建立挂载点并挂载

# mkdir /raid5

# mount /dev/md5 /raid5/

技术分享

raid5 的可用大小为9.9G,即(3-1)x 5G.

向 /raid5 里面写入测试数据:

# touch test_raid5.failed 
# touch test_raid5.fail 
# ls

技术分享

7.7 写入 /etc/fstab

技术分享

然后reboot 测试开机是否自动挂载,raid5 创建完毕。

八、RAID维护

RAID 做好之后,还需要进行日常的维护操作,比如其中一块物理硬盘损坏,我们需要进行更换故障磁盘的操作,下面我们将模拟raid5 中磁盘损坏来讲解软RAID 的维护操作。

8.1 模拟磁盘损坏

在实际中,当软RAID 检测到某个磁盘有故障时,会自动标记该磁盘为故障磁盘,并停止对故障磁盘的读写操作。在这里我们将/dev/sdh1 模拟为出现故障的磁盘,命令如下:

# mdadm /dev/md5 -f /dev/sdh1

技术分享

8.2 查看重建状态

在上面创建RAID 5过程中,我们设置了一个热备盘,所以当有标记为故障磁盘的时候,热备盘会自动顶替故障磁盘工作,阵列也能够在短时间内实现重建。通过查看"/proc/mdstat" 文件可以看到当前阵列的状态,如下:

技术分享

以上信息表明阵列正在重建,当一个设备出现故障或被标记故障时,相应设备的方括号后将被标以(F),如 "sdh1[4](F)"。

其中 "[3/2]" 的第一位数表示阵列所包含的设备数,第二位数表示活动的设备数,因为目前有一个故障设备,所以第二位数为2;

这时的阵列以降级模式运行,虽然该阵列仍然可用,但是不具有数据冗余;

而 "[UU_]" 表示当前阵列可以正常使用的设备是/dev/sdf1 和/dev/sdg1,如果是设备 “/dev/sdf1” 出现故障时,则将变成[_UU]。

8.3 查看之前写入的测试数据是否还在

技术分享

数据正常,未丢失。

8.4 重建完毕后查看阵列状态

技术分享

当前的RAID 设备又恢复了正常。

8.5 移除损坏的磁盘

移除刚才模拟出现故障的/dev/sdh1,操作如下:

技术分享

8.6 再次查看md5的状态

技术分享

/dev/sdh1 已经移除了。

8.7 新加热备磁盘

如果是实际生产中添加新的硬盘,同样需要对新硬盘进行创建分区的操作,这里我们为了方便,将刚才模拟损坏的硬盘再次新加到raid5 中。

技术分享

8.8 查看raid5 阵列状态

技术分享

/dev/sdh1 已经变成了热备盘。

8.9 查看测试数据

技术分享

数据正常,未丢失。故障切换测试完毕。

九、向RAID中增加存储硬盘

如果现在已经做好的RAID 空间还是不够用的话,那么我们可以向里面增加新的硬盘,来增加RAID 的空间。

9.1 在虚拟机中添加物理硬盘

上面我们已经在虚拟机中添加了八块硬盘,这里需要模拟新增硬盘,所以首先将虚拟机关闭,然后在存储里再次新增一块5GB的硬盘。然后分区等等操作,这里不再赘述。

技术分享

9.2 向RAID 中新加一块硬盘

# mdadm /dev/md5 -a /dev/sdj1

技术分享

查看此时的RAID 状态

技术分享

默认情况下,我们向RAID 中增加的磁盘,会被默认当作热备盘,我们需要把热备盘加入到RAID 的活动盘中。

9.3 热备盘转换成活动盘

# mdadm -G /dev/md5 -n4

技术分享

查看此时RAID 状态

技术分享

/dev/sdj1 已经变成了活动盘,但是Array Size : 10465280 (9.98 GiB 10.72 GB) 并没有变大,这是因为构建没有完成,图中也可以看出Status 为clean, reshaping。

等RAID 完成构建后,RAID的容量就会改变为(4-1)x 5GB,查看进度可以参考Reshape Status,也可以参考/proc/mdstat.

技术分享

构建完毕后的RAID 状态:

技术分享

Array Size : 15697920 (14.97 GiB 16.07 GB),磁盘容量已经增加了。

9.4 扩容文件系统

RAID 构建完毕后,阵列容量增加,但是文件系统还没有增加,这时我们还需要对文件系统进行扩容。

# df –TH

# resize2fs /dev/md5

# df –TH

技术分享

文件系统已经扩容到15G,而且测试数据正常,未丢失,新增物理硬盘成功。

9.5 修改RAID 配置文件/etc/mdadm.conf

技术分享

9.6 reboot 测试

技术分享

重启系统后,一切正常,Linux下配置软RAID成功。


Raid 后台管理