一、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 方式安装。

yum install -y mdadm

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

五、创建RAID0

5.1 新建分区

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

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

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

 

CentOS 6下配置软RAID图文详解_第1张图片

 

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

 

CentOS 6下配置软RAID图文详解_第2张图片

 

5.2 修改分区类型

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

 

CentOS 6下配置软RAID图文详解_第3张图片

 

5.3 保存分区

输入"w" 保存分区。

 

6

 

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

5.4 同步分区情况

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

 

7  

5.5 查看现在的状态

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

 

CentOS 6下配置软RAID图文详解_第4张图片

 

5.6 开始创建RAID0

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

或者#mdadm --create /dev/md0 --raid-devices=4 --level=4 /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1

说明:

   --raid-devices=4  代表表示创建raid的设备数目

   --level=4     表示raid级别Linux支持Linux supports LINEAR md devices, RAID0 (striping), RAID1 (mirroring), RAID4, RAID5, RAID6, RAID10, MULTIPATH, and FAULTY

 

12

 

说明:

-C  --create  创建阵列;

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

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

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

-x 指定热备盘的块数

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

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

5.7 查看raid0 状态

# cat /proc/mdstat

# mdadm -D /dev/md0

 

CentOS 6下配置软RAID图文详解_第5张图片

 

说明: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

 

CentOS 6下配置软RAID图文详解_第6张图片

 

5.10 建立挂载点并挂载

# mkdir /raid0

# mount /dev/md0 /raid0/

 

CentOS 6下配置软RAID图文详解_第7张图片

 

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

5.11 写入/etc/fstab

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

 

CentOS 6下配置软RAID图文详解_第8张图片

 

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

六、创建RAID1

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

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

 

CentOS 6下配置软RAID图文详解_第9张图片

 

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

 

CentOS 6下配置软RAID图文详解_第10张图片

 

6.2 开始创建RAID1

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

 

CentOS 6下配置软RAID图文详解_第11张图片

 

6.3 查看raid1 状态

# cat /proc/mdstat

# mdadm -D /dev/md1

 

CentOS 6下配置软RAID图文详解_第12张图片

 

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

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

 

CentOS 6下配置软RAID图文详解_第13张图片

 

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

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

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

 

22

 

6.5 格式化磁盘阵列

# mkfs.ext4 /dev/md1

 

CentOS 6下配置软RAID图文详解_第14张图片

 

6.6 建立挂载点并挂载

# mkdir /raid1

# mount /dev/md1 /raid1/

 

CentOS 6下配置软RAID图文详解_第15张图片

 

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

6.7 写入/etc/fstab

 

CentOS 6下配置软RAID图文详解_第16张图片

 

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

七、创建RAID5

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

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

分区结果如下:

 

CentOS 6下配置软RAID图文详解_第17张图片

 

7.2 开始创建RAID5

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

 

29

 

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

7.3 查看raid5 状态

# cat /proc/mdstat

# mdadm -D /dev/md5

 

CentOS 6下配置软RAID图文详解_第18张图片

 

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

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

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

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

 

CentOS 6下配置软RAID图文详解_第19张图片

 

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

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

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

 

CentOS 6下配置软RAID图文详解_第20张图片

 

7.5 格式化磁盘阵列

# mkfs.ext4 /dev/md5

 

CentOS 6下配置软RAID图文详解_第21张图片

 

7.6 建立挂载点并挂载

# mkdir /raid5

# mount /dev/md5 /raid5/

 

CentOS 6下配置软RAID图文详解_第22张图片

 

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

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

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

 

38

 

7.7 写入 /etc/fstab

 

CentOS 6下配置软RAID图文详解_第23张图片

 

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

八、RAID维护

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

8.1 模拟磁盘损坏

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

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

 

36

 

8.2 查看重建状态

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

 

CentOS 6下配置软RAID图文详解_第24张图片

 

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

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

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

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

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

 

39

 

数据正常,未丢失。

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

 

CentOS 6下配置软RAID图文详解_第25张图片

 

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

8.5 移除损坏的磁盘

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

 

41

 

8.6 再次查看md5的状态

 

CentOS 6下配置软RAID图文详解_第26张图片

 

/dev/sdh1 已经移除了。

8.7 新加热备磁盘

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

 

43

 

8.8 查看raid5 阵列状态

 

CentOS 6下配置软RAID图文详解_第27张图片

 

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

8.9 查看测试数据

 

45

 

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

九、向RAID中增加存储硬盘

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

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

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

 

9.2 向RAID 中新加一块硬盘

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

 

48

 

查看此时的RAID 状态

 

CentOS 6下配置软RAID图文详解_第28张图片

 

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

9.3 热备盘转换成活动盘

# mdadm -G /dev/md5 -n4

 

50

 

查看此时RAID 状态

 

CentOS 6下配置软RAID图文详解_第29张图片

 

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

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

 

CentOS 6下配置软RAID图文详解_第30张图片

 

构建完毕后的RAID 状态:

 

CentOS 6下配置软RAID图文详解_第31张图片

 

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

9.4 扩容文件系统

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

# df –TH

# resize2fs /dev/md5

# df –TH

 

CentOS 6下配置软RAID图文详解_第32张图片

 

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

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

 

CentOS 6下配置软RAID图文详解_第33张图片

 

9.6 reboot 测试

 

CentOS 6下配置软RAID图文详解_第34张图片

 

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


扩张现有的RAID阵列

1.添加新的硬盘/dev/sdd,并使用fdisk创建分区

fdisk  /dev/sdd

  • 按 n 创建新的分区。

  • 然后按 P 选择主分区。

  • 接下来选择分区号为1。

  • 只需按两次回车键选择默认值即可。

  • 然后,按 P 来打印创建好的分区。

  • 按 L,列出所有可用的类型。

  • 按 t 去修改分区。

  • 键入 fd 设置为 Linux 的 RAID 类型,然后按回车确认。

  • 然后再次使用p查看我们所做的更改。

  • 使用w保存更改。

2.新的sdd分区创建完成后,使用下面命令验证一下

ll /dev/ |grep sd

3.在添加到阵列前先检查磁盘是否有raid分区

mdadm --examine /dev/sdd1

4.添加新的分区到/dev/sdd1到现有的阵列md0 

mdadm --manage /dev/md0 --add /dev/sdd1

mdadm --add /dev/md0 /dev/sdd1

mdadm --detail /dev/md0   检查新添加的磁盘

5.如果要扩展阵列,则使用如下命令(因为现在有3快,2快为活动,1快为备用,三块都设置为阵列)

mdadm --grow --raid-devices=3 /dev/md0

mdadm --detail /dev/md0   检查新添加的磁盘

6. 在扩展阵列前,首先使用下面的命令列出现有的 RAID 阵列。

mdadm --detail /dev/md0

7.删除阵列中faulty磁盘

mdadm --remove /dev/md0 /dev/sdc1

8.一旦故障的磁盘被删除,然后我们只能使用2个磁盘来扩展 raid 阵列了。

mdadm --grow --raid-devices=2 /dev/md0

9,停止并移除阵列

mdadm --stop /dev/md0

mdadm --remove /dev/md0

10.增长模式,用于增加磁盘,为整列扩容

mdadm -G /dev/md0 -n 4

注释:表示吧raid5的热备磁盘增加到阵列工作磁盘中

-n  4 表示使用四块工作磁盘

11.查看整列详细信息

mdadm -D  /dev/md0

12.装配模式,软raid是基于系统,当系统损坏了,需要重新装配raid

mdamd -A /dev/md0 /dev/sdc1 /dev/sdd1

实现自动装配

mdamd -Ds > /etc/mdamd.conf

13.吧热备盘加入到活动盘中

mdadm -G /dev/md4  -n5

14.向当前raid5中增加一块硬盘

mdadm /dev/md5 -a /dev/sdf

15.通过lsblk命令,可以看到刚才添加的磁盘

16.删除软raid的方法

mdadm /dev/md0 --fail /dev/sdb --remove /dev/sdb
mdadm /dev/md0 --fail /dev/sdc --remove /dev/sdc
mdadm /dev/md0 --fail /dev/sdc --remove /dev/sdd
mdadm /dev/md0 --fail /dev/sde --remove /dev/sde
mdadm /dev/md0 --fail /dev/sdf --remove /dev/sdf

mdadm --stop /dev/md0
mdadm --remove /dev/md0

mdadm --misc --zero-superblock /dev/sdb
mdadm --misc --zero-superblock /dev/sdc
mdadm --misc --zero-superblock /dev/sdd
mdadm --misc --zero-superblock /dev/sde
mdadm --misc --zero-superblock /dev/sdf

即: 先删除RAID中的所有设备,然后停止该RAID即可

为了防止系统启动时候启动raid
rm -f /etc/mdadm.conf 
rm -f /etc/raidtab
检查系统启动文件中是否还有其他mdad启动方式
vi /etc/rc.sysinit +/raid\c





我在使用mdadm中遇到的一些问题,及其解决方法

1.是用mdadm -C...创建raid时提示:

mdadm: error opening /dev/md0: No such file or directory

这主要是/dev/下没有md0这个设备文件,需要用mknod命令创建一个

mknod /dev/md0 b 9 0  #b为块设备,9为主设备号,0为次设备号

2.创建raid时提示:

mdadm: cannot open device /dev/sdb1: Device or resource busy

这个通常是因为/dev/sdb1已经被挂载到了某个目录下,解决的方法是:

umount /dev/sdb1

3.创建raid过程中进行格式化:

在raid初始化过程中,可以对该其进行格式化,但是要注意必须在raid初始化完成到一定程度才可以开始,比如对于ext2、ext3,默认情况下它们的inode信息要占到卷空间5%的大小,所以尽量在初始化完成到5%以上的时候,再开始格式化。

4.对于降级的raid强制激活:

当raid降级后,比如raid5掉一块盘,raid6掉2块盘,可以通过

mdadm -A --force /dev/md0 /dev/sdb1 /dev/sdc1

的方式使用raid。但要注意,当raid失效时,即raid5掉2块以上盘,raid6掉3块以上盘数,用--force仍然能将raid激活,但是这时候再向raid中写入数据,将会造成raid里的文件信息丢失。

5.降级raid的重建:

对于正在运行的raid,可以用add命令给其新增一块盘,如下:

mdadm --manage --add /dev/md0 /dev/sdd1

再cat /proc/mdstat,就可以看到raid重建的进度了

对于已经停止的raid,可以用

mdadm -A --force /dev/md0 /dev/sdb1 /dev/sdc1

先将降级的raid强制激活,

然后再运行

mdadm --manage --add /dev/md0 /dev/sdd1

6.将raid信息保存到配置文件:

在很多网上的教程中,给出的mdadm配置文件的路径是/etc/mdadm.conf,但我在Ubuntu 10.10和CentOS 5.0上发现,它们的配置文件路径为/etc/mdadm/mdadm.conf,所以保险起见,还是将配置文件同时放到两个目录下好

mdadm --detail --scan >> /etc/mdadm/mdadm.conf

mdadm --detail --scan >> /etc/mdadm.conf

mdadm配置文件的目的是使每次重启后系统能够重新识别到raid

7.对于一些特殊的系统,比如经过内核经过裁剪的嵌入式设备,只把配置信息写入/etc/mdadm.conf中可能仍然无法保证重启后系统能识别到raid,所以要自己做点手脚,我的方法是在/etc/init.d/rc.local中加入:

mknod /dev/md0 b 9 0
mdadm --assemble /dev/md0 $(echo $(fdisk -l 2>/dev/null | grep "Linux raid autodetect" | awk '{print $1}'))
mount /dev/md0 /mnt

这样,就可以使每次重启后,系统能重新获得raid的信息了,并将其mount到了/mnt下。





参考:

http://www.360doc.com/content/16/0109/00/12144668_526529926.shtml  常用mdadm命令

http://www.linuxidc.com/Linux/2015-09/122602.htm

https://www.2cto.com/net/201706/641871.html   在RAID中扩展现有的raid阵列和删除故障磁盘