RAID(Reduntdant Arrays of Independent Disk),中文意思为磁盘阵列。自从加州伯克利分校1988年发布论文“A Case for Redundant Array of Independent Disk”,其本意是将多块廉价的磁盘通过某种方式组合在一起来使用,以提高磁盘的I/O能力和耐用性,其中提高I/O能力主要是通过“并行读写”和增加“内存”来实现,而提高耐用性主要是通过提高“冗余能力“来实现。然而其到现在为止也并不廉价,但是磁盘的性能确的确能在某一方面或者多方面得到提升。
RAID按照广义方面分为三种:
1,内接式磁盘阵列:通过主板上自带的磁盘阵列卡来实现。
2,外接式磁盘阵列:通过扩展卡来实现(可以想象成安装独立显卡)。
3,软件实现的磁盘阵列仿真:通过软件来实现。
上面这三种1和2为硬RAID,3为软RAID。在实际的生产中不能用软RAID。在写完原理之后就会
明白的。
RAID按照其组合方式分由于(由于RAID2,RAID3,RAID6很少人使用,所以这不写):
1,RAID0,将N块磁盘组合在一起,数据在每次存储的时候分成N份分别存入这N块磁盘的Chunck
中(这个Chunck不是文件系统的data block,两者不要混淆,但是也是分成块,不然数据怎么切割
),下次接着这样存储,这样的话就大大提升了磁盘的I/O能力(读写),但是没有提高冗余能力
因为在读写的时候可以从N块磁盘中同时读写,但是一旦一块硬盘损坏,数据将全部丢失。因此请
不要在数据非常重要的上门使用0,只有在数据不是很重要,但是为了求速度的时候可以考虑。
总结:大大提高了磁盘的I/O能力,但是减小了磁盘的冗余能力,其最少使用2块磁盘来构建
磁盘空间为:N*N块磁盘中空间最小的那个。坏一块磁盘数据就全部丢失
2,RAID1,将N块磁盘分为两组,数据每次存储在第一组中的时候就会同时存一份镜像到第二
组中,这样的话就大大提高了磁盘冗余能力(因为一份数据存了两份),也提高了磁盘的“读”能
力(因为有两份数据可以同时读),但是降低了“写”能力(因为需要写两次)。
总结:提高了冗余能力,提高了读速率,降低了写速率,磁盘空间为N*N个磁盘中最小的/2
至少需要2块磁盘。最多可坏掉分对应盘的N/2块,最少坏掉对应的两块盘数据将丢失一部分
3,RAID4,将N块磁盘分两部分(不一定相等的两份),数据每次在第一部分存储数据的时候
都会在做异或运算(就是11=0,00=0,10=1,01=1),然后将结果存在第二部分的一个磁盘中,第二
部分的其他盘做空闲盘(为了在有磁盘坏掉的时候顶替上去),这样一来就有一块磁盘专门存储
校验码,大大提高了磁盘的I/O能力,但是因为只有一块磁盘存储校验码,因此其访问压力加大,
所以其成为了“短板”,当它坏了的时候,第一组磁盘也很大可能会坏,这样数据将全部丢失,注
意,这种概率还是很大的,所以其冗余能力不一定增强了,当一块磁盘坏了的时候就会自动降级。
总结:提高了读写速率,至少需要3块磁盘,磁盘空间为(N-1)*N块磁盘中最小的.坏
一块盘没事,坏两块数据将全部丢失。
3,RAID5,由于RAID4中只用一块磁盘存储异或运算的结果,大大增加了其压力,所以RAID5就
将N块磁盘循环作为校验盘,这样的话如果第一块磁盘先为校验盘则是右对称,最后一块先为校验
盘就是左对称(对称线为校验结果),这样的话就大大提高了磁盘的I/O能力和冗余能力,但是如
果同时损坏两块磁盘数据将全部丢失。
总结:提高了读写冗余能力,至少需要3块磁盘,磁盘空间为(N-1)*N块磁盘中最小的
允许坏一块磁盘,但是不能同时坏两块。
4,RAID10,将N块磁盘先按RAID1分成两组,再将这两组内分为RAID0,这样数据每存储一份
就存在俩组(RAID0)中,然后在每组内部按RAID1存一份在一个磁盘中就存一份镜像到旁边的磁盘
块中,由于同时坏相邻的两块磁盘的概率要小很多,所以这种方式比较好。
总结:提高了读写速率,提高了冗余能力,至少需要4块磁盘,磁盘可用空间为N*N块磁盘中
最小的/2.不允许坏同时坏相邻的两块磁盘。
5,RAID01,将N块磁盘先按RAID0分,然后再按RAID1分,这样的话数据每存储一份到第一组中
就会存一份镜像到第二份中,然后数据和镜像按照RAID0方式分别存到其所在组的每块磁盘中,由
于不能保证两组中的RAID0存储方式一模一样,所以只运行同时坏一块磁盘。
总结:提高了读写速率,提高了冗余。至少需要4块磁盘,磁盘空间为N*N块磁盘中最小的/2
不允许同时坏两块磁盘。
6,RAID6,与RAID5一样,只是循环两块作为校验盘。
总结:提高了容错能力,增强了读写能力,可用空间为(N-2)*最小的,最少磁盘数为4
不允许同时坏两块磁盘。
这里提一下,RAID7是一家公司的专利,其价格很贵,JBOD将多块磁盘线性组合成可以存大的
单个数据的RAID。
软RAID
通过软件的方式模拟出RAID,在Linux中使用的是mdadm这个软件,其支持JBOD,RAID0,RAID1
RAID4,RAID5,RAID51,RAID10,RAID01等等。
mdadm用法:
mdadm [模式] <RAID设备> [选项] <组建RAID的磁盘或者分区>
模式:
创建:-C
监控:-F
装配:-A
管理:-f(认为损坏),-r(移出),-a(添加)
选项:
-n:表示用几块磁盘来创建RAID(不算空闲盘)
-l:表示要创建的RAID的级别
-a{yes|no}:表示自动|不 创建RAID设备文件
-c:创建的chunck块大小
-x #:空闲盘个数
mdadm -D /dev/md#:显示RAID详细信息
cat /proc/mdstat:观察md状态
mdadm -S /dev/md#:停止RAID设备