磁盘冗余阵列

    1988年由加利福尼亚大学伯克利分校发表的文章首次提到并定义了RAID,当今CPU性能每年可提升30%-50%但硬盘仅提升7%,渐渐的已经成为计算机整体性能的瓶颈,并且为了避免硬盘的突然损坏导致数据丢失还加入了冗余备份机制。

RAID的早先设计理念为”redundant array of Inexpensive disks“即不贵的硬盘组,而现在的定义是”Redundant Array ofIndependent Disks“即独立的硬盘组,作用是防止硬盘物理损坏以及增加存储设备的吞吐量。RAID常见的组合有0、1、5和10:


RAID0:需要至少两块(含)硬盘,可以有效的提高硬盘的性能和吞吐量,但没有数据的冗余和错误修复能力。

RAID详解_最大限度

将多块硬盘通过硬件或软件的方式串联在一起,成为一个大的卷集,将数据依次写入到各个硬盘中,这样性能会极大提升,但若任意一块硬盘故障则整个系统的数据都会受到破坏。


RAID1:需要至少两块(含)硬盘,可以有效的提高数据资料的安全性和可修复性,但成本却提高了。

RAID详解_计算机_02

实现原来是在数据写入硬盘时也会在另外一块闲置的硬盘上生成镜像文件,在不影响性能的情况下最大限度保证数据资料的可靠性,只要在一对镜像盘中还有一块硬盘可以使用,那么数据也不会丢失,具有很好的硬盘冗余能力,虽然对数据来讲绝对的安全,但成本却明显增加,磁盘利用率仅为50%。


RAID5:需要至少三块(含)硬盘,兼顾存储性能、数据安全和储存成本。

RAID详解_最大限度_03


如上图所示”parity”块中保存的是其他硬盘数据的奇偶校验信息(并非其他硬盘的数据),以数据的奇偶校验信息来保证数据的安全,RAID5不以单独的硬盘来存放数据的奇偶校验信息,而是保存在各个磁盘上。

这样当任何一个硬盘损坏都可以根据其他硬盘上的奇偶校验信息来尝试重建损坏的数据,性能也很高,兼顾了存储性能、数据安全和存储成本,可以看作是RAID0与RAID1的折中方案。


RAID10:需要至少四块(含)硬盘,兼具速度和安全性,但成本很高。

RAID详解_计算机_04


继承了RAID0的快速与RAID1的安全,RAID1在这里提供了冗余备份的阵列,而RAID0则负责数据的读写阵列。

因这种结构的成本高,一般用于存放要求速度与差错控制的数据。

mdadm命令用于管理系统软件RAID硬盘阵列,格式为:

”mdadm [模式] <RAID设备名称> [选项] [成员设备名称]”。


mdadm管理RAID阵列的动作有:

名称   作用

Assemble 将设备加入到以前定义的阵列

Build 创建一个没有超级块的阵列

Create 创建一个新的阵列,每个设备具有超级块。

Manage 管理阵列(如添加和删除)。

Misc 允许单独对阵列中的某个设备进行操作(如停止阵列)。

Follow or Monitor 监控状态。

Grow 改变阵列的容量或设备数目。

mdadm管理RAID阵列的参数有:

参数 作用

-a 检测设备名称

-n 指定设备数量

-l 指定raid级别

-C 创建

-v 显示过程

-f 模拟设备损坏

-r 移除设备

-a 添加设备

-Q 查看摘要信息

-D 查看详细信息

-S 停止阵列


模拟训练:RAID10配置流程:

第1步:在虚拟机中再添加4块硬盘:

RAID详解_计算机_05


第2步:使用mdadm命令创建RAID10,名称为”/dev/md0″。


-C代表创建操作,-v显示创建过程,-a yes检查RAID名称,-n是用到的硬盘个数,-l是定义RAID的级别而后面写上要加入阵列的硬盘名称。


[root@www ~]#mdadm -Cv /dev/md0 -a yes -n4 -l 10 /dev/sdb /dev/sdc /dev/sdd /dev/sde

mdadm: layout defaults to n2

mdadm: layout defaults to n2

mdadm: chunk size defaults to 512K

mdadm: size set to 20954624K

mdadm: Defaulting to version 1.2 metadata

mdadm: array /dev/md0 started.


第3步:格式化并挂载使用

将RAID磁盘阵列格式化为ext4格式:

[root@www ~]# mkfs.ext4 /dev/md0

mke2fs 1.42.9 (28-Dec-2013)

Filesystem label=

OS type: Linux

Block size=4096 (log=2)

Fragment size=4096 (log=2)

Stride=128 blocks, Stripe width=256 blocks

2621440 inodes, 10477312 blocks

523865 blocks (5.00%) reserved for the super user

First data block=0

Maximum filesystem blocks=2157969408

320 block groups

32768 blocks per group, 32768 fragments per group

8192 inodes per group

Superblock backups stored on blocks:

32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632,2654208,

4096000, 7962624

Allocating group tables: done

Writing inode tables: done

Creating journal (32768 blocks): done

Writing superblocks and filesystem accounting information: done

创建挂载目录:

[root@www ~]# mkdir /RAID

进行文件系统的挂载:

[root@www ~]# mount /dev/md0 /RAID

查看磁盘挂载信息:

[root@www ~]# df -h

Filesystem Size Used Avail Use% Mounted on

/dev/mapper/rhel-root 18G 3.0G 15G 17% /

devtmpfs 905M 0 905M 0% /dev

tmpfs 914M 84K 914M 1% /dev/shm

tmpfs 914M 8.9M 905M 1% /run

tmpfs 914M 0 914M 0% /sys/fs/cgroup

/dev/sr0 3.5G 3.5G 0 100% /media/cdrom

/dev/sda1 497M 119M 379M 24% /boot

/dev/md0 40G 49M 38G 1% /RAID

将此磁盘阵列挂载信息设置为重启后也依然生效:

[root@www ~]# echo "/dev/md0 /RAIDext4 defaults 0 0" >> /etc/fstab


第4步:查看/dev/md0设备信息


参数-D查看RAID阵列的详细信息:

[root@www ~]# mdadm -D /dev/md0

/dev/md0:

Version : 1.2

Creation Time : Tue May 5 07:43:26 2015

Raid Level : raid10

Array Size : 41909248 (39.97 GiB 42.92 GB)

Used Dev Size : 20954624 (19.98 GiB 21.46 GB)

Raid Devices : 4

Total Devices : 4

Persistence : Superblock is persistent

Update Time : Tue May 5 07:46:59 2015

State : clean

Active Devices : 4

Working Devices : 4

Failed Devices : 0

Spare Devices : 0

Layout : near=2

Chunk Size : 512K

Name : localhost.localdomain:0 (local to host localhost.localdomain)

UUID : cc9a87d4:1e89e175:5383e1e8:a78ec62c

Events : 17

Number Major Minor RaidDevice State

0 8 16 0 active sync /dev/sdb

1 8 32 1 active sync /dev/sdc

2 8 48 2 active sync /dev/sdd

3 8 64 3 active sync /dev/sde


第5步:模拟有1块硬盘损坏的情况


使用mdadm的-f参数将/dev/sdb移出阵列:

[root@www ~]# mdadm /dev/md0 -f /dev/sdb

mdadm: set /dev/sdb faulty in /dev/md0

再看下阵列的状态(此时的/dev/sdb状态被是移除,失败状态):

[root@www ~]# mdadm -D /dev/md0

/dev/md0:

Version : 1.2

Creation Time : Fri May 8 08:11:00 2015

Raid Level : raid10

Array Size : 41909248 (39.97 GiB 42.92 GB)

Used Dev Size : 20954624 (19.98 GiB 21.46 GB)

Raid Devices : 4

Total Devices : 4

Persistence : Superblock is persistent

Update Time : Fri May 8 08:27:18 2015

State : clean, degraded

Active Devices : 3

Working Devices : 3

Failed Devices : 1

Spare Devices : 0

Layout : near=2

Chunk Size : 512K

Name : www.com:0 (local to host www.com)

UUID : f2993bbd:99c1eb63:bd61d4d4:3f06c3b0

Events : 21

Number Major Minor RaidDevice State

0 0 0 0 removed

1 8 32 1 active sync /dev/sdc

2 8 48 2 active sync /dev/sdd

3 8 64 3 active sync /dev/sde

0 8 16 - faulty /dev/sdb


第6步:损坏后依然正常使用


因为RAID10级别能够允许一组RAID1硬盘中存在一个故障盘而不影响使用,所以依然可以正常的创建或删除文件~

现在就把新的硬盘添加进去吧,当然也可以让硬盘sdb恢复使用:请重启后执行“ mdadm /dev/md0 -a /dev/sdb”。


第7步:设置冗余备份磁盘


现在发现了一个问题没?运维人员需要在硬盘硬件出现故障后手工添加新的磁盘进去,这样会不会比较不方便?
假如初始化RAID5阵列时直接给予4块硬盘,其中1块硬盘设备用于在阵列某块磁盘故障时自动的替换上去,这样很棒吧!
先将磁盘系统卸载:

[root@www ~]# umount /dev/md0

停止该阵列设备,彻底的停用:

[root@www ~]# mdadm -S /dev/md0

mdadm: stopped /dev/md0

现在该阵列已经找不到了:

[root@www ~]# mdadm -D /dev/md0

mdadm: cannot open /dev/md0: No such file ordirectory

创建RAID5并设置1块备份故障盘:

[root@www ~]# mdadm -Cv /dev/md0 -n 3 -l5 -x 1 /dev/sdb /dev/sdc /dev/sdd /dev/sde

mdadm: layout defaults to left-symmetric

mdadm: layout defaults to left-symmetric

mdadm: chunk size defaults to 512K

mdadm: /dev/sdb appears to be part of a raidarray:

level=raid10 devices=4 ctime=Fri May 8 08:11:002015

mdadm: /dev/sdc appears to be part of a raidarray:

level=raid10 devices=4 ctime=Fri May 8 08:11:002015

mdadm: /dev/sdd appears to be part of a raidarray:

level=raid10 devices=4 ctime=Fri May 8 08:11:002015

mdadm: /dev/sde appears to be part of a raidarray:

level=raid10 devices=4 ctime=Fri May 8 08:11:002015

mdadm: size set to 20954624K

此处需要输入y,确认创建这个阵列:

Continue creating array? y

mdadm: Defaulting to version 1.2 metadata

mdadm: array /dev/md0 started.

查看下阵列的详细信息(Spare Devices数量为1):

[root@www ~]# mdadm -D /dev/md0

/dev/md0:

Version : 1.2

Creation Time : Fri May 8 09:20:35 2015

Raid Level : raid5

Array Size : 41909248 (39.97 GiB 42.92 GB)

Used Dev Size : 20954624 (19.98 GiB 21.46 GB)

Raid Devices : 3

Total Devices : 4

Persistence : Superblock is persistent

Update Time : Fri May 8 09:22:22 2015

State : clean

Active Devices : 3

Working Devices : 4

Failed Devices : 0

Spare Devices : 1

Layout : left-symmetric

Chunk Size : 512K

Name : www.com:0 (local to hostwww.com)

UUID : 44b1a152:3f1809d3:1d234916:4ac70481

Events : 18

Number Major Minor RaidDevice State

0 8 16 0 active sync /dev/sdb

1 8 32 1 active sync /dev/sdc

4 8 48 2 active sync /dev/sdd

3 8 64 - spare /dev/sde

将磁盘阵列格式化为ext4系统:

[root@www ~]# mkfs.ex

t4 /dev/md0

mke2fs 1.42.9 (28-Dec-2013)

Filesystem label=

OS type: Linux

Block size=4096 (log=2)

Fragment size=4096 (log=2)

Stride=128 blocks, Stripe width=256 blocks

2621440 inodes, 10477312 blocks

523865 blocks (5.00%) reserved for the superuser

First data block=0

Maximum filesystem blocks=2157969408

320 block groups

32768 blocks per group, 32768 fragments pergroup

8192 inodes per group

Superblock backups stored on blocks:

32768, 98304, 163840, 229376, 294912, 819200,884736, 1605632, 2654208,

4096000, 7962624

Allocating group tables: done

Writing inode tables: done

Creating journal (32768 blocks): done

Writing superblocks and filesystem accountinginformation: done

因为前面设置过fstab文件,所以现在可以直接给挂载:

[root@www ~]# mount -a

将/dev/sdb设备设置为故障并移出阵列:

[root@www ~]# mdadm /dev/md0 -f /dev/sdb

mdadm: set /dev/sdb faulty in /dev/md0

再来看下阵列的详细信息(此时硬盘sde直接顶替上去了):

[root@www ~]# mdadm -D /dev/md0

/dev/md0:

Version : 1.2

Creation Time : Fri May 8 09:20:35 2015

Raid Level : raid5

Array Size : 41909248 (39.97 GiB 42.92 GB)

Used Dev Size : 20954624 (19.98 GiB 21.46 GB)

Raid Devices : 3

Total Devices : 4

Persistence : Superblock is persistent

Update Time : Fri May 8 09:23:51 2015

State : active, degraded, recovering

Active Devices : 2

Working Devices : 3

Failed Devices : 1

Spare Devices : 1

Layout : left-symmetric

Chunk Size : 512K

Rebuild Status : 0% complete

Name : www.com:0 (local to hostwww.com)

UUID : 44b1a152:3f1809d3:1d234916:4ac70481

Events : 21

Number Major Minor RaidDevice State

3 8 64 0 spare rebuilding /dev/sde

1 8 32 1 active sync /dev/sdc

4 8 48 2 active sync /dev/sdd

0 8 16 - faulty /dev/sdb