来自:LinuxSir.Org
摘要:各种灾难、错误带来的数据损坏和丢失给人们带来的损失和不便,个人及网站服务器的数据必须要备份,作Raid便是一种可行而有效的方法。Raid分为软Raid和硬raid......
2.2 RAID1的特点与应用;
2.3 RAID 3的特点与应用;
2.4 RAID 4的特点与应用;
2.5 RAID 5的特点与应用;
2.6 RAID 0+1﹝RAID 10﹞的特点与应用;
3. 怎样选择Raid级别;
4. 创建和维护Raid;
5. 关于本文;
+++++++++++++++++++++++++++++++++++++++++++
正文
+++++++++++++++++++++++++++++++++++++++++++
1.什么是Raid;
RAID(Redundant Array of Inexpensive Disks)称为廉价磁盘冗余阵列。RAID 的基本想法是把多个便宜的小磁盘组合到一起,成为一个磁盘组,使性能达到或超过一个容量巨大、价格昂贵的磁盘。
目前 RAID技术大致分为两种:基于硬件的RAID技术和基于软件的RAID技术。其中在Linux下通过自带的软件就能实现RAID功能,这样便可省去购买昂贵的硬件 RAID 控制器和附件就能极大地增强磁盘的 IO 性能和可靠性。由于是用软件去实现的RAID功能,所以它配置灵活、管理方便。同时使用软件RAID,还可以实现将几个物理磁盘合并成一个更大的虚拟设备,从而达到性能改进和数据冗余的目的。当然基于硬件的RAID解决方案比基于软件RAID技术在使用性能和服务性能上稍胜一筹,具体表现在检测和修复多位错误的能力、错误磁盘自动检测和阵列重建等方面。
2.RAID级别介绍;
一般常用的RAID阶层,分别是RAID 0、RAID1、RAID 3、RAID 4以及RAID 5,再加上二合一型 RAID 0+1﹝或称RAID 10﹞。我们先把这些RAID级别的优、缺点做个比较:
RAID 0 存取速度最快 没有容错
RAID 1 完全容错 成本高
RAID 3 写入性能最好 没有多任务功能
RAID 4 具备多任务及容错功能 Parity 磁盘驱动器造成性能瓶颈
RAID 5 具备多任务及容错功能 写入时有overhead
RAID 0+1/RAID 10 速度快、完全容错 成本高
2.1 RAID0的特点与应用;
也称为条带模式(striped),即把连续的数据分散到多个磁盘上存取,如图所示。当系统有数据请求就可以被多个磁盘并行的执行,每个磁盘执行属于它自己的那部分数据请求。这种数据上的并行操作可以充分利用总线的带宽,显著提高磁盘整体存取性能。因为读取和写入是在设备上并行完成的,读取和写入性能将会增加,这通常是运行 RAID 0 的主要原因。但RAID 0没有数据冗余,如果驱动器出现故障,那么将无法恢复任何数据。
2.2 RAID 1 的特点与应用;
RAID 1又称为镜像(Mirroring),一个具有全冗余的模式,如图所示。RAID 1可以用于两个或2xN个磁盘,并使用0块或更多的备用磁盘,每次写数据时会同时写入镜像盘。这种阵列可靠性很高,但其有效容量减小到总容量的一半,同时这些磁盘的大小应该相等,否则总容量只具有最小磁盘的大小。
2.3 RAID 3特点与应用;
RAID 3 是将数据先做XOR 运算,产生Parity Data后,在将数据和Parity Data 以并行存取模式写入成员磁盘驱动器中,因此具备并行存取模式的优点和缺点。进一步来说,RAID 3每一笔数据传输,都更新整个Stripe﹝即每一个成员磁盘驱动器相对位置的数据都一起更新﹞,因此不会发生需要把部分磁盘驱动器现有的数据读出来,与新数据作XOR运算,再写入的情况发生﹝这个情况在 RAID 4和RAID 5会发生,一般称之为Read、Modify、Write Process,我们姑且译为为读、改、写过程﹞。因此,在所有 RAID级别中,RAID 3的写入性能是最好的。
2.4 RAID 4特点与应用;
创建RAID 4需要三块或更多的磁盘,它在一个驱动器上保存校验信息,并以RAID 0方式将数据写入其它磁盘,如图所示。因为一块磁盘是为校验信息保留的,所以阵列的大小是(N-l)*S,其中S是阵列中最小驱动器的大小。就像在 RAID 1中那样,磁盘的大小应该相等。
如果一个驱动器出现故障,那么可以使用校验信息来重建所有数据。如果两个驱动器出现故障,那么所有数据都将丢失。不经常使用这个级别的原因是校验信息存储在一个驱动器上。每次写入其它磁盘时,都必须更新这些信息。因此,在大量写入数据时很容易造成校验磁盘的瓶颈,所以目前这个级别的RAID很少使用了。
RAID 4 是采取独立存取模式,同时以单一专属的Parity Disk 来存放Parity Data。RAID 4的每一笔传输﹝Strip﹞资料较长,而且可以执行Overlapped I/O,因此其读取的性能很好。
2.5 RAID 5特点与应用;
在希望结合大量物理磁盘并且仍然保留一些冗余时,RAID 5 可能是最有用的 RAID 模式。RAID 5可以用在三块或更多的磁盘上,并使用0块或更多的备用磁盘。就像 RAID 4一样,得到的 RAID5 设备的大小是(N-1)*S。
RAID5 与 RAID4 之间最大的区别就是校验信息均匀分布在各个驱动器上,如图4所示,这样就避免了RAID 4中出现的瓶颈问题。如果其中一块磁盘出现故障,那么由于有校验信息,所以所有数据仍然可以保持不变。如果可以使用备用磁盘,那么在设备出现故障之后,将立即开始同步数据。如果两块磁盘同时出现故障,那么所有数据都会丢失。RAID5 可以经受一块磁盘故障,但不能经受两块或多块磁盘故障。
RAID 5也是采取独立存取模式,但是其Parity Data 则是分散写入到各个成员磁盘驱动器,因此,除了具备Overlapped I/O 多任务性能之外,同时也脱离如RAID 4单一专属Parity Disk的写入瓶颈。但是,RAI?D 5在座资料写入时,仍然稍微受到"读、改、写过程"的拖累。
2.6 RAID 0+1﹝RAID 10﹞的特点与应用;
RAID 0+1/RAID 10,综合了RAID 0 和 RAID 1的优点,适合用在速度需求高,又要完全容错,当然经费也很多的应用。 RAID 0和RAID 1的原理很简单,合起来之后还是很简单,我们不打算详细介绍,倒是要谈谈,RAID 0+1到底应该是 RAID 0 over RAID 1,还是RAID 1 over RAID 0,也就是说,是把多个RAID 1 做成RAID 0,还是把多个 RAID 0 做成RAID 1?
(RAID 1) B = Drive B1 + Drive B2 (Mirrored)
RAID 0 = (RAID 1) A + (RAID 1) B (Striped)
(RAID 0) B = Drive B1 + Drive B2 (Striped)
RAID 1 = (RAID 1) A + (RAID 1) B (Mirrored)
3. 怎样选择Raid级别;
RAID 012345 到底哪一种适合你,不只是成本问题,容错功能和传输性能的考虑以及未来之可扩充性都应该符合应用的需求。
RAID 在市场上的的应用,已经不是新鲜的事儿了,很多人都大略了解RAID的基本观念,以及各个不同RAID LEVEL 的区分。但是在实际应用 面,我们发现,有很多使用者对于选择一个合适的RAID LEVEL,仍然无法很确切的掌握,尤其是对于RAID 0+1 (10),RAID 3, RAID 5之间的选择取舍,更是举棋不定。
3.1 RAID条切“striped”的存取模式;
在使用数据条切﹝Data Stripping﹞ 的RAID 系统之中,对成员磁盘驱动器的存取方式,可分为两种:
独立存取﹝Independent Access﹞
3.2 平行存取模式;
并行存取模式支持里,是把所有磁盘驱动器的主轴马达作精密的控制,使每个磁盘的位置都彼此同步,然后对每一个磁盘驱动器作一个很短的I/O数据传送,如此一来,从主机来的每一个I/O 指令,都平均分布到每一个磁盘驱动器。
3.2.1 并行存取的基本工作原理;
假设RAID中共有四部相同规格的磁盘驱动器,分别为磁盘驱动器A、B、C和D,我们在把时间轴略分为T0、T1、T2、T3和T4:
T1: RAID控制器将第二笔数据传送到B的Buffer,A开始把Buffer中的数据写入扇区,磁盘驱动器C和D的Buffer都是空的,在等待中
T2: RAID控制器将第三笔数据传送到C的Buffer,B开始把Buffer中的数据写入扇区,A已经完成写入动作,磁盘驱动器D和A的Buffer都是空的,在等待中
T3: RAID控制器将第四笔数据传送到D的Buffer,C开始把Buffer中的数据写入扇区,B已经完成写入动作,磁盘驱动器A和B的Buffer都是空的,在等待中
T4: RAID控制器将第五笔数据传送到A的Buffer,D开始把Buffer中的数据写入扇区,C已经完成写入动作,磁盘驱动器B和C的Buffer都是空的,在等待中
3.2.2 并行存取RAID的最佳应用;
并行存取RAID之架构,以其精细的马达控制和分布之数据传输,将数组中每一个磁盘驱动器的性能发挥到最大,同时充分利用Storage Bus的频宽,因此特别适合应用在大型、数据连续的档案存取应用,例如:
数据仓储系统
多媒体数据库
电子图书馆
印前或底片输出档案服务器
其它大型且连续性档案服务器
3.3 独立存取模式;
相对于并行存取模式,独立存取模式并不对成员磁盘驱动器作同步转动控制,其对每个磁盘驱动器的存取,都是独立且没有顺序和时间间格的限制,同时每笔传输的数据量都比较大。因此,独立存取模式可以尽量地利用overlapping 多任务、Tagged Command Queuing等等高阶功能,来" 隐藏"上述磁盘驱动器的机械时间延迟﹝Seek 和Rotational Latency﹞。
3.3.1 独立存取RAID的最佳应用;
多使用者数据库
ERM及MRP 系统
小文件之文件服务器
4. 创建和维护Raid;
4.1 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的配置信息,该参数不能单独使用,只能配置其它参数才能使用。
4.1.1 创建分区;
【实例1】
root@xiaop-laptop:/# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won't be recoverable.
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
Command (m for help): n #按n创建新分区
Command action
e extended
p primary partition (1-4) #输入p 选择创建主分区
p
Partition number (1-4): 1 #输入 1 创建第一个主分区
First cylinder (1-102, default 1): #直接回车,选择分区开始柱面这里就从 1 开始
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-102, default 102):
Using default value 102
Command (m for help): w #然后输入w写盘
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
全部做完后,运行 fdisk -l 应该可以看到如下信息:
Disk /dev/sdb: 214 MB, 214748160 bytes
64 heads, 32 sectors/track, 204 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 1 204 208880 fd Linux raid autodetect
Disk /dev/sdc: 214 MB, 214748160 bytes
64 heads, 32 sectors/track, 204 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Device Boot Start End Blocks Id System
/dev/sdc1 1 204 208880 fd Linux raid autodetect
Disk /dev/sdd: 214 MB, 214748160 bytes
64 heads, 32 sectors/track, 204 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Device Boot Start End Blocks Id System
/dev/sdd1 1 204 208880 fd Linux raid autodetect
4.1.2 创建RAID 5;
创建完/dev/sdb1、/dev/sdc1、/dev/sdd1、/dev/sde1四个分区后,下面就可以来创建RAID 5了,其中设定/dev/sde1作为备用设备,其余为活动设备,备用设备的作用是一旦某一设备损坏可以立即使用备用设备替换。操作命令如下:
root@xiaop-laptop:/# mdadm --create /dev/md0 --level=5 --raid-devices=3 --spare-devices=1 /dev/sd[b-e]1
mdadm: array /dev/md0 started.
其中“--spare-devices=1”表示当前阵列中备用设备只有一块,即作为备用设备的“/dev/sde1”,若有多块备用设备,则将“--spare-devices”的值设置为相应的数目。成功创建完成RAID设备后,通过如下命令可以查看到RAID的详细信息:
root@xiaop-laptop:/# mdadm --detail /dev/md0
/dev/md0:
Version : 00.90.01
Creation Time : Mon Jan 22 10:55:49 2007
Raid Level : raid5
Array Size : 208640 (203.75 MiB 213.65 MB)
Device Size : 104320 (101.88 MiB 106.82 MB)
Raid Devices : 3
Total Devices : 4
Preferred Minor : 0
Persistence : Superblock is persistent
Update Time : Mon Jan 22 10:55:52 2007
State : clean
Active Devices : 3
Working Devices : 4
Failed Devices : 0
Spare Devices : 1
Layout : left-symmetric
Chunk Size : 64K
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 33 1 active sync /dev/sdc1
2 8 49 2 active sync /dev/sdd1
3 8 65 -1 spare /dev/sde1
UUID : b372436a:6ba09b3d:2c80612c:efe19d75
Events : 0.6
4.1.3 创建RAID的配置文件;
RAID的配置文件名为“mdadm.conf”,默认是不存在的,所以需要手工创建,该配置文件存在的主要作用是系统启动的时候能够自动加载软RAID,同时也方便日后管理。“mdadm.conf”文件内容包括:由DEVICE选项指定用于软RAID的所有设备,和ARRAY选项所指定阵列的设备名、RAID级别、阵列中活动设备的数目以及设备的UUID号。生成RAID配置文件操做如下:
root@xiaop-laptop:/# mdadm --detail --scan > /etc/mdadm.conf
但是当前生成“mdadm.conf”文件的内容并不符合所规定的格式,所以也是不生效的,这时需要手工修改该文件内容为如下格式:
root@xiaop-laptop:/# vi /etc/mdadm.conf
DEVICE /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
ARRAY /dev/md0 level=raid5 num-devices=3 UUID=b372436a:6ba09b3d:2c80612c:efe19d75
如果没有创建RAID的配置文件,那么在每次系统启动后,需要手工加载软RAID才能使用,手工加载软RAID的命令是:
root@xiaop-laptop:/# mdadm --assemble /dev/md0 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
mdadm: /dev/md0 has been started with 3 drives and 1 spare.
4.1.4 创建文件系统;
接下来就只需要在RAID设备上创建文件系统就可使用了,在RAID设备上创建文件系统和在分区或磁盘上创建文件系统的方法一样。在设备“/dev/md0”上创建ext3的文件系统命令如下:
root@xiaop-laptop:/# mkfs.ext3 /dev/md0
创建完文件系统后,将该设备挂载上就可正常的使用了。如果要创建其它级别的RAID,其步骤和创建RAID 5基本都一样,区别在于指定“--level”值的时候,需要将该值设置为相应的级别。
4.2 维护软RAID;
软RAID虽然很大程度上能保证数据的可靠性,但是在日常的工作中,有时可能需要对RAID进行调整以及不排除RAID设备物理介质损坏的可能等相关问题
4.2.1 模拟故障磁盘;
在实际中,当软RAID检测到某个磁盘有故障时,会自动标记该磁盘为故障磁盘,并停止对故障磁盘的读写操作,所以这里需要将/dev/sdc1标记为出现故障的磁盘,命令如下:
root@xiaop-laptop:/# mdadm /dev/md0 --fail /dev/sdc1
mdadm: set /dev/sdc1 faulty in /dev/md0
root@xiaop-laptop:/# cat /proc/mdstat
Personalities : [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/sec
unused devices: <none>
以上信息表明阵列正在重建,当一个设备出现故障或被标记故障时,相应设备的方括号后将被标以(F),如“sdc1[4](F)”,其中“[3/2]”的第一位数表示阵列所包含的设备数,第二位数表示活动的设备数,因为目前有一个故障设备,所以第二位数为2;这时的阵列以降级模式运行,虽然该阵列仍然可用,但是不具有数据冗余;而“[U_U]”表示当前阵列可以正常使用的设备是/dev/sdb1和/dev/sdd1,如果是设备“/dev/sdb1”出现故障时,则将变成[_UU]。
root@xiaop-laptop:/# cat /proc/mdstat
Personalities : [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>
4.2.2 移除故障磁盘;
既然“/dev/sdc1”出现了故障,当然要移除该设备,移除故障磁盘的操作如下:
root@xiaop-laptop:/# mdadm /dev/md0 --remove /dev/sdc1
mdadm: hot removed /dev/sdc1
其中“—remove”表示移除指定RAID设备中的某个磁盘,也可用“-r”来代替该参数。
4.2.3 添加新硬盘;
在添加新的硬盘前,同样需要对新硬盘进行创建分区的操作,例如,添加新硬盘的设备名为“/dev/sdc1”,则具体操作如下:
root@xiaop-laptop:/# mdadm /dev/md0 --add /dev/sdc1
mdadm: hot added /dev/sdc1
其中“--add”与前面的“--remove”其义刚好相反,用于将某个磁盘添加到指定的设备中,也可用“-a”代替该参数。
root@xiaop-laptop:/# mdadm --detail /dev/md0
/dev/md0:
……
……
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 65 1 active sync /dev/sde1
2 8 49 2 active sync /dev/sdd1
3 8 33 -1 spare /dev/sdc1
UUID : b372436a:6ba09b3d:2c80612c:efe19d75
Events : 0.133
5. 关于本文;
本文仅仅简单介绍了Raid,属于最基本的入门介绍,没有涉及到高级应用,如果想深入了解请参考其它相关文档;