Linux磁盘阵列——RAID

简介:

    有关于什么是磁盘阵列,大家可以查看百度百科对磁盘阵列的解释

http://baike.baidu.com/link?url=ZGaN4jAdPn8rGDd2W8DWw44PH2MWpKc1zcQafyOrOZaEDfZzUBVmrxamms8qaPE9hNRwCe2GJ29-_8GyrNKh-06uFOgJpGPbQzbyxYr26BgUCWC07OcF4hpZAoEnqj3a07W1LowP0w8aZPP85-nsjliToIBB1J5NRcu_PvWJW37

大概的磁盘阵列的产生原因是由于直接使用大量IO速度快的磁盘需要很高的价钱,但是使用便宜的磁盘能够提供的IO速度又不够理想,所以人们就开发出了磁盘阵列这个东西,将很多相对便宜的磁盘组合在一起,按照一定方式组合在一起的磁盘就叫做磁盘阵列,这个磁盘阵列根据不同的组合方式还可以有不同的功能,具体的功能同样也可以点击上面的网址,到百度百科中查看。

按照磁盘组合方式和IO方式的不同分为RAID0、RAID1、RAID2、RAID3、RAID4、RAID5、RAID6、RAID7。其中RAID0是构建条带卷,使用至少两个磁盘,在进行写入磁盘的操作时,将数据均分到两个磁盘进行写入,这样写入的速度就提高了两倍,当磁盘的数量增长时,速度也会随之增长。同理,读取的速度也会成倍的增长。但是在实际的使用当中,我们更加注重的是数据的安全性,如果仅仅使用RAID0进行速度的提升并不能保证数据的安全性,就比如如果有一块磁盘被损坏,那么这块磁盘中的数据和在其他磁盘上与其有关的数据都会被损坏,这种可能是很有可能发生的,所以出现了RAID1,RAID1的组合方式是使用至少两个磁盘,在写入数据的时候同时将相同的数据写到两个磁盘中,完成一次备份,当读取的时候就从两个磁盘同时进行读取。在这种方式下虽然写入速度并没有提高,但是数据的安全性得到了保证,如果当有一块磁盘损坏的时候只需要及时的进行更换新的硬盘即可,而且使用这种方式还能够加快读取速度。在实际的使用中还可以通过RAID0和RAID1的组合使用,也就是RAID01或RAID10,RAID01是先进行RAID0,在进行RAID1;而RAID10则为反过来。

在说完了RAID0和RAID1之后,RAID2、RAID3、RAID4RAID5RAID6都是相似的,所以在这里只简单的介绍RAID5的工作方式。RAID5是分布式奇偶校验的独立磁盘结构,RAID5建立在RAID0之上,先是将数据条段化分开,保存在至少两个磁盘中,然后将这两个磁盘中的数据进行奇偶校验,将结果保存在另一块新的磁盘中,所以RAID5至少需要三块磁盘。和RAID01/10类似,RAID5也能和别的类型组合使用。

最后一个RAID7可以理解为一个独立存储计算机,自身带有操作系统和管理工具,可以独立运行,理论上性能最高的RAID模式。当然,如果指向扩大磁盘的容量而建立的磁盘矩阵叫做JBOD(Just a Bunch Of Disks),它的功能是将多块磁盘的空间合并一个大的连续空间使用。


在了解了什么是磁盘阵列之后,我们就可以自己来实现一个磁盘阵列了,实现磁盘阵列的方式有两种,第一种是硬件实现方式,通过不同的连接方式来构建;第二种是软件实现方式,在Centos6上的实现方式是通过mdadm模式化工具来实现的。


mdadm:模式化工具,为什么叫模式化呢?就是因为这个工具在使用的过程中有很多的模式,通过不同的选项能够进入不同的模式来对磁盘进行管理这个命令的语法格式:

mdadm [mode] <raiddevice> [options] <component-devices>

它能够支持的RAID级别有:LINEAR, RAID0, RAID1, RAID4, RAID5, RAID6, RAID10,...

[mode]:模式,分为创建模式、管理模式、监控模式、装配模式这四种模式,分别对应的功能如下:

    创建模式:用来创建磁盘阵列

    管理模式:向磁盘阵列中添加或者删除磁盘

    监控模式:监控磁盘阵列的工作情况

    装配模式:像是备份一样,将原先的磁盘阵列或者一个正在使用的磁盘阵列的配置用于一个新的磁盘阵列中


<raiddevice>:/dev/md#

<component-devices>:任意块设备,注意如果是分区的话,其分区类型要改为fd

创建模式:

在日常的使用中首先是创建一个磁盘阵列,使用-C选项进入创建模式,然后跟上以下选项来完成各自的功能:

-n #:使用#个块设备来创建此RAID

-l #:指明要创建的RAID的级别

-a {yes|no}:自动创建目标RAID设备的设备文件

-c CHUNK_SIZE:指明块大小, 默认值为512K

-x #:指明空闲盘的个数

比如创建一个RAID0:

1
2
3
4
[root@localhost ~] # mdadm -C /dev/md0 -a yes -l 0 -n 2 /dev/sdb{1,2}
mdadm: Defaulting to version 1.2 metadata
mdadm: array  /dev/md0  started.
[root@localhost ~] #

    在这条命令中“-C”是指进入创建模式;“ /dev/md0 ”是指定创建好的RAID0叫什么名字;“-a”是指自动创建目标RAID设备的设备文件;“-l”后头跟RAID的级别,如过创建RAID0就是0,如果创建RAID5就是5 ;“-n” 使用2个块设备来创建此RAID;在最后跟上想要加入此磁盘阵列的磁盘。如果想要创建其他等级的磁盘阵列,只需要更改“-l”后面跟着的数字即可,但是值得注意的是在创建不同等级的磁盘阵列的时候需要想好每一个等级的磁盘阵列所需的最少磁盘数量。

    在创建完成之后就可以像使用一块普通磁盘一样来使用这个磁盘阵列了,当然,首先要进行的是磁盘格式化,使用mkfs或者mkfs.ext4等命令,具体方法参考有关于磁盘管理的那篇博客。


管理模式:

    在创建完磁盘阵列并使用了一段时间之后,突然发现一块磁盘不能使用了,那么我们需要将其移除,并添加一块新的磁盘,此时需要使用管理模式,选项如下:

-f:为指定的磁盘或分区添加损坏标记

-a:添加磁盘或分区到md设备中

-r:从md设备中移除磁盘或分区

在这里创建一个RAID5磁盘阵列,假设现在sdb2磁盘发生了损坏,想要将其更换为sdb3磁盘,那么首先要做的是先将sdb2磁盘标记为损坏:

    创建RAID5:

1
2
3
[root@localhost ~] # mdadm -C /dev/md0 -a yes -l 5 -n 3 /dev/sdb{1,2,3}
mdadm: Defaulting to version 1.2 metadata
mdadm: array  /dev/md0  started.

将RAID5中的sdb2磁盘标记为损坏状态

1
2
[root@localhost ~] # mdadm /dev/md0 -f /dev/sdb2
mdadm:  set  /dev/sdb2  faulty  in  /dev/md0

移除sdb2磁盘:

1
2
3
[root@localhost ~] # mdadm /dev/md0 -r /dev/sdb2
mdadm: hot removed  /dev/sdb2  from  /dev/md0
[root@localhost ~] #

此时使用以下命令查看md0:

1
2
3
4
5
6
7
[root@localhost ~] # cat /proc/mdstat 
Personalities : [raid0] [raid6] [raid5] [raid4] 
md0 : active raid5 sdb3[3] sdb1[0]
       4190208 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3 /2 ] [U_U]
       
unused devices: <none>
[root@localhost ~] #

发现sdb2已经被移除了(还可以使用mdadm -D /dev/md0 命令查看)
在移除了磁盘之后,可以将一块新的硬盘添加到md0中,在这里可以将刚才移除的sdb2磁盘添加到md0中:

1
2
3
[root@localhost ~] # mdadm /dev/md0 -a /dev/sdb2
mdadm: added  /dev/sdb2
[root@localhost ~] #

此时再次查看,发现sdb2又回来了:

1
2
3
4
5
6
7
[root@localhost ~] # cat /proc/mdstat 
Personalities : [raid0] [raid6] [raid5] [raid4] 
md0 : active raid5 sdb2[4] sdb3[3] sdb1[0]
       4190208 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3 /3 ] [UUU]
       
unused devices: <none>
[root@localhost ~] #

在一个磁盘阵列不用了之后,可以使用mdadm -D md0 来将其停止



监控模式

使用mdadm -F /dev/md0命令来进行磁盘阵列的监控,但是这个模式是不经常使用的:

1
2
3
[root@localhost ~] # mdadm -F /dev/md0
Jun 21 12:50:01: Fail on  /dev/md0  /dev/sdb2
Jun 21 12:50:19: RebuildStarted on  /dev/md0  unknown device


装配模式

在日常的使用当中,我们可能会有需要将一个磁盘阵列的配置保存下来,然后在其他地方根据保存的信息进行恢复,需要依赖/etc/mdadm.conf文件进行,使用的方法是首先进行磁盘阵列信息的保存:

1
[root@localhost ~] # mdadm -D --scan >> /etc/mdadm.conf

然后 /etc/mdadm.conf 这个文件中就会保存以下内容:

1
2
3
[root@localhost ~] # cat /etc/mdadm.conf
ARRAY  /dev/md0  metadata=1.2 name=localhost.localdomain:0 UUID=82254c47:09be5b28:3544ddd0:4dd92c21
[root@localhost ~] #

然后。此时就可将原来的磁盘阵列停止:

1
2
3
[root@localhost ~] # mdadm -S /dev/md0
mdadm: stopped  /dev/md0
[root@localhost ~] #

然后再查看磁盘阵列的信息,发现已经没有磁盘阵列存在了:

1
2
3
4
[root@localhost ~] # cat /proc/mdstat 
Personalities : [raid0] [raid6] [raid5] [raid4] 
unused devices: <none>
[root@localhost ~] #

接下来就可以使用mdadm -A /dev/md0 命令来快速恢复磁盘阵列:

1
2
3
[root@localhost ~] # mdadm -A /dev/md0
mdadm:  /dev/md0  has been started with 3 drives.
[root@localhost ~] #

再次查看磁盘阵列的信息,发现刚才停止的磁盘阵列又回来了:

1
2
3
4
5
6
7
[root@localhost ~] # cat /proc/mdstat 
Personalities : [raid0] [raid6] [raid5] [raid4] 
md0 : active raid5 sdb1[0] sdb3[3] sdb2[4]
       4190208 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3 /3 ] [UUU]
       
unused devices: <none>
[root@localhost ~] #













本文转自正经的青年51CTO博客,原文链接:http://blog.51cto.com/11142243/1940532  ,如需转载请自行联系原作者





相关文章
|
26天前
|
Linux Shell C语言
【Shell 命令集合 磁盘维护 】Linux 分区管理的工具 sfdisk命令使用教程
【Shell 命令集合 磁盘维护 】Linux 分区管理的工具 sfdisk命令使用教程
29 1
|
26天前
|
存储 Shell Linux
【Shell 命令集合 磁盘维护 】Linux 管理硬盘分区 mpartition命令使用教程
【Shell 命令集合 磁盘维护 】Linux 管理硬盘分区 mpartition命令使用教程
36 1
|
26天前
|
存储 Shell Linux
【Shell 命令集合 磁盘维护 】Linux mkfs.ext2 命令使用教程
【Shell 命令集合 磁盘维护 】Linux mkfs.ext2 命令使用教程
37 1
|
26天前
|
存储 Shell Linux
【Shell 命令集合 磁盘维护 】Linux 创建DOS文件系统 mkdosfs命令使用指南
【Shell 命令集合 磁盘维护 】Linux 创建DOS文件系统 mkdosfs命令使用指南
31 2
|
26天前
|
存储 算法 Shell
【Shell 命令集合 磁盘维护 】Linux 创建启动磁盘 mkbootdisk命令使用教程
【Shell 命令集合 磁盘维护 】Linux 创建启动磁盘 mkbootdisk命令使用教程
27 1
|
26天前
|
存储 安全 Shell
【Shell 命令集合 磁盘维护 】Linux mformat 命令使用教程
【Shell 命令集合 磁盘维护 】Linux mformat 命令使用教程
28 0
|
26天前
|
Shell Linux API
【Shell 命令集合 磁盘维护 】Linux 查找指定目录下的所有符号链接文件 symlinks 命令使用教程
【Shell 命令集合 磁盘维护 】Linux 查找指定目录下的所有符号链接文件 symlinks 命令使用教程
31 1
|
26天前
|
Shell Linux C语言
【Shell 命令集合 磁盘维护 】Linux 创建一个初始化内存盘 mkinitrd命令使用教程
【Shell 命令集合 磁盘维护 】Linux 创建一个初始化内存盘 mkinitrd命令使用教程
33 0
|
26天前
|
存储 Shell Linux
【Shell 命令集合 磁盘维护 】Linux 创建Minix文件系统 mkfs.minix 命令使用教程
【Shell 命令集合 磁盘维护 】Linux 创建Minix文件系统 mkfs.minix 命令使用教程
33 0
|
26天前
|
存储 Shell Linux
【Shell 命令集合 磁盘维护 】Linux 建立ext2文件系统 mke2fs命令使用教程
【Shell 命令集合 磁盘维护 】Linux 建立ext2文件系统 mke2fs命令使用教程
30 2