今天我们来聊聊一个在运维中很常见的场景:如何在服务器没有硬件RAID卡的情况下,仅通过操作系统来构建RAID阵列。这只需要掌握一个关键命令:mdadm。
1 软 RAID 和硬 RAID区别
硬 RAID 通常指服务器配备了专用的RAID卡。RAID卡负责将多个物理磁盘组合成一个逻辑上的大磁盘,所有的RAID计算(如奇偶校验)都由硬件完成。对操作系统而言,它看到的只是一块“虚拟磁盘”。这种方式性能好、稳定性高,但依赖特定硬件。
软RAID 则完全由操作系统底层的软件驱动实现。它将SCSI或IDE控制器提交的物理磁盘虚拟化,再提交给上层管理。软RAID主要在没有硬件RAID卡,但又希望实现数据冗余和性能提升的场景下使用。它依赖于系统的CPU资源进行计算。
两者简单对比如下:
| 对比项 |
硬 RAID |
软 RAID |
| 谁来算 RAID |
RAID 卡 |
操作系统 |
| 是否依赖硬件 |
强 |
弱 |
| 可迁移性 |
差 |
很强 |
| 运维灵活度 |
低 |
高 |
没有谁绝对更好,只是场景不同。
2 RAID 到底有多少种?
常见的RAID级别及其特点如下:
| RAID 级别 |
最少磁盘 |
特点 |
适合场景 |
| RAID0 |
2 |
性能最高,无冗余 |
临时数据、缓存 |
| RAID1 |
2 |
1:1 镜像 |
系统盘 |
| RAID5 |
3 |
性能 + 容错平衡 |
业务数据盘 |
| RAID6 |
4 |
双校验,更安全 |
大容量存储 |
| RAID10 |
4 |
性能 + 高可靠 |
核心业务 |
生产环境最常用的组合策略是:
RAID1做系统盘, RAID5 / RAID10做数据盘,有些数据要求较高的可以做RAID6。
3 实战做软RAID
下面我们以创建一个在生产环境中也比较常用的RAID5为例。假设我们已经准备了3块硬盘,设备名分别为:
/dev/sdb
/dev/sdc
/dev/sdd

3.1 创建 RAID
首先确保系统已安装 mdadm 工具。大多数Linux发行版已预装,若没有,可以使用包管理器安装,例如在RHEL/CentOS系统上:
yum install mdadm -y
接下来,使用 mdadm 命令创建RAID5阵列:
mdadm --create /dev/md0 \
--level=5 \
--raid-devices=3 \
/dev/sdb /dev/sdc /dev/sdd
参数说明:
mdadm:Linux下的RAID管理工具。
--create:创建一个新的RAID阵列。注意:此操作会清空指定磁盘上的所有现有数据。
/dev/md0:创建的阵列设备名称。md0 表示第一个RAID设备,后续可依次使用 md1, md2。
--level:指定RAID级别,这里为5。
--raid-devices=3:指定组成阵列的物理磁盘数量,必须与后面列出的磁盘路径数量一致,否则会报错。
执行完成后,可以运行 lsblk 命令查看块设备状态:
lsblk

此时,对于操作系统来说,/dev/md0 就是一块全新的磁盘。你可以计算一下它的容量:三块8GB的磁盘组建RAID5后,形成了一块约16GB的虚拟磁盘,这符合RAID5(N-1)的容量计算原理。
2️⃣ 格式化并挂载
创建好的RAID设备需要格式化为文件系统并挂载后才能正常使用。这里我们格式化为XFS文件系统并挂载到 /data 目录:
mkfs.xfs /dev/md0
mkdir /data && mount /dev/md0 /data

3️⃣ 配置持久化
这是至关重要的一步,务必不要遗漏! 许多线上故障正是因为重启后RAID配置丢失导致的。我们需要将当前的RAID阵列配置信息保存到配置文件中:
mdadm --detail --scan >> /etc/mdadm.conf
完成以上步骤,一个可用的软RAID5阵列就创建并配置完毕了。
4 软 RAID日常运维操作
创建RAID只是开始,持续的运维监控才是保障数据安全的关键。
4.1 查看 RAID 状态
最快速的方法是查看内核提供的RAID状态文件:
cat /proc/mdstat

4.2 查看详细信息
使用 mdadm 命令可以获取阵列的详尽信息,包括健康状态、成员盘等:
mdadm --detail /dev/md0

从详细输出中,你可以清晰地看到:
- RAID 级别 (Raid Level)
- 所有成员磁盘 (Number, Major, Minor)
- 阵列状态,例如是否有磁盘降级 (State, Failed Devices)
4.3 磁盘坏了怎么办?
在运维过程中,如果发现某块成员盘出现故障,可以按以下流程处理:
- 标记故障盘:告知RAID管理系统某块盘已失效。
mdadm /dev/md0 --fail /dev/sdb
- 移除故障盘:将已标记为故障的磁盘从阵列中移除。
mdadm /dev/md0 --remove /dev/sdb
通常,在RAID5阵列中单盘故障不会立即导致业务中断(阵列会进入降级模式运行),但对于重要的生产业务,更换磁盘的操作仍建议安排在维护窗口进行。
- 添加新盘并重建:插入新的完好磁盘(例如
/dev/sde),将其加入阵列并开始数据重建。
mdadm /dev/md0 --add /dev/sde
重建过程通常可以在线进行,业务无需停止。
结语
由此可见,实现数据冗余和高可用并非硬件RAID卡的专利。在Linux系统下,借助功能强大的 mdadm 工具,我们完全可以利用软件方式灵活、高效地构建和管理RAID阵列。掌握这项技能,能为你在各种硬件环境下的运维工作提供多一种可靠的选择。
希望这篇实战指南对你有帮助。想了解更多类似的运维实战技巧与系统知识,欢迎来云栈社区交流探讨。