RAID是什么,RAID磁盘阵列简介(新手必看)
RAID(Redundant Arrays of Independent Disks),翻译过来就是廉价的、具有冗余功能的磁盘阵列。其原理是通过软件或硬件将多块较小的硬盘或分区组合成一个容量较大的“磁盘组”。
RAID 的优势在于可以提升硬盘的读写性能,或者让磁盘具有一定的磁盘容错功能(部分硬盘损坏,数据不丢失)。
那么,什么是磁盘容错呢?从字面上理解,冗余就是多余的、重复的。在磁盘阵列中,冗余是指由多块硬盘组成一个磁盘组。在这个磁盘组中,数据存储在多块硬盘当中,这样即使某块硬盘出现问题,数据也不会丢失,即磁盘数据具有了保护功能,并且在这个磁盘组中,我们可以并行使用多个磁盘读取或写入数据,这样就加快了 I/O 时间。
RAID 的组成可以是几块硬盘,也可以是几个分区,而硬盘更加容易理解,因此我们在讲解原理时使用硬盘举例,但是大家要知道不同的分区也可以组成 RAID。
RAID 0 最好由相同容量的两块或两块以上硬盘组成,最好硬盘的品牌与型号也一致,这样性能最佳。在这种模式下,会先把硬盘分隔出大小相等的区块,当有数据需要写入硬盘时,会把数据也切割成相同大小的区块,然后分别写入各块硬盘,这样就相当于把一个文件分成几个部分同时写入所有硬盘,数据的读/写速度会有明显提升。
例如,两块相等大小的硬盘组成 RAID 0,一个 100MB 的文件要保存到 RAID 0 当中,那么每块硬盘会写入 50MB,并且在两块硬盘中写入 100MB 文件的过程是,并行使用两块硬盘 I/O 进行写入,速度更快。
从理论上讲,由几块硬盘组成 RAID 0,写入速度就会提升几倍。例如,由两块硬盘组成 RAID 0,理论上在同样的数据量下,其写入速度是向一块硬盘中写入速度的两倍。如果由 3 块硬盘组成 RAID 0,那么写入速度相比单块硬盘会提升 3 倍。
RAID 0 示意如下图所示:

图 1 RAID 0示意
在图 1 中,我们准备了两块硬盘,组成了 RAID 0,每块硬盘都划分了相等的区块。
当有数据要写入 RAID 0 时,先把文件 A 按照区块大小进行分割,分割后的文件 A 为 a1—a6,再把数据依次交替写入 disk0 和 disk1 硬盘。在 disk0 硬盘写入 a1、a3、a5, disk1 硬盘写入 a2、a4、a6,每块硬盘的数据写入量都是整体数据的 1/2,而且 a1、a3、a5 和 a2、a4、a6 近似并行写入,因此理论上写入时间也只有原始时间的 1/2。
RAID 0 的优点如下:
RAID 0 也有一个明显的缺点,那就是没有磁盘容错功能,RAID 0 中的任何一块硬盘损坏,RAID 0 中所有的数据都将丢失。也就是说,由两块硬盘组成 RAID 0,数据的损毁概率就是只写入一块硬盘的两倍。
前面提到过,组成 RAID 0 的硬盘的大小最好都是一样的。那么,如果有两块大小不一样的硬盘,难道就不能组成 RAID 0 吗?答案是可以的。
假设有两块硬盘,一块是 100GB 的,另一块是 200GB 的,由这两块硬盘组成 RAID 0,那么当最初的 200GB 数据写入时,是分别存放在两块硬盘当中的;但是当数据大于 200GB 之后,第一块硬盘就写满了,以后的数据就只能写入第二块硬盘,读/写性能也就随之下降了。
一般不建议企业用户使用 RIAD 0,因为数据的损毁概率比较高。只有在对数据的读/写性能要求非常高,但对数据安全要求不高时,才会考虑选择 RAID 0。
例如,两块硬盘组成 RAID 1,当有数据写入时,相同的数据既写入硬盘 1,也写入硬盘 2,当然分区的容量就只有两块硬盘总容量的 50% 了。但好处是,任何一块硬盘数据损坏,都可以在另一块硬盘中找到相同的数据。
RAID 1 示意如下图所示:

图 2 RAID1示意
RAID 1 具有了磁盘容错功能,但是硬盘的容量却减少了 50%。如图 2 所示,disk0 和 disk1 保存的文件相同,因此两块硬盘实际上只保存了一块硬盘容量大小的数据,这也是我们把 RAID 1 称作镜像卷的原因。
RAID 1 的优点如下:
RAID 1 的缺点也同样明显,具体如下:
那么,我们是否可以把 RAID 0 和 RAID 1 组合起来使用呢?当然可以,这样我们就既拥有了 RAID 0 的性能,又拥有了 RAID 1 的磁盘容错功能。
我们先用两块硬盘组成 RAID 1,再用两块硬盘组成另一个 RAID 1,最后将这两个 RAID 1 组成 RAID 0,这种方法就称作 RAID 10,如下图所示:

图 3 RAID 10示意
如果先组成 RAID 0,再组成 RAID 1,这种方法就称作 RAID 01。
在图 3 中,disk0 和 disk1 组成第一个 RAID 1,disk2 和 disk3 组成第二个RAID 1,这两个 RAID 1 组成 RAID 0。因为先组成 RAID 1,再由两组 RAID1 组成 RAID 0,所以最终的组合称为 RAID 10。
当有数据写入时,先写入的是 RAID 0,因为是 RAID 0,所以数据会被条带化分割,一部分数据写入了 disk0 和 disk1 组成的 RAID 1,另外一部分数据写入 disk2 和 disk3 组成的 RAID 1。disk0 与 disk1 之间的关系为 RAID 1(镜像卷)关系,因此两块磁盘保存数据相同;disk2 和 disk3 之间的关系也是 RAID 1(镜像卷)关系,因此 disk2 和 disk3 保存数据相同。
整体来看,RAID 10 中既存在 RAID 0 对数据进行条带化分割而提高了读写速度,也存在 RAID 1 镜像卷而保证了硬件冗余。注意,虽然我们有了 4 块硬盘,但是由于 RAID 1 的缺点,所以真正的容量只有 4 块硬盘的 50%。
当有数据写入时,数据被条带化分割后循环向组成 RAID 5 的硬盘中写入。不过,在每次循环写入数据的过程中,在其中一块硬盘中加入 1 个奇偶校验值(Parity),奇偶校验值保存着其他硬盘之间的奇偶校验信息。在任意一块硬盘发生损坏时,通过剩余硬盘中的数据和奇偶校验信息就能够计算得出损坏硬盘中的数据,进一步可以恢复数据。
RAID 5 示意如下图所示:

图 4 RAID 5示意
不过需要注意,在每次数据写入时,都会有 1 块硬盘用来保存奇偶校验值。因此,在 RAID 5 中可以使用的总容量是硬盘总容量减去保存奇偶校验占用空间所得的值。
例如,在图 4 中,由 3 块硬盘组成 RAID 5,但是真正可用的容量是 2 块硬盘的容量之和,也就是说,组成 RAID 5 的硬盘越多,损失的容量占比越少,因为不管由多少块硬盘组成 RAID 5,奇偶校验值加起来只占用 1 块硬盘。
还要注意,RAID 5 不管是由几块硬盘组成的,只有损坏 1 块硬盘的情况下才能恢复数据,如果损坏的硬盘超过 1 块,数据就不能再恢复了。
RAID 5 的优点如下:
RAID 5 的缺点是,不管由多少块硬盘组成 RAID 5,只支持 1 块硬盘损坏之后的数据恢复。
从总体上来说,RAID 5 更像是对 RAID 0 和 RAID 1 的折中,其性能比 RAID 1 好,但是不如 RAID 0;其磁盘容错比 RAID 0 好,而且不像 RAID 1 那样浪费了 50% 的硬盘容量。
近些年,又出现了一种新的磁盘阵列 RAID 6,其是 RAID 5 的扩展。RAID 5 总共只有一块硬盘的容量用于做奇偶校验,而 RAID 6 有两块硬盘的容量做奇偶校验,因此 RAID 6 可以支持 2 块硬盘损坏之后的数据恢复。
在了解了各种 RAID 的不同特点之后,我们通过下表进行总结:
RAID 卡上有硬件微控制器和 DRAM 易失性存储器,可以在写入数据时进行奇偶校验、在读取和写入时缓冲数据块,因此性能要好得多,而且不影响操作系统本身的性能。缺点是对于个人机来说,RAID 卡并不是常见硬件配置,单独购买又比较昂贵。
如果我们既没有 RAID 卡又想使用 RAID,就只能使用软 RAID 了。软 RAID 是指通过软件实现 RAID 功能。其优点在于不需要硬件,使用开源且免费的工具即可模拟出 RAID 磁盘阵列;缺点在于由于没有硬件微控制器和 DRAM 易失性存储器,需要耗费服务器系统性能,并且对磁盘 IO 性能的提升并不明显。
因此,笔者认为,软件模拟的 RAID 是没有实际使用价值的。因为 RAID 最主要的功能是磁盘容错功能(RAID 1 和 RAID 5 具备),也就是说,在一块硬盘损坏之后,数据不会丢失,可以通过撤除损坏硬盘、加入新硬盘的方式修复 RAID。但是软 RAID 的修复是在操作系统正常的情况下,才可以使用命令来修复 RAID 的。
我们试想,操作系统是安装在 RAID 之中的,而 RAID 是安装在硬盘之上的,硬盘都已经损坏,操作系统怎么可能正常呢?而操作系统都已经损坏,我们如何还能使用命令来修复 RAID 呢?
在生产环境中,要想使用 RAID,必须使用独立于硬盘之外的 RAID 卡,只有这样 RAID 才能具备完整的功能。在实际工作中不要使用软件模拟 RAID,不论是 Windows 还是 Linux 中的软 RAID 都没有实际使用价值。
RAID 的优势在于可以提升硬盘的读写性能,或者让磁盘具有一定的磁盘容错功能(部分硬盘损坏,数据不丢失)。
那么,什么是磁盘容错呢?从字面上理解,冗余就是多余的、重复的。在磁盘阵列中,冗余是指由多块硬盘组成一个磁盘组。在这个磁盘组中,数据存储在多块硬盘当中,这样即使某块硬盘出现问题,数据也不会丢失,即磁盘数据具有了保护功能,并且在这个磁盘组中,我们可以并行使用多个磁盘读取或写入数据,这样就加快了 I/O 时间。
RAID 的组成可以是几块硬盘,也可以是几个分区,而硬盘更加容易理解,因此我们在讲解原理时使用硬盘举例,但是大家要知道不同的分区也可以组成 RAID。
RAID常见级别
常见的 RAID 有以下几种级别。1) RAID 0
RAID 0 也叫 Stripe 或 Striping(条带卷),是 RAID 级别中读写性能最好的一个。RAID 0 最好由相同容量的两块或两块以上硬盘组成,最好硬盘的品牌与型号也一致,这样性能最佳。在这种模式下,会先把硬盘分隔出大小相等的区块,当有数据需要写入硬盘时,会把数据也切割成相同大小的区块,然后分别写入各块硬盘,这样就相当于把一个文件分成几个部分同时写入所有硬盘,数据的读/写速度会有明显提升。
例如,两块相等大小的硬盘组成 RAID 0,一个 100MB 的文件要保存到 RAID 0 当中,那么每块硬盘会写入 50MB,并且在两块硬盘中写入 100MB 文件的过程是,并行使用两块硬盘 I/O 进行写入,速度更快。
从理论上讲,由几块硬盘组成 RAID 0,写入速度就会提升几倍。例如,由两块硬盘组成 RAID 0,理论上在同样的数据量下,其写入速度是向一块硬盘中写入速度的两倍。如果由 3 块硬盘组成 RAID 0,那么写入速度相比单块硬盘会提升 3 倍。
RAID 0 示意如下图所示:

图 1 RAID 0示意
在图 1 中,我们准备了两块硬盘,组成了 RAID 0,每块硬盘都划分了相等的区块。
当有数据要写入 RAID 0 时,先把文件 A 按照区块大小进行分割,分割后的文件 A 为 a1—a6,再把数据依次交替写入 disk0 和 disk1 硬盘。在 disk0 硬盘写入 a1、a3、a5, disk1 硬盘写入 a2、a4、a6,每块硬盘的数据写入量都是整体数据的 1/2,而且 a1、a3、a5 和 a2、a4、a6 近似并行写入,因此理论上写入时间也只有原始时间的 1/2。
RAID 0 的优点如下:
- 由两块或两块以上的硬盘或分区组成,硬盘或分区的大小最好一致;
- 通过把数据分割成等大小的区块,分别存入不同的硬盘,加快数据的读/写速度。数据的读/写性能是几种 RAID 中最好的;
- 多块硬盘合并成 RAID 0,几块小硬盘组成了更大容量的硬盘,并且没有容量损失。RAID 0 的总容量就是几块硬盘的容量之和。
RAID 0 也有一个明显的缺点,那就是没有磁盘容错功能,RAID 0 中的任何一块硬盘损坏,RAID 0 中所有的数据都将丢失。也就是说,由两块硬盘组成 RAID 0,数据的损毁概率就是只写入一块硬盘的两倍。
前面提到过,组成 RAID 0 的硬盘的大小最好都是一样的。那么,如果有两块大小不一样的硬盘,难道就不能组成 RAID 0 吗?答案是可以的。
假设有两块硬盘,一块是 100GB 的,另一块是 200GB 的,由这两块硬盘组成 RAID 0,那么当最初的 200GB 数据写入时,是分别存放在两块硬盘当中的;但是当数据大于 200GB 之后,第一块硬盘就写满了,以后的数据就只能写入第二块硬盘,读/写性能也就随之下降了。
一般不建议企业用户使用 RIAD 0,因为数据的损毁概率比较高。只有在对数据的读/写性能要求非常高,但对数据安全要求不高时,才会考虑选择 RAID 0。
RAID 1
RAID 1 也叫 Mirror 或 Mirroring(镜像卷),由两块硬盘组成。两块硬盘的大小最好一致,否则总容量以容量小的那块硬盘为准。RAID 1 就具备了磁盘容错功能,因为这种模式是把同一份数据同时写入两块硬盘。例如,两块硬盘组成 RAID 1,当有数据写入时,相同的数据既写入硬盘 1,也写入硬盘 2,当然分区的容量就只有两块硬盘总容量的 50% 了。但好处是,任何一块硬盘数据损坏,都可以在另一块硬盘中找到相同的数据。
RAID 1 示意如下图所示:

图 2 RAID1示意
RAID 1 具有了磁盘容错功能,但是硬盘的容量却减少了 50%。如图 2 所示,disk0 和 disk1 保存的文件相同,因此两块硬盘实际上只保存了一块硬盘容量大小的数据,这也是我们把 RAID 1 称作镜像卷的原因。
RAID 1 的优点如下:
- 只能由两块硬盘组成,每块硬盘的大小最好一致;
- 具备磁盘容错功能,任何一块硬盘出现故障,数据都不会丢失;
- 数据的读取性能虽然不如 RAID 0,但是比单一硬盘要好,因为数据有两个备份存储在不同的硬盘上,当多个进程读取同一数据时,RAID 1 会自动分配读取进程。
RAID 1 的缺点也同样明显,具体如下:
- RAID 1 的容量只有两块硬盘容量的 50%,因为每块硬盘中保存的数据相同;
- 数据写入性能较差(相对 RAID 0 而言),以图 2 为例,文件 A 若要写入 disk0 和 disk1,则需要进行两次写入。这两次写入并行进行,但需要 disk0 和 disk1 全部写入完成才能算作写入成功。因此,从写入时间来说,其比单个磁盘使用的时间略长。
RAID 10
我们发现,RAID 0 虽然数据读/写性能非常好,但是没有磁盘容错功能;而 RAID 1 虽然具有磁盘容错功能,但是数据写入速度相比 RAID 0 较慢。那么,我们是否可以把 RAID 0 和 RAID 1 组合起来使用呢?当然可以,这样我们就既拥有了 RAID 0 的性能,又拥有了 RAID 1 的磁盘容错功能。
我们先用两块硬盘组成 RAID 1,再用两块硬盘组成另一个 RAID 1,最后将这两个 RAID 1 组成 RAID 0,这种方法就称作 RAID 10,如下图所示:

图 3 RAID 10示意
如果先组成 RAID 0,再组成 RAID 1,这种方法就称作 RAID 01。
在图 3 中,disk0 和 disk1 组成第一个 RAID 1,disk2 和 disk3 组成第二个RAID 1,这两个 RAID 1 组成 RAID 0。因为先组成 RAID 1,再由两组 RAID1 组成 RAID 0,所以最终的组合称为 RAID 10。
当有数据写入时,先写入的是 RAID 0,因为是 RAID 0,所以数据会被条带化分割,一部分数据写入了 disk0 和 disk1 组成的 RAID 1,另外一部分数据写入 disk2 和 disk3 组成的 RAID 1。disk0 与 disk1 之间的关系为 RAID 1(镜像卷)关系,因此两块磁盘保存数据相同;disk2 和 disk3 之间的关系也是 RAID 1(镜像卷)关系,因此 disk2 和 disk3 保存数据相同。
整体来看,RAID 10 中既存在 RAID 0 对数据进行条带化分割而提高了读写速度,也存在 RAID 1 镜像卷而保证了硬件冗余。注意,虽然我们有了 4 块硬盘,但是由于 RAID 1 的缺点,所以真正的容量只有 4 块硬盘的 50%。
RAID 5
RAID 5 最少需要 3 块硬盘组成,硬盘的容量也应当一致。当组成 RAID 5 时,同样需要把硬盘分隔成大小相同的区块。当有数据写入时,数据被条带化分割后循环向组成 RAID 5 的硬盘中写入。不过,在每次循环写入数据的过程中,在其中一块硬盘中加入 1 个奇偶校验值(Parity),奇偶校验值保存着其他硬盘之间的奇偶校验信息。在任意一块硬盘发生损坏时,通过剩余硬盘中的数据和奇偶校验信息就能够计算得出损坏硬盘中的数据,进一步可以恢复数据。
RAID 5 示意如下图所示:

图 4 RAID 5示意
不过需要注意,在每次数据写入时,都会有 1 块硬盘用来保存奇偶校验值。因此,在 RAID 5 中可以使用的总容量是硬盘总容量减去保存奇偶校验占用空间所得的值。
例如,在图 4 中,由 3 块硬盘组成 RAID 5,但是真正可用的容量是 2 块硬盘的容量之和,也就是说,组成 RAID 5 的硬盘越多,损失的容量占比越少,因为不管由多少块硬盘组成 RAID 5,奇偶校验值加起来只占用 1 块硬盘。
还要注意,RAID 5 不管是由几块硬盘组成的,只有损坏 1 块硬盘的情况下才能恢复数据,如果损坏的硬盘超过 1 块,数据就不能再恢复了。
RAID 5 的优点如下:
- 由 3 块或 3 块以上硬盘组成,每块硬盘的大小需要一致;
- 因为存在奇偶校验值,所以 RAID 5 具有磁盘容错功能;
- RAID 5 的实际容量是 n-1 块硬盘的容量之和,有 1 块硬盘用来保存奇偶校验值,但不能保存实际数据;
- RAID 5 的数据读/写性能比 RAID 1 更好,但是在数据写入性能上比 RAID 0 差。
RAID 5 的缺点是,不管由多少块硬盘组成 RAID 5,只支持 1 块硬盘损坏之后的数据恢复。
从总体上来说,RAID 5 更像是对 RAID 0 和 RAID 1 的折中,其性能比 RAID 1 好,但是不如 RAID 0;其磁盘容错比 RAID 0 好,而且不像 RAID 1 那样浪费了 50% 的硬盘容量。
近些年,又出现了一种新的磁盘阵列 RAID 6,其是 RAID 5 的扩展。RAID 5 总共只有一块硬盘的容量用于做奇偶校验,而 RAID 6 有两块硬盘的容量做奇偶校验,因此 RAID 6 可以支持 2 块硬盘损坏之后的数据恢复。
在了解了各种 RAID 的不同特点之后,我们通过下表进行总结:
对比项目 | RAID 0 | RAID 1 | RAID 5 | RAID 6 |
---|---|---|---|---|
磁盘数 | ≥2 | 2 | ≥3 | ≥4 |
磁盘容错 | 无 | 最多 1 块硬盘损坏 | 最多 1 块硬盘损坏 | 最多 2 块硬盘损坏 |
读写速度 | 最快 | 最慢 | 较快 | 较快 |
存储空间 | 磁盘利用率 100% | 磁盘利用率 50% | 磁盘利用率 n-1/n | 磁盘利用率 n-2/n |
硬RAID和软RAID
要想在服务器上实现 RAID,通常采用磁盘阵列卡(RAID卡)设置 RAID 级别,这种方式称为硬件 RAID,也叫作硬 RAID。RAID 卡上有硬件微控制器和 DRAM 易失性存储器,可以在写入数据时进行奇偶校验、在读取和写入时缓冲数据块,因此性能要好得多,而且不影响操作系统本身的性能。缺点是对于个人机来说,RAID 卡并不是常见硬件配置,单独购买又比较昂贵。
如果我们既没有 RAID 卡又想使用 RAID,就只能使用软 RAID 了。软 RAID 是指通过软件实现 RAID 功能。其优点在于不需要硬件,使用开源且免费的工具即可模拟出 RAID 磁盘阵列;缺点在于由于没有硬件微控制器和 DRAM 易失性存储器,需要耗费服务器系统性能,并且对磁盘 IO 性能的提升并不明显。
因此,笔者认为,软件模拟的 RAID 是没有实际使用价值的。因为 RAID 最主要的功能是磁盘容错功能(RAID 1 和 RAID 5 具备),也就是说,在一块硬盘损坏之后,数据不会丢失,可以通过撤除损坏硬盘、加入新硬盘的方式修复 RAID。但是软 RAID 的修复是在操作系统正常的情况下,才可以使用命令来修复 RAID 的。
我们试想,操作系统是安装在 RAID 之中的,而 RAID 是安装在硬盘之上的,硬盘都已经损坏,操作系统怎么可能正常呢?而操作系统都已经损坏,我们如何还能使用命令来修复 RAID 呢?
在生产环境中,要想使用 RAID,必须使用独立于硬盘之外的 RAID 卡,只有这样 RAID 才能具备完整的功能。在实际工作中不要使用软件模拟 RAID,不论是 Windows 还是 Linux 中的软 RAID 都没有实际使用价值。