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  ,如需转载请自行联系原作者





相关文章
|
3月前
|
Ubuntu Linux Shell
Linux系统中如何查看磁盘情况
【9月更文挑战第3天】在Linux系统中,有多种方式查看磁盘情况。可通过命令行工具`df`查看文件系统磁盘使用情况,选项`-h`以人类可读格式显示,`-T`显示文件系统类型;`du`命令显示目录或文件磁盘使用情况,`-h`以人类可读格式显示,`-s`仅显示总计;`fdisk -l`列出磁盘和分区信息。此外,图形界面的磁盘管理工具和文件管理器也可用于查看磁盘使用情况。这些方法有助于更好地管理磁盘空间。
727 4
|
4月前
|
存储 监控 安全
在Linux中,⼀个EXT3的文件分区,当使用touch test.file命令创建⼀个新文件时报错,报错的信息是提示磁盘已满,但是采用df -h命令查看磁盘大小时,只使用了,60%的磁盘空间,为什么会出现这个情况?
在Linux中,⼀个EXT3的文件分区,当使用touch test.file命令创建⼀个新文件时报错,报错的信息是提示磁盘已满,但是采用df -h命令查看磁盘大小时,只使用了,60%的磁盘空间,为什么会出现这个情况?
|
3月前
|
存储 Linux 5G
Linux 基于 LVM 逻辑卷的磁盘管理【简明教程】
这篇文章介绍了LVM(逻辑卷管理)如何提供灵活的磁盘管理方式,允许动态调整逻辑卷的大小而不会丢失数据。
Linux 基于 LVM 逻辑卷的磁盘管理【简明教程】
|
2月前
|
Unix Linux 对象存储
Linux 磁盘管理
Linux 磁盘管理
46 1
|
2月前
|
监控 Linux 测试技术
Linux系统命令与网络,磁盘和日志监控总结
Linux系统命令与网络,磁盘和日志监控总结
70 0
|
2月前
|
监控 Linux 测试技术
Linux系统命令与网络,磁盘和日志监控三
Linux系统命令与网络,磁盘和日志监控三
49 0
|
4月前
|
存储 监控 Linux
|
4月前
|
监控 Linux
在Linux中,如何监控磁盘I/O性能?
在Linux中,如何监控磁盘I/O性能?
|
4月前
|
Prometheus 监控 Ubuntu
在Linux中,如何进行磁盘性能监控?
在Linux中,如何进行磁盘性能监控?
|
4月前
|
存储 监控 Linux
在Linux中,如何管理磁盘配额?
在Linux中,如何管理磁盘配额?