目前对RAID非常感兴趣,以前总是听说或者是看到RAID XX的东西,而我总是摸不着头脑,字面吧是劫掠,袭击啊之类的,但看其后总跟着硬盘啥啥的,认为是数据劫掠技术-_-! 总之要好好学习下,永久不定期更新ing
RAID (Redundant Array of Independent Disks)
利用多个硬盘来提高系统对硬盘的读写速度及其数据安全系数的一种技术(核心的作用是提高数据的安全性和磁盘IO,和提高存储容量无关,与磁盘的简单叠加相比,有些RAID反而降低磁盘总容量,因为为了安全性进行了数据备份),有的需要RAID芯片,有的也可使用软件来搭建。
RAID分类:
RAID 0 无差错控制的带区组(strip) 最少要两块硬盘
将n个硬盘并联起来,把一大段数据分成大小一定的带去,再将带区分成n份同时写入各个硬盘,读写速度提高n倍;但没有数据差错控制功能,一旦其中一个硬盘损坏,所有数据将会可靠性低,仅等于一块硬盘的1/n,不适合执行关键任务环境;

RAID 1 镜像结构(mirror) 最少要两块硬盘
用的是磁盘镜像技术,将硬盘分成两份,一半用来做另一半的备份,在不影响性能的情况下,最大限度的保证系统的可靠性和可修复性。成本最高,利用率最低,50%,用于保存关键数据的场合;

RAID 2 带海明码校验
利用了ECC校验技术,将硬盘分成两组,分别用来存储数据和海明码将数据分散为bit分别计算其ECC代码,然后写入硬盘,如果某硬盘发生故障,能根据海明码和其余的有效数据进行恢复。硬盘利用率较低,一般用在15个硬盘以上的系统中
RAID 3 带奇偶校验码的并行传送
与2相似,只是用奇偶校验码代替了ECC,不适合需要经常写入零碎文件的场合。磁盘利用率是(n-1)/n
RAID 4 带奇偶校验码的独立磁盘结构
使用奇偶校验位来查错纠错,但对数据的读写按块来进行,读取速度比3快,写入比3慢
RAID 5 分布式奇偶校验的独立磁盘结构 最少3块硬盘
RAID 4的改进,将本来存储在一个硬盘上的奇偶校验块按一定顺序平均放到每个硬盘上

RAID 6 两种存储的奇偶校验码的磁盘结构
引入第二种奇偶校验码,对错误控制极强。速度慢,花费高,用于军队

RAID 10/01 最少要4块硬盘
分为1+0和0+1,相互补充,达到既高效又高速还可以互为镜像提高安全性的目的
JBOD模式
又称为Span,不提供容错,只是简单的硬盘容量叠加,写入数据时是先写一块,写满后再写第二块
RAID 10 与RAID 01的区别:
RAID 10是先做mirror,再做striping。而RAID 01是先striping,再mirror
假设共有4个硬盘,分两组,A和B,每组各有两个盘A1、A2;B1、B2。
RAID 10就是
A1=B1,A2=B2,A=A1+A2,B=B1+B2
RAID 01就是:
A=A1+A2,B=B1+B2,A=B
RAID 10
RAID 01
就是说对于RAID 10,A1,B1这两个磁盘同时坏,阵列才会坏;而RAID 01,A1坏时A2同时也宕,B再坏一个就都坏了。
所以RAID 10的稳定性好于RAID 01,但RAID 01的I/O要高一些,因为不需要许多跨盘操作。
在Linux中,我们使用mdadm工具来管理RAID。mdadm是Multiple Devices Admin的简称(Linux软RAID的别名就是“Multiple Devices”,简称MD)。
语法:mdadm [mode] <raid-device> [options] <component-devices>
mode有7种:
Assemble(-A),将以前的阵列加入当前阵列
Build(-B):创建没有超级块的阵列
Create(-C):创建新阵列,每个devices有superblocks
Manage:管理阵列,如add或remove
Misc:允许单独对某个阵列中某个device操作,如删除superblocks或终止运行的阵列
Follow or Monitor(-F):监控RAID 1,4,5,6和multipath的状态
Grow(-G):改变RAID容量或阵列中device数
Incremental Assembly(-I):对阵列添加单独设备,支持热添加。
-D /dev/mdx :显示/dev/mdx的详细信息
-E :显示device上的superblocks内容
-S /dev/mdx :停止mdx阵列工作
-c :设置块的尺寸,默认是64kb
-G :改变在用阵列大小和形态
-f :force
-n :创建阵列的devices个数
-l :RAID级别
-s :扫描配置文件
-Q :查看一个device是否是阵列
-x :指定hot spare盘的个数
-f /dev/sdxx :将某阵列中的sdxx停用
-r /dev/sdxx :将某个停用的device移除阵列
-a /dev/sdxx :将某硬盘加入阵列
eg:v是显示创建信息,阵列名是md0,强制进行,superblocks是128kb,RAID 5阵列,4块硬盘,其中1个是热备盘,阵列中的4个硬盘分别是sd[a-d]1
mdadm -Cv /dev/md0 -f -c128 -l5 -n4 -x1 /dev/sd[a-d]1
创建完成后可以是使用命令:
mdadm -D /dev/md0
cat /proc/mdstat
查看阵列情况
要让阵列开机启动,需要修改/etc/fstab文件,将mdx加入
下面主要谈谈服务器环境下具体的RAID模式选择,因为当你面前摆放一台实际的企业服务器并需要安装系统时,首先需要进行规划的就是硬盘的RAID模式。
第一点,在企业应用上,基本可以忽略RAID 0这个级别,因为它虽然本身数据读写较快,但它的安全性极低,任何一块盘的小错误就可能导致数据失效,所以在通常情况下,RAID 0级别的使用概率是1%。
第二点,对于资金较为充裕的企业,并且配置RAID的服务器没有特别巨大的pv压力(这里说明的情况较为模糊,大体上可以根据使用服务器的人数来进行判断),可以选择RAID 1级别,因为它的安全性非常高,读写速度也很快,RAID 1级别的使用率是45%。
第三点,对于访问量极高,数据价值大的服务器,应该是选择RAID 10级别,在数据安全性和访问上进行了必要的平衡(当然现在都是使用SAN)。通常情况下RAID 10级别的使用率是45%。
第四点,对于一些特殊的用途,如军队、国防,也有使用RAID 6的时候,提供双重的数据保护功能。RAID 6级别的使用率是9%。
接下来记录一下配置RAID时的注意问题:
1、RAID的配置是在服务器硬盘划分程序的第一步;而且RAID是配置在分区上的,而不是直接的空白磁盘上的(意思是分区程序直接识别的sda,sdb是不能配置RAID的,必须将他们划分出具体的分区如sda1,sdb2等);
2、在划分具体分区的时候,不要选择格式化,不要挂载,唯一要选的是分区使用标识,选择RAID标识;
3、然后就可以使用这些被标识为RAID的分区来创建RAID;
RAID 0最少2块,
RAID 1最少2块,
RAID 5最少3块,
RAID 6最少4块,
RAID 10最少4块;
4、boot分区配置在RAID上时,首先要将所有构建boot RAID的磁盘分区设置为主分区,并且添加Bootable标示。boot不适合配置在RAID 10上,一般将boot分区放在RAID 1上。如果将boot分区放在RAID 0或者5上,则需要手动设置bootloader,不推荐。
5、swap分区如果假设在RAID上,一般使用RAID 0。
5、划分出的RAID盘在linux下以mdx来命名,这时就可以对其进行文件系统的创建,或者挂载,或者是继续在mdx上配置高级的LVM应用。