磁盘阵列 RAID
1. RAID 核心概念
RAID(Redundant Array of Independent Disks,独立磁盘冗余阵列)通过把多块物理磁盘组合成一个逻辑存储单元,在性能、容量、可靠性和成本之间做权衡。
RAID 主要解决两类问题:
- 性能:通过条带化让多块磁盘并行读写。
- 可靠性:通过镜像或校验信息在磁盘故障时维持数据可用。
需要注意:RAID 不等于备份。RAID 可以降低单盘故障造成的业务中断风险,但无法防止误删除、误覆盖、勒索软件、文件系统损坏和机房级灾难。
2. 常见 RAID 级别
2.1. RAID 0
RAID 0 使用条带化(striping)将数据分散写入多块磁盘,目标是提升读写性能和可用容量。
| 维度 | 说明 |
|---|---|
| 最少磁盘数 | 2 块 |
| 可用容量 | N × 单盘容量 |
| 容错能力 | 无容错,任意一块磁盘故障都会导致阵列数据不可用。 |
| 性能特点 | 读写性能较高。 |
| 典型场景 | 临时缓存、临时计算数据、可重新生成的数据。 |
RAID 0 不适合保存关键数据。
2.2. RAID 1
RAID 1 使用镜像(mirroring)保存多份相同数据,目标是提升可靠性。
| 维度 | 说明 |
|---|---|
| 最少磁盘数 | 2 块 |
| 可用容量 | 通常为单盘容量,利用率约 50%。 |
| 容错能力 | 通常可承受一块磁盘故障。 |
| 性能特点 | 读性能可提升,写性能接近单盘。 |
| 典型场景 | 系统盘、关键配置盘、小型数据库。 |
2.3. RAID 5
RAID 5 使用条带化和分布式奇偶校验,可在一块磁盘故障时继续工作。
| 维度 | 说明 |
|---|---|
| 最少磁盘数 | 3 块 |
| 可用容量 | (N - 1) × 单盘容量 |
| 容错能力 | 可承受一块磁盘故障。 |
| 性能特点 | 读性能较好,写入存在校验计算和写放大开销。 |
| 典型场景 | 普通文件服务、读多写少场景、成本敏感型存储。 |
随着单盘容量增大,RAID 5 在重建期间的风险会显著上升。重建过程耗时越长,另一块磁盘再次故障的概率越高,因此关键业务应谨慎使用 RAID 5。
2.4. RAID 6
RAID 6 在 RAID 5 的基础上增加第二份校验信息,可容忍两块磁盘故障。
| 维度 | 说明 |
|---|---|
| 最少磁盘数 | 4 块 |
| 可用容量 | (N - 2) × 单盘容量 |
| 容错能力 | 可承受两块磁盘故障。 |
| 性能特点 | 读性能较好,写入开销大于 RAID 5。 |
| 典型场景 | 大容量文件存储、备份存储、对容量和可靠性都有要求的场景。 |
2.5. RAID 10
RAID 10 是 RAID 1 与 RAID 0 的组合,通常先做镜像再做条带化,兼顾性能和可靠性。
| 维度 | 说明 |
|---|---|
| 最少磁盘数 | 4 块 |
| 可用容量 | (N / 2) × 单盘容量 |
| 容错能力 | 每个镜像组可坏一块,整体容错取决于故障分布。 |
| 性能特点 | 读写性能都较好,重建速度通常优于 RAID 5/6。 |
| 典型场景 | 数据库、虚拟化平台、高并发业务。 |
3. RAID 级别对比
| RAID 级别 | 核心机制 | 最少磁盘 | 容量利用率 | 容错能力 | 性能特点 | 适用场景 |
|---|---|---|---|---|---|---|
| RAID 0 | 条带化 | 2 | 100% | 无 | 读写性能高 | 临时数据、缓存 |
| RAID 1 | 镜像 | 2 | 约 50% | 通常 1 块 | 读性能较好,写接近单盘 | 系统盘、关键小容量数据 |
| RAID 5 | 条带化 + 单校验 | 3 | (N - 1) / N | 1 块 | 读好,写有校验开销 | 普通文件服务 |
| RAID 6 | 条带化 + 双校验 | 4 | (N - 2) / N | 2 块 | 读好,写开销更大 | 大容量可靠存储 |
| RAID 10 | 镜像 + 条带化 | 4 | 约 50% | 取决于故障分布 | 读写性能好 | 数据库、虚拟化、高并发业务 |
4. 软 RAID 与硬 RAID
4.1. 硬件 RAID
硬件 RAID 通过独立 RAID 控制器或主板集成控制器实现,阵列逻辑通常对操作系统呈现为单个逻辑磁盘。
| 优点 | 说明 |
|---|---|
| 性能稳定 | 独立控制器负责阵列管理,减少主机 CPU 参与。 |
| 功能丰富 | 常支持缓存、电池保护、热插拔、在线重建等能力。 |
| 运维友好 | 在企业服务器中常配合管理卡和告警系统使用。 |
| 风险 | 说明 |
|---|---|
| 成本较高 | 需要 RAID 卡、缓存和电池等硬件。 |
| 控制器依赖 | RAID 卡故障时可能需要同型号或兼容控制器恢复。 |
| 可观测性差异 | 操作系统看到的是逻辑盘,底层磁盘状态依赖厂商工具。 |
4.2. 软件 RAID
软件 RAID 由操作系统实现,Linux 中常见工具是 mdadm。
| 优点 | 说明 |
|---|---|
| 成本低 | 不依赖专用 RAID 卡。 |
| 可迁移性较好 | 只要系统支持对应软件 RAID 元数据,通常可在其他机器上识别。 |
| 管理透明 | 操作系统能直接看到物理盘和阵列状态。 |
| 风险 | 说明 |
|---|---|
| 占用系统资源 | 校验计算和重建会占用 CPU 与 IO。 |
| 依赖系统配置 | 启动、阵列自动组装和监控需要正确配置。 |
| 运维要求较高 | 需要理解 mdadm、阵列状态和故障恢复流程。 |
4.3. 软硬 RAID 对比
| 对比维度 | 硬件 RAID | 软件 RAID |
|---|---|---|
| 实现位置 | RAID 控制器 | 操作系统 |
| 成本 | 较高 | 较低 |
| 性能 | 通常更稳定 | 取决于 CPU、磁盘和系统负载 |
| 管理工具 | 厂商工具、管理卡 | mdadm、系统日志 |
| 故障恢复 | 依赖控制器兼容性 | 依赖系统识别 RAID 元数据 |
| 适用场景 | 企业服务器、传统存储方案 | 普通服务器、实验环境、成本敏感场景 |
5. Linux 软件 RAID 常用命令
5.1. 创建 RAID 1 示例
mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc
mkfs.xfs /dev/md0
mkdir -p /data
mount /dev/md0 /data
5.2. 查看阵列状态
cat /proc/mdstat
mdadm --detail /dev/md0
lsblk
5.3. 保存阵列配置
不同发行版配置文件路径可能不同,常见写法如下:
mdadm --detail --scan >> /etc/mdadm.conf
Debian/Ubuntu 系常见路径可能是 /etc/mdadm/mdadm.conf。
5.4. 模拟故障与移除磁盘
mdadm /dev/md0 --fail /dev/sdb
mdadm /dev/md0 --remove /dev/sdb
实际生产操作前应先确认阵列状态、备份状态、磁盘槽位和告警信息。
6. RAID 故障与重建风险
6.1. 常见风险
| 风险 | 说明 |
|---|---|
| 重建时间长 | 大容量磁盘重建可能持续数小时到数天。 |
| 重建期间性能下降 | 重建会占用磁盘 IO,影响业务读写。 |
| 二次故障 | RAID 5 重建期间再次坏盘会导致阵列不可用。 |
| 静默数据损坏 | 磁盘未报错但返回错误数据,可能影响校验和重建。 |
| 人为误操作 | 删除阵列、误拔盘、误格式化都不是 RAID 能解决的问题。 |
6.2. 运维建议
- 关键业务不要把 RAID 当成唯一保护手段。
- 大容量磁盘场景优先考虑 RAID 6、RAID 10 或分布式存储方案。
- 配置磁盘、RAID 卡、系统和业务多层监控告警。
- 定期检查阵列状态和坏块信息。
- 重建前确认备份可用,重建中持续观察 IO、温度和错误日志。
- 记录磁盘槽位、序列号和阵列成员关系,避免更换错盘。
7. 生产选型建议
| 场景 | 推荐方案 | 原因 |
|---|---|---|
| 临时高速缓存 | RAID 0 | 追求性能,可接受数据丢失。 |
| 系统盘 | RAID 1 | 简单可靠,恢复成本较低。 |
| 普通文件服务 | RAID 5 或 RAID 6 | 在容量、成本和可靠性之间折中。 |
| 大容量归档 | RAID 6 | 相比 RAID 5 更能降低重建期间的二次故障风险。 |
| 数据库与虚拟化 | RAID 10 | 读写性能和重建速度更适合高 IO 业务。 |
| 高可靠核心业务 | RAID 10 + 备份 + 异地容灾 | RAID 只解决部分硬件故障,仍需备份和容灾。 |
选型时应同时考虑磁盘容量、磁盘数量、IO 模型、恢复时间目标、备份策略和预算。
8. 关键结论
- RAID 的本质是在性能、容量、可靠性和成本之间做取舍。
- RAID 0 性能好但无冗余,不适合关键数据。
- RAID 1 简单可靠,适合系统盘和小容量关键数据。
- RAID 5 容量利用率高,但大容量磁盘重建风险较高。
- RAID 6 容错更强,适合大容量可靠存储。
- RAID 10 性能与可靠性较均衡,适合数据库和虚拟化。
- RAID 不是备份,重要数据必须有独立备份和恢复演练。
关联文档
- Linux 磁盘管理:磁盘、分区、文件系统与挂载管理。
- Linux 基础:Linux 文件系统与常用命令基础。
- 服务器坏道诊断与修复:磁盘坏道识别、诊断与处理。
- 服务器磁盘IO异常全场景总结:磁盘 IO 异常场景与排查思路。
