RAID(
Redundant Array of Inexpensive Disks)称为廉价磁盘冗余阵列。
RAID 的基本想法是把多个便宜的小磁盘组合到一起,成为一个磁盘组,使性能达到或超过一个容量巨大、价格昂贵的磁盘。目前
RAID技术大致分为两种:基于硬件的
RAID技术和基于软件的
RAID技术。其中在
Linux下通过自带的软件就能实现
RAID功能,这样便可省去购买昂贵的硬件
RAID 控制器和附件就能极大地增强磁盘的
IO 性能和可靠性。由于是用软件去实现的
RAID功能,所以它配置灵活、管理方便。同时使用软件
RAID,还可以实现将几个物理磁盘合并成一个更大的虚拟设备,从而达到性能改进和数据冗余的目的。当然基于硬件的
RAID解决方案比基于软件
RAID技术在使用性能和服务性能上稍胜一筹,具体表现在检测和修复多位错误的能力、错误磁盘自动检测和阵列重建等方面。在本节将详细讲述如何在红旗
Linux服务器
上创建和维护软
RAID。
RAID级别介绍
随着
RAID技术经过不断的发展,现已有
RAID 0 到
RAID 6 七种基本的
RAID 级别,同时还有
RAID 0和
RAID 1的组合形式,称为
RAID10。其中的级别并不代表技术的高低,而
RAID 2和
RAID 4基本上不再使用了,
RAID 3则是由于实现起来太复杂也很少使用。目前这些常用的
RAID级别
Linux内核都能够支持,本节就以
Linux 2.6的内核为例,在
Linux 2.6内核中的软
RAID 可支持以下级别:
RAID 0、
RAID 1、
RAID 4、
RAID 5以及
RAID 6等。
Linux 2.6的内核除支持以上几种
RAID级别外,还可支持
LINEAR(线性模式)的软
RAID,线性模式是将两个或更多的磁盘组合到一个物理设备中,磁盘不必具有相同的大小,在写入RAID 设备时会首先填满磁盘A,然后是磁盘B,以此类推。也称为条带模式(
striped),即把连续的数据分散到多个磁盘上存取,如图
1所示。当系统有数据请求就可以被多个磁盘并行的执行,每个磁盘执行属于它自己的那部分数据请求。这种数据上的并行操作可以充分利用总线的带宽,显著提高磁盘整体存取性能。因为读取和写入是在设备上并行完成的,读取和写入性能将会增加,这通常是运行
RAID 0 的主要原因。但
RAID 0没有数据冗余,如果驱动器出现故障,那么将无法恢复任何数据。500)this.width=500;" border=0>图
1 RAID 0示意图
RAID 1又称为镜像(
Mirroring),一个具有全冗余的模式,如图
2所示。
RAID 1可以用于两个或
2xN个磁盘,并使用
0块或更多的备用磁盘,每次写数据时会同时写入镜像盘。这种阵列可靠性很高,但其有效容量减小到总容量的一半,
同时这些磁盘的大小应该相等,否则总容量只具有最小磁盘的大小。500)this.width=500;" border=0>图
2 RAID 1示意图
创建
RAID 4需要三块或更多的磁盘,它在一个驱动器上保存校验信息,并以
RAID 0方式将数据写入其它磁盘,如图
3所示。因为一块磁盘是为校验信息保留的,所以阵列的大小是(
N-
l)
*S,其中
S是阵列中最小驱动器的大小。就像在
RAID 1中那样,磁盘的大小应该相等。如果一个驱动器出现故障,那么可以使用校验信息来重建所有数据。如果两个驱动器出现故障,那么所有数据都将丢失。不经常使用这个级别的原因是校验信息存储在一个驱动器上。每次写入其它磁盘时,都必须更新这些信息。因此,在大量写入数据时很容易造成
校验磁盘的瓶颈,所以目前这个级别的
RAID很少使用了。500)this.width=500;" border=0>图
3 RAID 4示意图
在希望结合大量物理磁盘并且仍然保留一些冗余时,
RAID 5 可能是最有用的
RAID 模式。
RAID 5可以用在三块或更多的磁盘上,并使用
0块或更多的备用磁盘。就像
RAID 4一样,得到的
RAID5 设备的大小是(
N-
1)
*S。
RAID5 与
RAID4 之间最大的区别就是校验信息均匀分布在各个驱动器上,如图
4所示,这样就避免了
RAID 4中出现的瓶颈问题。如果其中一块磁盘出现故障,那么由于有校验信息,所以所有数据仍然可以保持不变。如果可以使用备用磁盘,那么在设备出现故障之后,将立即开始同步数据。如果两块磁盘同时出现故障,那么所有数据都会丢失。
RAID5 可以经受一块磁盘故障,但不能经受两块或多块磁盘故障。500)this.width=500;" border=0>图
4 RAID 5示意图
RAID 6是在
RAID 5基础上扩展而来的。与
RAID 5一样,数据和校验码都是被分成数据块然后分别存储到磁盘阵列的各个硬盘上。只是
RAID 6中增加一块校验磁盘,用于备份分布在各个磁盘上的校验码,如图
5所示,这样
RAID 6磁盘阵列就允
许两个磁盘同时出现故障,所以
RAID 6的磁盘阵列最少需要四块硬盘。500)this.width=500;" border=0>图
5 RAID 6示意图
创建软RAID在红旗
Linux服务器中是通过
mdadm工具来创建和维护软
RAID的,
mdadm在创建和管理软
RAID时非常方便,而且很灵活。
mdadm常用的参数有如下:
- --create或-C:创建一个新的软RAID,后面接raid设备的名称。例如,/dev/md0,/dev/md1等。
- --assemble或-A:加载一个已存在的阵列,后面跟阵列以及设备的名称。
- --detail或-D:输出指定RAID设备的详细信息。
- --stop或-S:停止指定的RAID设备。
- --level或-l:设置RAID的级别,例如,设置“--level=5”则表示创建阵列的级别是RAID 5。
- --raid-devices或-n:指定阵列中活动磁盘的数目。
- --scan或-s:扫描配置文件或/proc/mdstat文件来搜索软RAID的配置信息,该参数不能单独使用,只能配置其它参数才能使用。
下面将通过一个实例来讲述通过
mdadm如何实现软
RAID的功能。
【实例
1】某台机器上有
4块空闲的硬盘,分别是
/dev/sdb、
/dev/sdc、
/dev/sdd和
/dev/sde,并用这四块硬盘来创建来创建一个
RAID 5,具体操作步骤如下:
1、创建分区
首先使用“fdisk”命令在每块硬盘上创建一个分区,操作如下:# fdisk /dev/sdbDevice contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabelBuilding a new DOS disklabel. Changes will remain in memory only,until you decide to write them. After that, of course, the previouscontent won"t be recoverable. Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite) Command (m for help): nCommand actione extendedp primary partition (1-4)pPartition number (1-4): 1First cylinder (1-102, default 1):Using default value 1Last cylinder or +size or +sizeM or +sizeK (1-102, default 102):Using default value 102 Command (m for help): wThe partition table has been altered! Calling ioctl() to re-read partition table.Syncing disks. |
针对其余几块硬盘也做相同操作,如果是直接基于磁盘来创建
RAID设备,那么就可以跳过这一步。
2、创建
RAID 5创建完
/dev/sdb1、
/dev/sdc1、
/dev/sdd1、
/dev/sde1四个分区后,下面就可以来创建
RAID 5了,其中设定
/dev/sde1作为备用设备,其余为活动设备,备用设备的作用是一旦某一设备损坏可以立即使用备用设备替换。操作命令如下:
| # mdadm --create /dev/md0 --level=5 --raid-devices=3 --spare-devices=1 /dev/sd[b-e]1mdadm: array /dev/md0 started. |
其中“
--spare-devices=1”表示当前阵列中备用设备只有一块,即作为备用设备的“
/dev/sde1”,若有多块备用设备,则将“
--spare-devices”的值设置为相应的数目。成功创建完成
RAID设备后,通过如下命令可以查看到
RAID的详细信息:
# mdadm --detail /dev/md0/dev/md0:Version : 00.90.01Creation Time : Mon Jan 22 10:55:49 2007Raid Level : raid5Array Size : 208640 (203.75 MiB 213.65 MB)Device Size : 104320 (101.88 MiB 106.82 MB)Raid Devices : 3Total Devices : 4Preferred Minor : 0Persistence : Superblock is persistent Update Time : Mon Jan 22 10:55:52 2007State : cleanActive Devices : 3Working Devices : 4Failed Devices : 0Spare Devices : 1 Layout : left-symmetricChunk Size : 64K Number Major Minor RaidDevice State0 8 17 0 active sync /dev/sdb11 8 33 1 active sync /dev/sdc12 8 49 2 active sync /dev/sdd13 8 65 -1 spare /dev/sde1UUID : b372436a:6ba09b3d:2c80612c:efe19d75Events : 0.6 |
3、创建
RAID的配置文件
RAID的配置文件名为“
mdadm.conf”,默认是不存在的,所以需要手工创建,该配置文件存在的主要作用是系统启动的时候能够自动加载软
RAID,同时也方便日后管理。“
mdadm.conf”文件内容包括:由
DEVICE选项指定用于软
RAID的所有设备,和
ARRAY选项所指定阵列的设备名、
RAID级别、阵列中活动设备的数目以及设备的
UUID号。生成
RAID配置文件操做如下:
| # mdadm --detail --scan > /etc/mdadm.conf |
但是当前生成“
mdadm.conf”文件的内容并不符合所规定的格式,所以也是不生效的,这时需要手工修改该文件内容为如下格式:
| # vi /etc/mdadm.confDEVICE /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1ARRAY /dev/md0 level=raid5 num-devices=3 UUID=b372436a:6ba09b3d:2c80612c:efe19d75 |
如果没有创建
RAID的配置文件,那么在每次系统启动后,需要手工加载软
RAID才能使用,手工加载软
RAID的命令是:
| # mdadm --assemble /dev/md0 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1mdadm: /dev/md0 has been started with 3 drives and 1 spare. |
4、创建文件系统接下来就只需要在
RAID设备上创建文件系统就可使用了,在
RAID设备上创建文件系统和在分区或磁盘上创建文件系统的方法一样。在设备“
/dev/md0”上创建
ext3的文件系统命令如下:
创建完文件系统后,将该设备挂载上就可正常的使用了。如果要创建其它级别的
RAID,其步骤和创建
RAID 5基本都一样,区别在于指定“
--level”值的时候,需要将该值设置为相应的级别。
维护软RAID
软
RAID虽然很大程度上能保证数据的可靠性,但是在日常的工作中,有时可能需要对
RAID进行调整以及不排除
RAID设备物理介质损坏的可能等相关问题,当遇到这些情况时,那么同样可以通过“
mdadm”命令来完成这些操作。下面也将通过一个实例来介绍更换
RAID故障磁盘的完整过程。
【实例
2】以前面的【实例
1】为基础,假定其中的“
/dev/sdc1”设备出现故障时,更换一个新的磁盘,整个过程的详细说明如下:
1、模拟故障磁盘在实际中,当软
RAID检测到某个磁盘有故障时,会自动标记该磁盘为故障磁盘,并停止对故障磁盘的读写操作,所以这里需要将
/dev/sdc1标记为出现故障的磁盘,命令如下:
| # mdadm /dev/md0 --fail /dev/sdc1mdadm: set /dev/sdc1 faulty in /dev/md0 |
由于【实例
1】中的
RAID 5设置了一个备用设备,所以当有标记为故障磁盘的时候,备用磁盘会自动顶替故障磁盘工作,阵列也能够在短时间内
实现重建。通过“
/proc/mdstat”文件可查看到当前阵列的状态,如下:
| # cat /proc/mdstatPersonalities : [raid5]md0 : active raid5 sde1[3] sdb1[0] sdd1[2] sdc1[4](F)208640 blocks level 5, 64k chunk, algorithm 2 [3/2] [U_U][=====>...............] recovery = 26.4% (28416/104320) finish=0.0min speed=28416K/secunused devices: <none> |
以上信息表明阵列
正在重建,当一个设备出现故障或被标记故障时,相应设备的方括号后将被标以
(F),如“
sdc1[4](F)”,其中“
[3/2]”的第一位数表示阵列所包含的设备数,第二位数表示活动的设备数,因为目前有一个故障设备,所以第二位数为
2;这时的阵列以降级模式运行,虽然该阵列仍然可用,但是不具有数据冗余;而“
[U_U]”表示当前阵列可以正常使用的设备是
/dev/sdb1和
/dev/sdd1,如果是设备“
/dev/sdb1”出现故障时,则将变成
[_UU]。重建完数据后,再次查看阵列状态时,就会发现当前的
RAID设备又恢复了正常,如下:
| # cat /proc/mdstatPersonalities : [raid5]md0 : active raid5 sde1[1] sdb1[0] sdd1[2] sdc1[3](F)208640 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]unused devices: <none> |
2、移除故障磁盘既然“
/dev/sdc1”出现了故障,当然要移除该设备,移除故障磁盘的操作如下:
| # mdadm /dev/md0 --remove /dev/sdc1mdadm: hot removed /dev/sdc1 |
其中“—
remove”表示移除指定
RAID设备中的某个磁盘,也可用“
-r”来代替该参数。
3、添加新硬盘在添加新的硬盘前,同样需要对新硬盘进行创建分区的操作,例如,添加新硬盘的设备名为“
/dev/sdc1”,则具体操作如下:
| # mdadm /dev/md0 --add /dev/sdc1mdadm: hot added /dev/sdc1 |
其中“
--add”与前面的“
--remove”其义刚好相反,用于将某个磁盘添加到指定的设备中,也可用“
-a”代替该参数。由于【实例
1】中的
RAID 5设置了一个备用设备,所以不需要做任何操作
RAID 5也能正常运行,但是如果这时某块磁盘再出现故障的话,会导致
RAID 5没有数据冗余功能,这对于存放重要的数据的设备来说显得太不安全了。那么这时增加到
RAID 5中的“
/dev/sdc1”则作为备用设备出现在阵列中,如下:
| # mdadm --detail /dev/md0/dev/md0:…………Number Major Minor RaidDevice State0 8 17 0 active sync /dev/sdb11 8 65 1 active sync /dev/sde12 8 49 2 active sync /dev/sdd13 8 33 -1 spare /dev/sdc1UUID : b372436a:6ba09b3d:2c80612c:efe19d75Events : 0.133 |
RHEL5上安装Extmail邮件系统Ubuntu通过PPA安装Zeitgeist与Zeitgeist日志管理器相关资讯 RAID
- RHCE学习笔记:RAID种类 (08月01日)
- LFCS 系列第六讲:组装分区为RAID (04月18日)
- RAID级别和实现实例操作详解 (12/22/2015 14:57:09)
| - 图解RAID 0, RAID 1, RAID 5, RAID (07月27日)
- Red Hat Linux 7 下软件仿真 磁盘 (03月17日)
- 在 Linux 下使用 RAID(九):如何 (10/24/2015 14:40:07)
|
本文评论 查看全部评论 (0)