RAID及LVM原理
什么是RAID
RAID旧称Redundant Array of Inexpensive Disks,即廉价磁盘冗余阵列;现称Redundant Array of Independent Disks,即独立磁盘冗余阵列,简称为磁盘阵列。其基本的思想是把多个相对廉价的磁盘进行组合成为一个磁盘阵列组,以达到甚至超越一个价格相对昂贵,容量相对大的磁盘。根据RAID版本的不同,RAID相对于散列的磁盘可以提供多方面的优势:更强的容错功能、更快的读写速度、更高的资料整合度等等……
简单来说,RAID的效果是把多个磁盘组成一个逻辑区域,因此系统只会将其视作一块磁盘。以往,RAID主要出现在服务器领域,而随着技术的不断发展,RAID也逐渐进入了玩家的世界。
RAID可以分为三种:纯软件RAID,半软件半硬件RAID和纯硬件RAID。
纯软件RAID是指程序运行在操作系统中且没有其他额外硬件参与的RAID模式。在这种模式下磁盘通常直接连接至计算机的I/O接口或是没有经过处理器的HBA。这样只有在操作系统加载了RAID驱动软件之后,整个阵列才会变成活动对象。这样的RAID模式通常被当作操作系统的一项额外附加值赠送给用户,其最大的特色就是低廉的成本。
半软件半硬件RAID是指通过一些硬件帮助RAID软件完成其薄弱环节的模式。在这种模式下通常会有一些额外的硬件参与其中(比如带有RAID
BIOS的HBA或直接在主板上加入RAID BIOS芯片等)。这颗额外的BIOS可以使得系统通电后阵列就能成为活动对象,在启动的过程中提供冗余。除此以外,大多数的类似方案还提供一个BIOS软件使得维护阵列可以不用启动操作系统。而且,这种硬件辅助的RAID通常都拥有跨平台的驱动,因此其相比于纯软件RAID更不依赖于操作系统。
纯硬件RAID可以是指一张独立的RAID卡或者基于RoC(RAID on Chip)技术的硬件方案。RAID卡通常内置了RAID处理器(I/O)处理器并且拥有自己的驱动接口(I/O控制器)。比较常见的是通过主板上的PCI或者PCI-e接口与系统进行连接。RAID卡通常是非常昂贵的,但也是最灵活和高效的解决方案。在这种情况下RAID的运行是完全独立于操作系统的。这样RAID处理器将可以提供最好的磁盘性能并且完全释放计算机硬件的负担。在RoC方案中,RAID控制器,缓存控制器,I/O面板甚至缓存都被聚集在一块芯片上。这样的芯片可以是整体安装在主板上或者安装在一块独立的PCB上,其中最常见于服务器主板上。
JBOD
JBOD,Justa Bunch of Disks,从某种程度上来说,JBOD并不能算作一种RAID,只是将多个磁盘的空间合并成一个连续的更大的逻辑磁盘。数据的存放原理是由第一块磁盘开始按顺序往后存储。如果磁盘发生损坏,那么该磁盘上的数据无法挽救;如果第一块磁盘发生损坏,通常会失去磁盘分割信息(大部分JBOD方案将磁盘分割信息存在第一块磁盘上),那么所有数据都无法挽救。其工作原理如下:
RAID0
RAID0是将多个磁盘直接合并成一个大的磁盘,并行I/O,没有冗余。在存放数据的时候,控制器将数据按照磁盘个数进行分段,并同时将这些分段写入相对应的磁盘之中。这样做的好处是RAID0在所有的阵列之中拥有最快的读写速率,然而由于RAID0并不具有冗余功能,只要有任意一块磁盘发生损坏,那么所有磁盘上的数据都会丢失。理论上RAID0的效能就是单磁盘效能与磁盘数的乘积,但受制于I/O瓶颈以及环境影响,其实际效能也会遵从边际效应。也就是说,随着磁盘数的增加,带来的效能提升会逐渐减小。其工作原理如下:
RAID1
RAID1是将多个磁盘进行互相镜像。在数据写入的时候,控制器将数据同时写入所有磁盘,因此只有在所有的磁盘都发生损坏的情况下才会丢失数据。另外,由于所有的磁盘中都写有相同的数据,因此在读取数据的时候可以通过多线程达到很好的读取速度。当主磁盘发生损坏时,镜像磁盘可以直接代替主磁盘继续工作,故RAID1拥有所有RAID中最好的安全性。但是无论用多少磁盘组建RAID1,都只有一块磁盘的容量,且实际可用空间是所有磁盘中容量最小的尺寸,因此RAID1也是所有RAID中磁盘利用率最低的一个级别。其工作原理如下:
RAID2
RAID2是RAID0的改良版,在RAID0的基础上增加了基于Hamming Code的错误修正码(ECC,Error Correction Code)。磁盘组中序号为2的幂的磁盘(第1个、第2个、第4个、第8个……)为校验盘,用于存储校验信息。从这个特征中我们很容易就可以得到一个结论:阵列中的磁盘总数越多,校验磁盘所占的比例越低,磁盘空间利用率越高。组建RAID2需要至少3个磁盘,其工作原理如下:
RAID3
RAID3与RAID2非常类似,其区别在于完全使用一个磁盘存储校验信息,实际可用容量是所有磁盘容量的总和减去一块磁盘。这样做的好处是,当某块数据磁盘发生损坏时,可以通过其他数据磁盘和校验磁盘算出损失的数据;而当校验磁盘发生损坏时,数据磁盘也依旧可以进行工作并可以重新生成校验数据。而Raid3的性能主要由容错算法和分块大小所决定。组建RAID3至少需要3块磁盘,其工作原理如下:
RAID4
RAID4是一种思路与RAID3非常相似的方案。其与RAID3的不同就在于,RAID4是将数据按区块为单位进行分割的,每次的数据读写过程中都必须从校验磁盘中取出相应的校验进行核对,这样可能带来的隐患是,校验磁盘会由于过度频繁的使用导致损耗率提高。RAID4的工作原理如下:
RAID5
RAID5是一种兼顾存储效能、安全性以及利用率的存储方案,主要是建立在Disk Striping技术上实现的。RAID5在存储时把数据和相应的奇偶校验信息存储到RAID5的各个磁盘上,并且把奇偶校验信息和数据分别存于不同的磁盘上。这样当Raid5中发生一个磁盘损坏的时候,可以利用剩下的磁盘和奇偶校验数据计算恢复损坏的数据。RAID5可以理解成RAID0和RAID1的折中方案,RAID5提供了接近RAID0的磁盘读取性能且比RAID0更高的安全保障。然而由于RAID5中数据都拥有校验信息,当更改数据时校验会严重影响磁盘的写入性能。RAID5的写入过程非常繁杂:当新数据进入时,控制器会先读取需要更新扇区上的数据,读出校验数据,写入新数据,写入新校验数据。也就是说,写入新数据这一步需要通过4个动作完成。这个问题通过RAID控制器的缓存可以得到有效改善。其工作原理如下:
RAID6
RAID6是一种与RAID5思路非常相似的方案。其与RAID5的不同点在于,RAID6增加了第二个独立的奇偶校验块,两个独立的奇偶校验使用不同的算法,相比RAID5而言进一步提高了数据安全性,允许最多两块磁盘同时发生损坏。然而相比于RAID5,其缺点也是非常明显的:由于多了一个独立的奇偶校验,磁盘利用率相比RAID5更低;且两种不同的校验算法同时存在导致磁盘的写入性能进一步降低,这也是其极少被实际应用的原因。建立RAID6需要至少4个磁盘,RAID6的工作原理如下:
RAID10
RAID10,亦称RAID1+0,是将所有的磁盘分成两组,每组先进行RAID1阵列,然后将两个RAID1阵列再进行RAID0阵列。其工作原理如下:
RAID01
RAID01,亦称RAID0+1,与RAID10恰恰相反,是将每组磁盘先进行RAID0阵列再进行RAID1阵列。由于RAID10相较于其有更好的安全性和适用性,通常主板只会支持RAID10而不支持RAID01。RAID01的工作原理如下:
RAID50
RAID50,亦称RAID5+0,类似于RAID10和RAID01,是将磁盘分为两组,每组磁盘先进行RAID5阵列,再进行RAID0阵列。这样做的目的在于提高RAID5的写入性能。RAID50的工作原理如下:
常见RAID的一些主要信息对比: