RAID概念

RAID管理
什么是RAID呢?全称是 “A Case for Redundant Arrays of Inexpensive Disks (RAID)”,在1987年,由加州大学伯克利大学发表的论文而来,其实就是这个标题的缩写就是RAID;中译为“磁盘阵列”;
RAID就是把几个物理磁盘组合在一起成为一个大的虚拟物理磁盘,主要目的和用途主要有:把若干小容量物理磁盘组成一个大容量虚拟存储设备(以前的物理磁盘的容量都比较小);提高物理存储效率(读、写),或提供冗余以提高数据存储的安全性。

根据应用方向的不同,RAID也分不不同级别 ,有LINEAR、RAID0、RAID1、RAID5、RAID10、RAID4、RAID6、MULTIPATH。常用的有RAID0、RAID1、RAID5、RAID10(其实就是0+1)、LINEAR


硬件RAID和软RAID
RAID 还分为硬件RAID 和软件RAID,硬件RAID是通过RAID 卡来实现的,而软件RAID是通过软件来实现的;在企业级应用领域,大部份都是硬件RAID。而软件RAID由于性价比高,大多被中小型企业所采用;
硬件RAID是通过RAID卡把若干同等容量大小的硬盘,根据使用方向的不同,聚合起来成为一个大的虚拟RAID设备(或RAID0,或RAID1,或者RAID5,或RAID10……),如果每个硬盘容量不一致,以最小容量的硬盘为基础;它的成员是整个硬盘;
软RAID是软把若干同等容量大小的硬盘或分区,根据使用方向的不同,聚合起来成为一个大的虚拟RAID设备(或RAID0,或RAID1,或者RAID5,或RAID10……),如果每个硬盘或分区容量不一致,以最小容量的硬盘或分区为基础。软RAID的成员是整个硬盘或分区;
RAID 总的来说还是应用在生产型项目领域中,一般在商用办公或个人娱乐应用并未被大规模采用。应有领域大多要求性价比级的低端服务器或PC-SERVER, 虽然来说可以用软件模拟实现raid,但是相对对磁盘控制的功能及性能不如硬件实现的好,生产环境中最好使用硬件raid;

RAID 的级别及特点
RAID 有几种级别,LINEAR,RAID0 (striping), RAID1 (mirroring), RAID4, RAID5, RAID6, RAID10, MULTIPATH, and FAULTY.其中我们常用有RAID0、RAID1、RAID5、RAID10。
下面我们说说常用的RAID0、RAID1、RAID5以及RAID10;

RAID0及特点


 

RAID0 是把两个或两个以上的容量相同的硬盘或分区,通过RAID控制器(硬RAID是通过RAID卡来实现的,软RAID 是通过软件来实现的),结合为一个在容量上是RAID0下成员的容量的总和,在写入时,要向每个硬盘或分区同时写入数据。
在硬RAID中,RAID0的成员是以整个硬盘为单位的,把两个硬盘或两个以上的硬盘通过RAID卡绑定成为一个虚拟的磁盘设备,而每个硬盘就是RAID0的成员;
在软RAID0中,RAID0的成员是整个硬盘或分区,容量是加入RAID0的所有成员容量的总和。在RAID0中每个成员的容量都是相同一致的。比如我们把 /dev/sdb 、/dev/sdc、/dev/sdd 三个容量大小为80G的硬盘做成RAID0,这时RAID0设备的容量就是三个硬盘的总和 80x3=240G。当然我们也可以,在写入数据时,系统要向每个硬盘同时写入数据,是以条块的形式写入。比如我们存一份数据linuxsir.tar.gz 到RAID0的设备中,这份数据是分拆成若干份被分散的写入到RAID0中的每个成员中。只有RAID0中的每个成员正常运行,并且RAID0也正常运行的情况下,这份数据才是完整的。RAID0中任何一个成员(硬盘分区)有有问题时,RAID0便不能运行,同时数据也不是完整的;
RAID0 在读写速度上是比较快的,是普通不做RAID的两倍左右(注:实际速度和机器的硬件配置有关),所以RAID0常被用于对存储效率要求较高,但对数据安全性要求不高的应用解决方案中;
安全性:RAID0中有任何一个成员出现故障,整个RAID0就不能被激活。数据不能保障;


RAID1及特点


扫描二维码关注公众号,回复: 2558826 查看本文章

RAID1就是把若干相同容量的硬盘或分区,成员与成员之间是镜像关系。在容量上,RAID1设备是单个成员的容量。比如两个80G的硬盘做成RAID1,这个RAID1的设备容量仍是80G。比如我们写入一个份数据linuxsir.tar.bz2 到RAID1设备时,其实是向RAID的每个成员都写了一份。比如RAID1设备下有两个成员/dev/sdb和/dev/sdc ,我们写入linuxsir.tar.bz2 到RAID1时,/dev/sdb和/dev/sdc都有一份完整的linuxsir.tar.bz2。 所以RAID1是冗余的阵列,一般被用于安全性要求比较高的应用中。

因为RAID1在由于镜像冗余,所以磁盘利用效率并不高,或者说是“浪费”。这种方案相对来说性价比并不高,一般很少应用。数据读写效率要比RAID0慢。
安全性:RAID1 中只要有一个成员是健康的,RAID1完全可以激活,而且数据绝对是完整安全的。如果所有的成员有故障,RAID1也就报废了。哈哈,这不是废话吗?

RAID5及特点



RAID5也是冗余安全的,RAID5是把至少三个硬盘或分区通过软件虚拟成为一个大的存储设备。在容量上是(n-1)x单个硬盘(分区)容量 ,比如我们用三块80G硬盘做成RAID5,

容量就是两块容量的和160G。在写入上,数据被分拆成若干份,分别向RAID5的每个成员下写入。比如把linuxsir.tar.bz2写入RAID5时, 要先把linuxsir.tar.bz2分拆成若干份,分别写入RAID5成员中。因为涉及到冗余,所以数据在读入速度上并不是很快,没办法和RAID0相比,但RAID5的写入数据速度没有RAID1和RAID0快,也没有不做RAID的磁盘写入速度要快;
因为RAID5在容量损失比较小,有冗余安全保障,另外写入速度比较快,从整体上来看,性价比比较高,所以被大范围内采用;
安全性:当RAID5中的成员中有一个发生故障时,RAID5一样能启动和正常运行,只要n-1(注n>3)块硬盘或分区的不出故障,RAID5上的数据就是安全,对于一个文件存到RAID5设备中,只有成员是n-1(注n>3)无故障时,这份文件才是完整的。 比如RAID5有四个硬盘(或分区)做的,当一个硬盘或分区挂掉了,并不影响整个RAID5上数据的完整性和安全性。

RAID10及特点


RAID10也是冗余安全阵列,是RAID0+1的集成,RAID10是把至少四个硬盘或分区通过软件虚拟成为一个大的存储设备。在容量是:n/2x单个硬盘(分区)容量 ,比如我们用四块80G硬盘做成RAID5,容量就是两块容量的和4/2x80=160G。做RAID10所需要的硬盘或分区个数是偶数的。
RAID10,有RAID1的镜像特点,还有RAID0的速度。可以这么理解RAID10,比如有四个硬盘做成的RAID10,过程是先把每两个硬盘做成RAID1,然后再两个RAID1的基础上再做成RAID0。从理论上来说,RAID10应该继承RAID0的速度和RAID1的冗余安全。但经过我在软RAID0、RAID1、RAID5、RAID10的测试过程中发现RAID10的写入速度是最慢的,测试方法是用超过1G的大文件几盘复制。结果发现速度由高低的顺序是:RAID0> RAID>RAID1>RAID5>RAID10

下面图仅作参考

类型 磁盘及容量 读写性能 安全性 磁盘利用率 成本 应该方面
raid0  一个或多个硬盘,总磁盘容量 最好,(并行提高性能) 最差(无保障) 最高 最低 个人用户
raid1 两个或2*n以上,总磁盘容量50% 读和单个磁盘无分别,写则要写两边 最高(提供数据的百分之百备份) 差(50%) 最高 适用于存放重要数据,如服务器和数据库存储等领域。
raid5  硬盘数:三个或更多
容量:(n-1)/n的总磁盘容量(n为磁盘数)
读:RAID5=RAID0(相近似的数据读取速度)
写:RAID5<对单个磁盘进行写入操作(多了一个奇偶校验信息写入)
RAID5<RAID1 RAID5>RAID1 RAID5>RAID1 是一种存储性能、数据安全和存储成本兼顾的存储解决方案。
raid0+1 硬盘数:四个或4*N个
容量:总磁盘容量的50%
读:RAID10=RAID0
写:RAID10=RAID1
RAID10=RAID1 RAID10=RAID1(50%) RAID10=RAID1 集合了RAID0,RAID1的优点,但是空间上由于使用镜像,而不是类似RAID5的“奇偶校验信息”,磁盘利用率一样是50%

在Linux中,软RAID的创建和管理
在Linux中,软RAID是通mdadm来创建和管理的,mdadm 是一个专用创建和管理RAID的软件,在Linux中,大多发行版本已经默认安装,mdadm能创建任何级别的软RAID;
RedHat已经内置了该工具;官方最新的版本应该是3.3,需要最新版本可以到官方网站下载或http://www.kernel.org/pub/linux/utils/raid/mdadm/下载源码包进行编译安装
在本节中,RAID创建并不是目的,我们还要查看学会RAID的状态,启动、停止RAID。还要学会使用RAID。所以RAID的使用应该包括创建、管理和使用。 RAID的使用就是在RAID设备上创建文件系统,然后供存储应用;

mdadm参数解析
选择一个模式的选项:(Options for selecting a mode) -A, --assemble: 加入并开启一个以前定义的阵列 -B, --build: 创建一个没有超级块的阵列(Build a legacy array without superblocks.) -C, --create: 创建一个新的阵列 -F, --follow, --monitor:选择监控(Monitor)模式 -G, --grow: 改变激活阵列的大小或形态 -I, --incremental: 添加一个单独的设备到合适的阵列,并可能启动阵列 --auto-detect: 请求内核启动任何自动检测到的阵列
不特定于一个模式的选项:(Options that are not mode-specific) -c, --config=: 指定配置文件,缺省为 /etc/mdadm.conf -s, --scan: 扫描配置文件或 /proc/mdstat以搜寻丢失的信息。默认配置文件:/etc/mdadm.conf -h, --help: 帮助信息,用在以上选项后,则显示该选项信息

-v, --verbose: 显示细节,一般只能跟 --detile 或 --examine一起使用,显示中级的信息; -b, --brief: 较少的细节。用于 --detail 和 --examine 选项 --help-options: 显示更详细的帮助 -V, --version: 版本信息 -q,--quit: 安静模式;加上该选项能使mdadm不显示纯消息性的信息,除非那是一个重要的报告; create build 或grow时使用的选项: -n, --raid-devices=: 指定阵列中活动的device数目,不包括spare磁盘,这个数目只能由--grow修改 -x, --spare-devices=:指定初始阵列的冗余device 数目即spare device数目; -c, --chunk=: Specify chunk size of kibibytes. 缺省为 64. chunk-size是一个重要的参数,决定了一次向阵列中每个磁盘写入数据的量
(Chunk :,可 以理解为raid分储数据时每个数据段的大小(通常为32/64/128等这类数字大小);合理的选择chunk大小非常重要,若chunk过大可能一块 磁盘上的带区空间就可以满足大部分的I/O操作,使得数据的读写只局限于一块硬盘上,这便不能充分发挥RAID并发的优势;如果chunk设置过小,任何 很小的I/O指令都 可能引发大量的读写操作,不能良好发挥并发性能,占用过多的控制器总线带宽,也影响了阵列的整体性能。所以,在创建带区时,我们应该根据实际应用的需要, 合理的选择带区大小。)

-z, --size=:组建RAID1/4/5/6后从每个device获取的空间总数;但是大小必须为chunk的倍数,还需要在每个设备最后给RAID的superblock留至少128KB的大小。 --rounding=: Specify rounding factor for linear array (==chunk size) -l, --level=: 设定 raid level.raid的几倍 --create: 可用:linear, raid0, 0, stripe, raid1,1, mirror, raid4, 4, raid5, 5, raid6, 6, multipath, mp. --build: 可用:linear, raid0, 0, stripe. -p, --layout=:设定raid5 和raid10的奇偶校验规则;并且控制故障的故障模式;其中RAID-5的奇偶校验可以在设置为::eft-asymmetric, left-symmetric, right-asymmetric, right-symmetric, la, ra, ls, rs.缺省为left-symmetric --parity: 类似于--layout= --assume-clean:目前仅用于 --build 选项 -R, --run: 阵列中的某一部分出现在其他阵列或文件系统中时,mdadm会确认该阵列。此选项将不作确认。 -f, --force: 通常mdadm不允许只用一个device 创建阵列,而且此时创建raid5时会使用一个device作为missing drive。此选项正相反 -N,--name=: 设定阵列的名称

管理模式选项(For Manage mode): -a, --add: 添加列出的设备到一个工作的阵列中;当阵列处于降级状态(故障状态),你添加一个设备,该设备将作为备用设备并且在该备用设备上开始数据重建。 -r, --remove:从阵列中移除列出的设备,并且该设备不能处于活动状态(是冗余盘或故障盘);

-f,--fail:将列出的设备标记为faulty状态,标记后就可以移除设备;(可以作为故障恢复的测试手段) --set-faulty:同上
监控模式选项(For Monitor mode): -m, --mail: 设置一个mail地址,在报警时给该mail发信;该地址可写入conf文件,在启动阵列是生效 -p, --program, --alert:当检测到一个事件时运行一个指定的程序 -y, --syslog: 设置所有的事件记录于syslog中 -t, --test: 给启动时发现的每个阵列生成test警告信息;该信息传递给mail或报警程序;(以此来测试报警信息是否能正确接收) MISC模式选项: Usage: mdadm options ... devices ... -Q, --query: 查看一个device,判断它为一个 md device 或是 一个 md 阵列的一部分 -D, --detail: 打印一个或多个md device 的详细信息 -E, --examine:打印 device 上的 md superblock 的内容


RAID的创建
流程是:
[RAID创建]->[RAID管理]->[RAID的使用]
|
[RAID的维护]
创建RAID有两个方法 :
第一种方法 :用mdadm 通过-C或--create 参数来创建RAID。这种方法 ,是把RAID信息写到每个RAID成员的 superblocks(超级块)中,在每个RAID成员的超级块中,都会记录RAID的级别、成员、RAID的UUID等…… 这种方法把RAID的信息记录在各个成员的 superblocks(超级块)中。这种方法对于重装系统或系统发生灾难来来说,有利于现有RAID的恢复;这种方法是最常用的;
第二种方法:用mdadm 通过-B或--build 参数来创建RAID。这种方法并不把RAID的信息写入RAID成员的 superblocks(超级块中),所以我们无法通过查看RAID成员信息来获得RAID的级别,以及RAID的成员等;这种方法对于重装系统或系统发生灾难来来说,不利于现有RAID的恢复;如果你想用第二

举例一:我们要做一个RAID0,成员是 /dev/sdb、/dev/sdc 两个硬盘设备。 我们要运行如下命令;
mdadm -C --verbose /dev/md0 -l0 -n2 /dev/sdb /dev/sdc

mdadm -C --verbose /dev/md0 --level=0 --RAID-devices=2 /dev/sdb /dev/sdc
如果我们想把/dev/sdb1 、/dev/sdc1和/dev/sdd1三个分区做成RAID0呢?
mdadm -C -v /dev/md0 -l0 -n3 /dev/sd[bcd]1

mdadm -C --verbose /dev/md0 --level=0 --RAID-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1
举例二:我们要做一个RAID5 ,成员是/dev/sdb、/dev/sdc、/dev/sdd 三个设备,我们要运行如下命令;
mdadm -C -v /dev/md0 -l5 -n3 /dev/sd[bcd]

mdadm -C --verbose /dev/md0 --level=5 --RAID-devices=3 /dev/sdb /dev/sdc /dev/sdd
如果我们想把/dev/sdb1 、/dev/sdc1和/dev/sdd1三个分区做成RAID5呢?
mdadm -C -v /dev/md0 -l5 -n3 /dev/sd[bcd]1

mdadm -C --verbose /dev/md0 --level

mdadm -C --verbose /dev/md0 --level=5 --RAID-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1
创建完成后,RAID也就立即启动了。我们会发现有类似如下一行的提示信息:
mdadm: array /dev/md0 started.
我们要可以通过下面的命令来查看RAID的信息;
mdadm -Ds /dev/md0
mdadm -D /dev/md0
管理RAID
RAID的管理包括创建、启动、状态查看等一系列工具
RAID的启动方法
第一种方法:不通过读取mdadm.conf来启动RAID;适用情况是你没有配置 /etc/mdadm.conf 文件
语法:

mdadm -A RAID设备 RAID成员
注:
-A 同 --assemble ,意思是激活一个已经存在的RAID;
RAID设备 ,就是/dev/md0 或/dev/md1 …… 根据你所创建的RAID设备为准;

RAID成员,就是你要启动的RAID,其下属设备有哪些,要一个一个的列出来,中间以空格分开;



举例:比如我要启动一个RAID,设备是/dev/md0,其下有成员是 /dev/sdb和/dev/sdc;所以我要用下面的办法;
#mdadm -A /dev/md0 /dev/sdb /dev/sdc
第二种方法:利用配置好的/etc/mdadm.conf 来启动RAID
mdadm -A RAID设备

mdadm -As
注: 这种启动方法的前提是要配置 /etc/mdadm.conf文件,要把您系统中所有的RAID,都写入这个文件,然后就可以简单的用这个命令来启动了;
-A 同 --assemble ,意思是激活一个已经存在的RAID;
RAID设备 ,就是/dev/md0 或/dev/md1 …… 根据你所创建的RAID设备为准;

举例:
#mdadm -A /dev/md0
#mdadm -As
RAID管理工具一些常用参数说明
mdadm 参数 [RAID设备] [RAID成员]
-A 或 --assemble 激活一个RAID;
-S 和--stop 停止正在运行的设备;
-s 或 --scan 扫描RAID设备;
-D 或 --detail 查看RAID的详细信息;
--examine 查看RAID成员的详细信息;

举例:
# mdadm -As
# mdadm -Ss
# mdadm -Ds
# mdadm --examine /dev/sdb









猜你喜欢

转载自blog.csdn.net/make_zhf/article/details/73468647
今日推荐