概述
RAID(Redundant Array of Independent Disks ,独立冗余磁盘阵列)是一种将多块物理磁盘,按照一定的方式组合成具有冗余能力的一个逻辑硬盘,从而提高整体的性能和提供数据的安全备份的技术,在磁盘阵列中的某个或某些磁盘出现故障时仍能从其他磁盘读取数据。
RAID级别
RAID有不同的级别,每种级别有不同的磁盘阵列组织结构。
RAID 0 (条带化存储)使用条带化技术(Data Stripping),将至少两块磁盘组合起来形成一个大容量的磁盘阵列。RAID 0存储数据时将数据以位或字节分段后分别存放在RAID 0 的各个磁盘上,读写数据均可以并行进行,提高了系统的性能(n倍)和吞吐量,但是它没有冗余或错误修复能力,任何一块硬盘故障所有数据将不复存在,它的可靠性仅为单一盘的1/n。所以RAID 0 只用在对数据的安全性需求不高的情况下。
RAID 1 (mirroring,镜像存储)在写入数据的同时将数据镜像到另一块磁盘上。如果使用两块性能相同的磁盘,就可以保证在不影响性能的同时最大限度提高数据的冗余能力(2倍),保证数据的安全性,但是磁盘利用率只有1/2。如果两块磁盘的性能不一致,性能低的磁盘将成为系统的短板。RAID 1 提供系统的可靠性和容错能力,提高数据读取性能,但却以降低数据的写入性能为代价。
RAID 2 在RAID 0 的基础上加上汉明码(Hanmming Code)错误校验机制,使多个磁盘存放检查及恢复信息,提供提供错误检查及恢复。当单个磁盘出现故障时,汉明码能够纠正数据。RAID 2 为了提高性能,使每块磁盘主轴同步,减少磁盘的寻道时间。
RAID 3 在RAID 0 的基础上,在存储数据时在另外一个单独的磁盘存储奇偶检验信息。奇偶检验信息能在存储数据的任意一个磁盘损坏时,结合其它磁盘的数据计算并恢复完整的数据,而且存储奇偶校验信息的磁盘损坏并不影响实际数据。在进行大量数据的写入操作时,校验磁盘将会称为系统的瓶颈,因此RAID 3 适用于多读取操作少写入操作的情况下。
RAID 4 与RAID 3 相同使用奇偶校验信息,也是单独存储在一块磁盘上,只是RAID 4 读写数据的单位是块(扇区),所以每次对数据的操作只需存储数据的磁盘和校验盘就可以了,因此校验盘时整个系统性能的短板。
RAID 5 在 RAID 4 的基础上使用所有的磁盘轮换作为奇偶校验盘,以减缓奇偶盘的读写压力。RAID 5 的读取数据很快,写入数据性能一般。
RAID 6 与RAID 5类似,但是使用两个独立的奇偶校验信息块,但是数据的写入性能不如RAID 5。常用一个RAID 5的校验码和一个纠删码(Reed Solomon Coding,写入数据时,RS将数据存储为n个数据块和m个校验码,RS只需通过n个数据块或校验码就可以还原出原数据【允许m/(n+m)的出错率】,但是绝不允许数据被篡改),RAID在两块磁盘损坏的情况下仍可以恢复原数据。
RAID 01 是RAID 0 与RAID 1的组合,先做RAID 0 条带,再做RAID 1镜像,能同时实现读写性能的提升和数据冗余。
RAID 10 是RAID 1与RAID 0的组合,先做RAID 1镜像,再做RAID 0条带,同RAID 01 也能同时实现读写性能的提升和数据冗余,但是RAID 10 的数据安全性有更好的保护。
JBOD(Just a Bunch Of Disks,磁盘簇)不是标准的RAID级别,不同与RAID的标准级别是由磁盘控制器组织控制的,它通过将多块磁盘简单地组合起来作为一块大容量的磁盘,保证数据的完整,并不能提升读写性能。
Linux中RAID 的配置
硬件RAID
在BIOS中配置服务器的RAID设配器,设置了RAID后操作系统要访问磁盘就通过访问RAID而不是直接访问硬盘了。
软件RAID
Linux内核中有MD(Mulit Disks)模块(存放于/dev/md0),可以模拟一个逻辑RAID。
mdadm是一个用户空间工具( mdadm - manage MD devices aka Linux Software RAID),能将任何块设备做成RAID。
命令格式:
mdadm [mode] <raiddevice> [options] <component-devices>
mdadm是一个模式化的命令,包括创建模式、管理模式、监控模式、增长模式和装配模式等。创建模式由-C指定,子选项有-l(指定RAID的级别)、-n(指定要组成RAID的磁盘个数)、-a (自动创建,其后跟yes或no)、-c(指定chunk大小,只能是2的n次方,默认是64k)、-x(指定空闲盘的个数)。管理模式用法: mdadm device options... devices...,选项有--add,--remove,--fail。
使用-D, --detail选项,显示RAID阵列的详细信息Print details of one or more md devices.
使用-S, --stop停止RAID阵列,deactivate array, releasing all resources.