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设备