RAID 0 RAID 1 RAID 5 RAID 10 区别:一张表对比,按场景选
RAID 0、RAID 1、RAID 5、RAID 10 的区别核心在冗余方式:RAID 0 只条带,坏一块全丢;RAID 1 两块盘互为镜像;RAID 5 拿一块盘的容量存校验,容量划算但小块写和重建慢;RAID 10 先镜像再条带,容量减半,换来稳定的随机写。数据库、虚拟化选 RAID 10,系统盘选 RAID 1,读多写少要容量选 RAID 5。
RAID 0、RAID 1、RAID 5、RAID 10 的区别,归根到底是数据怎么冗余。RAID 0 把数据切块轮流写到所有盘上,没有任何冗余;RAID 1 让两块盘存完全相同的数据;RAID 5 在每行数据旁边存一份奇偶校验,坏一块盘能算回来;RAID 10 先把盘两两做成镜像,再把镜像组做条带。冗余方式决定了其余的一切:最少几块盘、能用多少容量、写入要付出多少额外 IO、坏盘后还能不能用、重建要读多少数据。
RAID 0、RAID 1、RAID 5、RAID 10 区别对比表
N 为盘数,C 为单盘容量:
| 对比项 | RAID 0 | RAID 1 | RAID 5 | RAID 10 |
|---|---|---|---|---|
| 原理 | 条带:数据切块,轮流写到各盘 | 镜像:两块盘存相同数据 | 条带 + 分布式奇偶校验 | 先两两镜像,再条带 |
| 最少盘数 | 2 | 2 | 3 | 4,且为偶数 |
| 可用容量 | N × C | C(2 块盘时为一半) | (N − 1) × C | N / 2 × C |
| 随机读 | 约 N 块盘之和 | 约 2 块盘之和 | 约 N 块盘之和 | 约 N 块盘之和 |
| 随机写(写惩罚) | 约 N 块盘(1) | 约 1 块盘(2) | 约 N / 4 块盘(4) | 约 N / 2 块盘(2) |
| 大块顺序写 | 约 N 块盘 | 约 1 块盘 | 约 N − 1 块盘 | 约 N / 2 块盘 |
| 允许坏几块 | 0 | 1 | 1 | 至少 1,最多 N / 2(每个镜像组各 1 块) |
| 坏 1 块之后 | 整卷数据丢失 | 照常读写,失去冗余 | 降级运行,读坏盘上的数据要读其余所有盘再计算 | 只有那一组少了一份副本 |
| 重建要读多少 | 无法重建 | 剩下的那 1 块 | 其余 N − 1 块全部 | 镜像伙伴 1 块 |
| 重建难度 | — | 低,整盘复制 | 高,逐行计算,耗时长、对业务影响大 | 低,整盘复制 |
| 典型用途 | 临时数据、可随时重建的缓存 | 系统盘、小型业务 | 读多写少、容量优先 | 数据库、虚拟化 |
表里最关键的一行是“随机写”。括号里的数字叫写惩罚,指业务写一次,磁盘实际要做几次 IO:
- RAID 0 是 1:数据只写一份。
- RAID 1、RAID 10 是 2:同一份数据写到镜像的两块盘上。
- RAID 5 是 4:只改一个数据块时,要先读旧数据、读旧校验,算出新校验,再写新数据、写新校验,共 2 次读加 2 次写。
随机读四种级别差不多,都能用上几乎全部的盘;真正拉开差距的是随机写、坏盘后的表现和重建。
同样 4 块 8 TB 盘,四种做法各得到什么
4 块盘是四种级别都能做(RAID 1 做成两组)的最小盘数,用它比较最直观。假设每块 7200 转机械盘随机读写约 150 IOPS、顺序写约 200 MB/s,以下是理论估算:
| 做法 | 可用容量 | 系统里约显示 | 随机读 | 随机写 | 顺序写 | 能坏几块 |
|---|---|---|---|---|---|---|
| RAID 0 | 32 TB | 29.10 TiB | 约 600 IOPS | 约 600 IOPS | 约 800 MB/s | 0 |
| RAID 5 | 24 TB | 21.83 TiB | 约 600 IOPS | 约 150 IOPS | 约 600 MB/s | 1 |
| RAID 10 | 16 TB | 14.55 TiB | 约 600 IOPS | 约 300 IOPS | 约 400 MB/s | 1,坏在不同镜像组时可到 2 |
| 两组 RAID 1 | 两个独立的 8 TB 卷 | 各 7.28 TiB | 每卷约 300 IOPS | 每卷约 150 IOPS | 每卷约 200 MB/s | 每组 1 |
几点解读:
- RAID 5 比 RAID 10 多 8 TB,随机写却只有一半。 带掉电保护写回缓存的阵列卡能把突发写入先接住,实际表现会好于这个估算;持续写入超过缓存能力后,还是回到这个比例。
- 两组 RAID 1 和 RAID 10 容量相同,但它是两个独立的卷,单个卷的性能只有 RAID 10 的一半。业务能按目录拆开(比如系统一组、数据一组)时可以这样用,否则 RAID 10 更合适。
- RAID 0 的数字最好看,风险也随盘数放大。 任何一块盘坏,32 TB 全部丢失。假设单盘一年内损坏的概率是 2%,4 块盘的 RAID 0 一年内丢数据的概率约为 1 − 0.98⁴ ≈ 7.8%,接近单盘的 4 倍。
- 只有 2 块盘时只能二选一:RAID 0 得到 16 TB、约两倍的速度、零容错;RAID 1 得到 8 TB、单盘的写速度、能坏 1 块。除非数据可以随时重新生成,否则选 RAID 1。
换成 SSD 后,单盘随机 IOPS 高出两三个数量级,多数业务的瓶颈从性能变成容量,RAID 5 的写惩罚就不那么显眼了;但重建和降级的差别仍然存在。
坏一块盘之后:容错与重建差在哪
真正决定一种级别“好不好用”的,常常不是平时的性能,而是坏盘之后那几个小时到几天。仍以 4 块 8 TB 盘为例:
| 级别 | 坏 1 块后的业务 | 重建要读的数据 | 重建完成前,再出什么事会丢数据 |
|---|---|---|---|
| RAID 0 | 整卷不可用 | — | 已经丢了,只能从备份恢复 |
| RAID 1 | 基本正常,读请求只能走剩下的一块盘 | 8 TB | 剩下的那块盘再坏,或读不出某些扇区 |
| RAID 5 | 明显变慢,读坏盘上的数据要读其余 3 块再计算 | 24 TB | 其余 3 块中任何一块再坏;任何一块读不出某个扇区,对应的数据块就补不回来 |
| RAID 10 | 只影响坏盘所在的镜像组 | 8 TB | 只有坏盘的镜像伙伴再出问题才会丢数据 |
重建时间在服务器空闲时主要取决于新盘写满需要多久,几种级别差别不大;业务繁忙时差别就出来了:RAID 1、RAID 10 的重建只占用两块盘,RAID 5 每重建一行都要读其余所有盘,和业务抢的是整个阵列的 IO,阵列卡还会为了保业务给重建限速,于是拖得更久,而这段时间里阵列没有任何冗余。
所以“RAID 5 能坏任意一块,RAID 10 坏两块要看位置,RAID 5 更安全”的说法并不成立:两者都只保证扛住 1 块,而坏盘之后 RAID 5 的风险窗口更长、暴露面更大。
先按盘数缩小范围
手里有几块盘,往往已经替你排除了一半选项:
| 盘数 | 能做的级别 | 常见选择 |
|---|---|---|
| 1 | 无冗余 | 只放能重建的数据,并另做备份 |
| 2 | RAID 0、RAID 1 | RAID 1;只有临时数据才用 RAID 0 |
| 3 | RAID 0、RAID 5,或 RAID 1 加 1 块热备 | 要容量选 RAID 5;写多、重视坏盘后的安全,选 RAID 1 加热备 |
| 4 | RAID 0、RAID 5、RAID 10 | 写多选 RAID 10,读多、要容量选 RAID 5 |
| 6–8 | 同上,还能拆成两组 | 2 块做 RAID 1 装系统,其余做 RAID 10 或 RAID 5 放数据 |
| 8 块以上的大容量机械盘 | 同上 | RAID 5 重建风险偏高,改用 RAID 10 或 RAID 6 |
最后一行超出了本文的四种级别,但值得记住:单盘容量越大、盘数越多,RAID 5 重建要读的数据越多、时间越长,大容量机械盘阵列通常不再用 RAID 5。
再按业务选:数据库、虚拟化、备份
数据库:RAID 10
数据库的写入是小块随机写,InnoDB 的数据页默认 16 KB,事务日志还要频繁同步刷盘,对写延迟非常敏感。RAID 5 每次小块写要 4 次 IO,延迟高且不稳定;坏盘降级时查询变慢,往往直接表现为业务超时。
一台 8 盘位数据库服务器的典型配法:2 块 480 GB SSD 做 RAID 1 装系统,6 块 1.92 TB SSD 做 RAID 10 放数据目录,可用 5.76 TB。只读从库、报表库这类读多写少的实例,可以用 RAID 5 换容量;有人在可以随时从主库重建的从库上用 RAID 0,前提是接受坏盘后要花几个小时重新同步一份完整数据。
虚拟化宿主机:RAID 10,SSD 盘少时 RAID 5 也可以
一台宿主机上跑着几十台虚拟机,每台的顺序读写叠加在一起,到了磁盘上就变成了随机读写;一块盘降级,所有虚拟机一起变慢。所以本地存储首选 RAID 10,例如 2 块盘做 RAID 1 装虚拟化平台,8 块 SSD 做 RAID 10 存放虚拟机磁盘。全闪存、盘数在 3–5 块、写入不重的小集群,用 RAID 5 换容量也很常见。
用 VMware ESXi 时还有一条硬约束:单台主机的本地存储要冗余只能靠阵列卡,ESXi 本身不提供软 RAID(vSAN 这类跨主机的分布式存储是另一回事)。
备份服务器:容量优先,RAID 5 起步
备份是大块顺序写,正好是 RAID 5 不吃写惩罚的场景(整行写入时直接算出校验,不用读旧数据),而 RAID 10 拿一半容量换来的随机写优势在这里用不上。4 块 8 TB 盘做 RAID 5 可用 24 TB;盘数到 8 块以上或单盘更大时,换成 RAID 6。备份服务器上不要用 RAID 0,它存的往往是最后一份副本。也别忘了,备份服务器本身不应该是唯一的副本,重要数据还要再拷一份到另一个地方。
其他常见业务
- 网站、文件共享、下载站:读多写少,盘少时 RAID 1,容量需求大时 RAID 5。
- 编译缓存、转码中间文件、CDN 缓存节点:数据丢了可以重新生成,用 RAID 0 或直接单盘,冗余不如容量和速度重要。
- 系统盘:两块盘做 RAID 1,和数据盘分开,以后重装系统或换数据盘的级别时互不影响。
在管理系统里怎么落地
在 IDC 出租的服务器上,RAID 级别通常在交付前就定好了,客户拿到的是一块虚拟盘,重装系统不会改变阵列。客户后来想换级别(比如从 RAID 5 改成 RAID 10),就不是重装能解决的:阵列要删除重建,盘上的数据会全部丢失。比较顺的流程是三步:客户先把数据备份到别处;运维在 IPMI 远程管理 里打开走 BMC 通道的 VNC 控制台,进阵列卡界面按新级别重建虚拟盘,不必到机房接显示器;客户再在 客户自助端 自己选镜像重装系统、恢复数据。
Toplink DCIM 的自助端里,重装、救援这类高危操作要输入手机上的 OTP 动态口令才执行,重装进度在任务队列里可以看到,也可以取消。把“改 RAID 级别要先备份”写进套餐说明,能省掉很多事后的纠纷。
常见问题
同一台服务器能同时用 RAID 1 和 RAID 5 吗?
能。阵列卡上可以有多个磁盘组,每组单独选级别,常见做法是 2 块盘做 RAID 1 装系统,其余盘做 RAID 5 或 RAID 10 放数据。一块盘同一时间只能属于一个磁盘组。
RAID 1 的读速度是单盘的两倍吗?
并发读多时,请求可以分摊到两块盘上,总吞吐接近两倍;单个大文件的顺序读,多数实现只从一块盘读,速度和单盘差不多。写入则始终是单盘的速度,因为两块盘都要写。
软 RAID 的 RAID 10 和阵列卡上的一样吗?
容量和容错的算法一样。Linux mdadm 的 raid10 是独立实现,还支持奇数块盘和 near、far、offset 几种布局,其中 far 布局的顺序读接近 RAID 0,代价是写入稍慢;阵列卡上的 RAID 10 通常就是经典的两两镜像再条带。