安装程序实现软件RAID代替硬件RAID的方法,今天再进一步谈谈手动创建软RAID和日常维护的方法。 mdadm使用的也是md驱动,由于其拥有多种模式,而且单一工具,不依赖任何配置文件,是替代raidtools的好工具。目前几乎所有发行版本使用的都是该工具。
RAID 是冗余磁盘阵列(Redundant Array of Inexpensive Disk)的简称。它是把多个磁盘组成一个阵列,当作单一磁盘使用。它将数据以分段(striping)的方式分散存储在不同的磁盘中,通过多个磁盘的同 时读写,来减少数据的存取时间,并且可以利用不同的技术实现数据的冗余,即使有一个磁盘损坏,也可以从其他的磁盘中恢复所有的数据。简单地说,其好处就 是:安全性高、速度快、数据容量大。
RAID 0 全称叫做Striped Disk Array without Fault Tolerance( 没有容错设计的条带磁盘阵列)。图中一个圆柱就是一块磁盘(以下均是),它们并联在一起。从图中可以看出,RAID 0在存储数据时由RAID 控制器(硬件或软件)分割成大小相同的数据条,同时写入阵列中的磁盘。如果发挥一下想象力,你会觉得数据象一条带子横跨过所有的阵列磁盘,每个磁盘上的条带深度则是一样的。
至于每个条带的深度则要看所采用的RAID 类型,在NT 系统的软RAID 0等级中,每个条带深度只有64KB 一种选项,而在硬RAID 0等级,可以提供8、16、32、64 以及128KB 等多种深度参数。Striped 是RAID 的一种典型方式,在很多RAID 术语解释中,都把Striped 指向RAID 0。在读取时,也是顺序从阵列磁盘中读取后再由RAID 控制器进行组合
这样,数据就等于并行的写入和读取,从而非常有助于提高存储系统的性能。对于两个硬盘的RAID 0系统,提高一倍的读写性能可能有些夸张,毕竟要考虑到也同时缯加的数据分割与组合等与RAID 相关的操作处理时间,但比单个硬盘提高50% 的性能是完全可以的。
不过,RAID 0还不能算是真正的RAID,因为它没有数据冗余能力。由于没有备份或校验恢复设计,在RAID 0阵列中任何一个硬盘损坏就可导致整个阵列数据的损坏,因为数据都是分布存储的。
对比RAID 0等级,存储工程师能发现硬盘的内容是两两相同的。这就是镜像――两个硬盘的内容完全一样,这等于内容彼此备份。比如阵列中有两个硬盘,在写入时,RAID 控制器并不是将数据分成条带而是将数据同时写入两个硬盘。这样,其中任何一个硬盘的数据出现问题,可以马上从另一个硬盘中进行恢复。注意,这两个硬盘并不是主从关系,也就是说是相互镜像/恢复的。
RAID 1 已经可以算是一种真正的RAID 系统,它提供了强有力的数据容错能力,但这是由一个硬盘的代价所带来的效果,而这个硬盘并不能增加整个阵列的有效容量RAID 0磁盘阵列的数据映射 上图显示了RAID 0磁盘阵列的虚拟设备是如何映射到单个的成员磁盘的,一般情况下,虚拟设备的容量是成员磁盘容量的总和。
假如RAID 0磁盘阵列的磁盘失败,那么,数据将彻底丢失。为了在RAID 0磁盘阵列情况下恢复数据,唯一的办法是使用磁带备份或者镜像拷贝。
典型的RAID 0使用独立访问的方法将数据分块,然后发送给成员磁盘,而不是使用并行访问方法,它能实现多个I / O操作同时并行地处理。因为RAID 0不需要计算校验,因而,它是所有类型的阵列中吞吐量最快的。
创建软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的配置信息,该参数不能单独使用,只能配置其它参数才能使用。
-a 记住,一般在系统中有md0这个设备,但是没有md1,md3等其他设备,所以在创建md1或者其他raid 的时候要加上参数 -a yes,否则会报错没有这个文件
下面将通过一个实例来讲述通过mdadm如何实现软RAID的功能。
-c, --chunk=: Specify chunk size of kibibytes. RHEL 6.X或和CentOS 6.X缺省为512KB
Chunk:可以理解为raid分储数据时每个数据段的大小(通常为32/64/128/256/512等这类数字大小);合理的选择chunk大小非常重要,若chunk过大可能一块磁盘上的带区空间就可以满足大部分的I/O操作,使得数据的读写只局限于一块硬盘上,这便不能充分发挥RAID并发的优势;如果chunk设置过小,任何很小的I/O指令都 可能引发大量的读写操作,不能良好发挥并发性能,占用过多的控制器总线带宽,也影响了阵列的整体性能。所以,在创建带区时,我们应该根据实际应用的需要,合理的选择带区大小。
chunk 表示的是给每个盘一次写这么多数据
stride=size of chunk /size of block 表示的是在一个磁盘上每次写这么多数据 步幅
配置raid 0
[root@mail ~]# fdisk -l|grep ^\/dev/
/dev/sda1 * 1 38 305203+ 83 Linux
/dev/sda2 39 3790 30137940 83 Linux
/dev/sda3 3791 3916 1012095 82 Linux swap / Solaris
/dev/sdb1 1 1305 10482381 83 Linux
/dev/sdc1 1 1305 10482381 83 Linux
/dev/sdd1 1 130 1044193+ 83 Linux
/dev/sde1 1 261 2096451 83 Linux
/dev/sdf1 1 261 2096451 83 Linux
/dev/sdg1 1 652 5237158+ 83 Linux
[root@mail ~]# mdadm -C /dev/md0 -l 0 -n 2 --chunk=64 /dev/sdb1 /dev/sdc1
mdadm: /dev/sdb1 appears to contain an ext2fs file system
size=10482380K mtime=Thu Jan 1 08:00:00 1970
mdadm: /dev/sdc1 appears to contain an ext2fs file system
size=10482380K mtime=Thu Jan 1 08:00:00 1970
Continue creating array? yes
mdadm: array /dev/md0 started.
[root@mail ~]# mkfs.ext3 /dev/md0
[root@mail ~]# mount /dev/md0 /os/