容许转载,转载时请务必以超连接形式标明文章 原始出处 、做者信息和本声明。不然将追究法律责任。http://shitao123.blog.51cto.com/3873637/1206313php
RAIDlinux
1、软RAID vs 硬RAID:
a> 软RAID是一个OS中物理磁盘和逻辑磁盘之间的一个抽象层,这个抽象层会耗费一些CPU资源。硬RAID则没有这个问题;
b> 硬RAID能够支持热拔插磁盘,这样带来的好处是能够在线换掉损坏的磁盘。但新一代的SATA软RAID也能够支持热拔插(拔以前先要命令行移除);
c> 硬RAID一般还有一些厂商额外提供的功能;
d> 硬RAID须要专门的独立设备,这意味着多付出钱;算法
2、半硬半软RAID,除了软RAID和硬RAID还有这种一种存在。它是把IO工做交给CPU去完成,它们通常不支持RAID5;缓存
3、组软RAID时要注意mkfs的block值和步进值(后有详述);数据结构
4、RAID 0:
a> 非嵌套式RAID中性能最好的;
b> 并不是只是2块盘能够组RAID 0,三块或更多均可以,可是性能是有边际效应的(也就是说,假设一个软盘的性能是50MB每秒,两个软盘的RAID 0性能约96MB每秒,三个软盘的RAID 0也许是130MB每秒而不是150MB每秒);
c> 容量=最小那块的磁盘的容量 x 磁盘数(有一些软件RAID能够作到不受此限制,linux的实现就能够),存储效率100%;
d> 一块盘坏,全部数据完蛋;
e> 注意:读性能并不会获得写性能那么样大的提高,主要提高的是写性能;
f> 应用场景:非关键数据、不常常写入的而又须要高速写入性能的备份数据;多线程
5、RAID 1:
a> 镜像。能够由2个以上磁盘组成,数据被复制到组里的每一块盘,只要还有一块没坏,数据就不丢失,可靠性最强;
b> 只算阵列中最小的那块盘的容量,存储效率(100/N)%,N为阵列中磁盘的数量。是全部RAID中利用率最低的;
c> 最少由2块,或者更多的磁盘组成(建议2块);
d> 写性能微小下降,读性能大幅加强(若是是软RAID须要多线程操做系统才能加强,如Linux);
e> 组内的磁盘需性能相近(最好是同样的盘),这样负载才均衡;
f> 能够做为一种热备份的方案(往RAID 1中加入磁盘,同步好后拔下来就是一个备份盘了);
g> 应用场景:要求高冗余,而对成本、性能、容量不那么敏感的场景;异步
6、RAID 2:
a> RAID 0的改良版;
b> 最少3块磁盘才能组成,
c> 将数据编码(Hamming Code)后分散到每块盘;
d> 加入ECC校验码,因此要比RAID 0多耗费一些磁盘空间;ide
7、RAID 3:
a> 也是将数据编码后分散到不一样的物理磁盘;
b> 使用Bit-interleaving(数据交错存储)的方式将数据分散;
c> 将可用于恢复的校验值写入单独的另外一块磁盘;
d> 因为使用bit分区,每读一点数据均可能须要开动读全部的磁盘,所以很适合大数据量的读取;性能
8、RAID 4:
a> 大部分是和RAID 3同样的;
b> 不一样的地方是它使用Block-interleaving而非Bit-interleaving作数据分区;
c> 不管读写什么哪块磁盘上的数据,校验盘均须要被读写,所以这块校验盘的负载明显高于其它盘,所以校验盘十分容易损坏;大数据
9、RAID 5:
a> 使用Disk Striping进行数据分区。分区的方式有左对称、左非对称、右对称,RHEL默认选择左对称,由于少一次寻址,这是读性能最高的选择;
b> 不存储数据副本,而是存储一个校验值(好比说使用XOR,实际也是XOR),当数据块丢失,根据剩下的同组的数据块和校验值来恢复数据;
c> 校验值被分散到每一块磁盘而非单独一块磁盘上,这样避免了某一块磁盘的负载明显高于或低于其余盘;
d> 至少须要2块盘来组成,性能和冗余性都有必定提高,是RAID 0和RAID 1的折中选择;
e> 存储利用率很高,为100 x (1 – 1/N)%,N为物理磁盘数量,至关于耗费一块盘的容量,可是这个耗费的容量是分散在每块盘里的,而不是某一块物理盘;
f> 性能能够经过调整条带大小来调解(分配读写条带);
g> 坏掉1块盘,还能够重建数据,但因为重建(degraded)数据须要经过校验值计算得出,所以重建过程当中性能会急剧降低。且重建是个较长的过程;
h> 应用场景:较高的读性能要求,较少的写性能要求,低成本的考虑;
10、RAID5的写入性能不好,由于每次写入实际都将触发4次(以上)的I/O,虽然cache机制会减少实际的I/O开销。过程以下:
a> 即将被写入的数据从磁盘中被读出;
b> 写入数据,但此时校验值还未更新;
c> 把同组全部块的数据都读进来,把校验块读进来;
d> 计算校验值并将新校验值写回校验块;
11、RAID 6:
a> 包括分区在内的各类机制和RAID5基本相同;
b> 不一样在于它会保存2个由不一样算法(课本上说是不一样的分组方式,如1-3算值1、2-4算值2)算出的校验值,这样就会消耗2块盘的容量(也是分散在各个盘的);
c> 最少由4块盘组成,容许同时坏2盘;
d> 冗余程度比RAID 5更高,同时写入性能比RAID 5更烂(事实上因为会引起不少次实际I/O,很是烂);
e> 存储利用率为100 x (1 – 2/N)%,N为物理磁盘数量;
f> 重建速度比RAID 5块,重建时性能优于RAID 5,重建时失败的风险比RAID 5低(RAID 5在重建过程当中因为压力很大容易再坏掉一块盘);
e> 应用场景:需求比RAID 5更高的冗余保护,需求较高读性能较低写性能,低成本的考虑;
12、RAID 7:
RAID 7并不是公开的RAID标准,而是Storage Computer Corporation的专利硬体产品名称,RAID 7是以RAID 3及RAID 4为基础所开发,可是通过强化以解决原来的一些限制。另外,在实做中使用大量的高速缓存记忆体以及用以实现异步阵列管理的专用即时处理器,使得RAID 7能够同时处理大量的IO要求,因此性能甚至超越了许多其余RAID标准的实做产品。但也由于如此,在价格方面很是的高昂。(直接摘自http://zh.wikipedia.org/wiki/RAID#RAID_7)
13、RAID 10:
a> 嵌套式RAID,可细分为1+0和0+1;
b> 须要至少4块磁盘组成,存储效率为(100/N)%,N为镜像数;
c> 性能和冗余兼顾,就是利用率稍低;
d> 建立软RAID 10时通常先建立2个RAID 1,而后在此基础上建立RAID 10;
14、嵌套式RAID通常还有RAID 50和RAID 53;
15、较少实际应用的RAID是RAID2、3、4,由于RAID5已经涵盖了所需的功能。所以RAID2、3、4大多只在研究领域有实现,而实际应用上则以RAID5或RAID6为主。
16、RAID DP(dual parity)是NetApp公司设计的系统,是使用RAID4(而非传说的RAID 6,由于它的校验盘是独立的)的设计概念,尽可能每次只与2块盘打交道。此种RAID和RAID 6同样也容许同时坏2块盘,它们开发多年的文件系统WAFL为RAID DP作了专门优化,效率高于RAID 6;
17、优化RAID参数(条带化参数):
a> 调整条带化参数对RAID有很大的影响,适用于RAID 0、RAID 5、RAID 6;
b> chunk-size。RAID写满一个chunk size才会移动到下一块磁盘去,有时候它直接就是条带化的粒度。chunk size应该是block size的整数倍;
c> 减少chunk-size意味着文件会分红更多片,分布在更多的物理磁盘上。这样会提升传输效率,可是可能会下降定位寻道的效率(有些硬件实现会等填满一个条带才真正写入,这样会抵消一些定位寻道的消耗);
d> 增大chunk-size会获得以上相反的效果;
e> stride(步进值)是类ext2文件系统的一个值,用于在类ext2数据结构里seek,它这样指定:mke2fs -E stride=N。N(也就是步进值)应该被指定为 chunk-size / filesystem block size(文件系统的block size)。(mke2fs -j-b 4096 -E stride=16 /dev/md0)
f> 以上2个值调校对了,能够提升RAID的在多个磁盘上的并行效率,从而让整个RAID的性能随物理磁盘数量提高而提高;
18、更多RAID原理可见http://blog.chinaunix.net/space.php?uid=20023853&do=blog&id=1738605;
19、软RAID的信息可在系统中如下几个地方查看:
a> /proc/mdstat。这里方便看新建、重建的进度条,以及哪块盘坏了等;
b> mdadm –detail /dev/md0。显示详细信息;
c> /sys/block/mdX/md。这里方便看到cache_size等信息(别处没有的);
20、Major/Minor号。linux系统中前者表明设备类型/驱动,后者是同种类型/驱动的多个设备在系统中的ID号;
21、RAID技术最初由IBM公司而非贝尔实验室发明(http://en.wikipedia.org/wiki/RAID#History);
22、RAID是支持在线扩容的;
23、硬盘出场基本都是有坏道的,可是厂商会预留一部分磁道(并且一般在外圈)出来以顶替坏道消耗的容量。相较而言,企业级硬盘预留的容量较家用级硬盘大,这是它更贵寿命更长的缘由之一;
24、RHEL下软RAID的配置文件(用于开机自动发现RAID)在/etc/mdadm.conf。此文件能够这么生成:mdadm–verbose –examine –scan > /etc/mdadm.conf。此文件中还需配置RAID坏了时如何mail通知管理员;
25、Critical Section中存储了RAID中数据的MeteData。它是元数据,若是它丢了,RAID中的数据就全丢了。各类RAID中,只有RAID 1的CriticalSection是写在磁盘尾上的(其它都写在磁盘头),所以RAID 1较为适合作系统盘(易恢复MeteData)。
26、软RAID重组(reshape)(比方说往里加盘,或是更改chunk size或RAID级别)时,若是想保留原数据,则备份Critical Section十分重要。重组的内部过程是这样的:
a> 将RAID设为只读;
b> 备份Critical Section;
c> 重定义RAID;
d> 成功的话删除原Critical Section,恢复可写;
27、最好手工指定CriticalSection备份位置(最好备份到将要改变的RAID以外的地方),由于若是reshape失败CriticalSection是须要手工恢复的。若是没有手工制定位置,Critical Section会被存在RAID的备盘上,若是RAID没有备盘则会存放在内存中(易丢失,危险);
28、若是RAID改变了(好比拉伸),记得之上的filesystem也要作出相应的改变(好比说拉神);
29、系统启动脚本rc.sysinit中启动服务的顺序默认是这样的:udev->selinux->time->hostname->lvm->软RAID。因此在lvm上作RAID比较合理,除非手动改启动脚本;
30、扩大RAID 5的容量,能够经过逐步把RAID 5中的每块硬盘换成更大容量的盘的方式来完成(别忘记resize filesystem);
31、同台机器上不一样的软RAID组间能够共享备盘;
32、若是要在机器间迁移软RAID,记得迁移以前要把要迁移的RAID改为一个目标机器上不存在(也就不冲突)的RAID设备名(mdX)。更名的时候能够用Minor号来指认要更名的RAID;
33、Bitmap用于记录本块物理磁盘的每一个block是否跟整个RAID同步着呢。它会被周期性地写入。启用它能够极大加快RAID的恢复过程;
34、Bitmap能够存放在RAID内或RAID外。若是告诉RAID把Bitmap存在RAID外,给的绝对路径又是在RAID内的,RAID会死锁。若是存在RAID外的话,只支持extX的文件系统;
35、在活动的RAID上加Bitmap的前提是它的Superblock是好的;
36、能够启用Write Behind机制,若是启用了Bitmap的话。这样就会在指定磁盘成功写入后就会给应用程序返回成功,另外的盘会异步写入数据,这对RAID 1特别有用;
37、RAID机制不会去主动检测坏块。只有在被迫读到坏块读不出来时它才会去尝试修复(找备块替代),要是那磁盘修复不了了(备块用光了),那就会把那块盘标志为错误,而后踢出RAID,启用备盘;
38、由于RAID对坏块是消极处理的,因此在RAID5重建的过程当中就颇有可能发现隐藏的坏块,从而致使RAID恢复失败。磁盘容量越大,此风险越大;
39、用crontab按期检查一下RAID坏块是个不错的建议。在Kernel2.6.16后咱们能够这样触发检查:echo check >> /sys/block/mdX/md/sync_action。
容许转载,转载时请务必以超连接形式标明文章 原始出处 、做者信息和本声明。不然将追究法律责任。http://shitao123.blog.51cto.com/3873637/1206313