明辰智航|虚拟化:RAID

开始前先来思考一个问题 , 如果一个文件的大小超过了一块磁盘的大小 , 该如何存储?
独立硬盘冗余阵列(RAID,RedundantArrayofIndependentDisks) , 简称磁盘阵列 , 利用虚拟化存储技术把多个磁盘组合起来 , 成为一个或多个磁盘阵列组 , 目的为提升性能或数据冗余 , 或是两者同时提升 。
简单来说 , RAID把多个磁盘组合成为一个逻辑磁盘 , 因此 , 操作系统只会把它当作一个实体磁盘 。
常见RAID等级
RAID0
明辰智航|虚拟化:RAID
文章图片
假设服务器有N块磁盘 , RAID0是数据在从内存缓冲区写入磁盘时 , 根据磁盘数量将数据分成N份 , 这些数据同时并发写入N块磁盘 , 使得数据整体写入速度是一块磁盘的N倍;读取的时候也一样 , 所以在所有的级别中 , RAID0的速度是最快的
但是RAID0不做数据备份 , N块磁盘中只要有一块损坏 , 数据完整性就被破坏 , 其他磁盘的数据也都无法使用了 。
RAID1
明辰智航|虚拟化:RAID
文章图片
RAID1是数据在写入磁盘时 , 将一份数据同时写入两块磁盘 , 这样任何一块磁盘损坏都不会导致数据丢失 , 插入一块新磁盘就可以通过复制数据的方式自动修复 , 具有极高的可靠性 , RAID1的数据安全性在所有的RAID级别上来说是最好的 。 但无论用多少磁盘做RAID1 , 仅算一个磁盘的容量 , 是所有RAID中磁盘利用率最低的一个级别 。
RAID1在一些多线程操作系统中能有很好的读取速度 , 理论上读取速度等于磁盘数量的倍数 , 与RAID0相同 。 写入速度有微小的降低 。
RAID10
明辰智航|虚拟化:RAID
文章图片
结合RAID0和RAID1两种方案构成了RAID10 , 它是将所有磁盘N平均分成两份 , 数据同时在两份磁盘写入 , 相当于RAID1;但是平分成两份 , 在每一份磁盘(也就是N/2块磁盘)里面 , 利用RAID0技术并发读写 , 这样既提高可靠性又改善性能 。 不过RAID10的磁盘利用率较低 , 有一半的磁盘用来写备份数据 。
RAID3
明辰智航|虚拟化:RAID
文章图片
RAID3可以在数据写入磁盘的时候 , 将数据分成N-1份 , 并发写入N-1块磁盘 , 并在第N块磁盘记录校验数据 , 这样任何一块磁盘损坏(包括校验数据磁盘) , 都可以利用其他N-1块磁盘的数据修复 。
【明辰智航|虚拟化:RAID】由于数据内的比特分散在不同的磁盘上 , 因此就算要读取一小段数据资料都可能需要所有的磁盘进行工作 , 所以这种规格比较适于读取大量数据时使用 。
在数据修改较多的场景中 , 任何磁盘数据的修改 , 都会导致第N块磁盘重写校验数据 。 频繁写入的后果是第N块磁盘比其他磁盘更容易损坏 , 需要频繁更换 , 所以RAID3很少在实践中使用 。
RAID5
明辰智航|虚拟化:RAID
文章图片
相比RAID3 , RAID5是使用更多的方案 。 RAID5和RAID3很相似 , 但是校验数据不是写入第N块磁盘 , 而是螺旋式地写入所有磁盘中 。 这样校验数据的修改也被平均到所有磁盘上 , 避免RAID3频繁写坏一块磁盘的情况 。
RAID5至少需要三块磁盘 , RAID5不是对存储的数据进行备份 , 而是把数据和相对应的奇偶校验信息存储到组成RAID5的各个磁盘上 , 并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上 。 当RAID5的一个磁盘数据发生损坏后 , 可以利用剩下的数据和相应的奇偶校验信息去恢复被损坏的数据 。 RAID5可以理解为是RAID0和RAID1的折衷方案 。


推荐阅读