第 81 课 - RAID 磁盘阵列配置
课程:Linux 系统管理与运维 模块:存储管理 难度:高级 标签:raid, mdadm 上一课:LVM 逻辑卷管理 下一课:NFS 网络文件系统
学习目标
- 理解 RAID 的核心概念:能够清晰解释 RAID 的目的、基本原理以及常见级别(RAID 0, 1, 5, 10)的区别与适用场景。
- 掌握
mdadm工具的使用:熟练运用mdadm命令创建、管理、监控和删除软件 RAID 阵列。 - 完成 RAID 5 阵列的完整生命周期:能够独立完成从磁盘准备、阵列创建、文件系统格式化、挂载使用到模拟磁盘故障及恢复的整个流程。
- 了解 RAID 状态监控与维护:学会使用
mdadm和/proc/mdstat实时监控阵列健康状况,并执行日常维护任务。 - 树立正确的运维观念:深刻理解 RAID 旨在提高可用性和性能,而非替代数据备份的核心思想。
核心概念
想象一下,你有一项重要的任务需要运送大量货物。一辆卡车可能速度慢且容易抛锚。RAID(独立磁盘冗余阵列)的思想就像是组建一个“卡车车队”。通过将多个物理硬盘驱动器(HDD)或固态硬盘(SSD)组合成一个逻辑单元,我们可以实现以下目标:
- 性能提升:多辆卡车同时运输,速度更快(数据条带化)。
- 数据保护:车队中即使有一辆卡车坏了,任务也能继续(冗余校验)。
- 容量扩展:车队整体的运载能力是所有卡车之和。
在Linux中,我们主要使用软件RAID,其核心工具是 mdadm (Multiple Devices Admin)。让我们认识一下最常见的几个“车队编队”(RAID级别):
| RAID级别 | 别名 | 最少磁盘数 | 工作原理 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|---|---|
| RAID 0 | 条带化 | 2 | 数据被分割成块,并行写入所有磁盘。 | 极高的读写性能。 | 无冗余,任何一块磁盘损坏,所有数据丢失。 | 临时数据、缓存,对性能要求高但对安全无要求的场景。 |
| RAID 1 | 镜像 | 2 | 数据被完整地复制到每一块磁盘上。 | 高数据安全性,读取性能可能提升。 | 存储成本最高(容量只有最小磁盘的容量),写入性能无提升。 | 操作系统分区、关键数据库。 |
| RAID 5 | 分布式奇偶校验 | 3 | 数据条带化,并为每组数据计算一个奇偶校验信息,该信息分布在所有磁盘上。 | 在性能、容量和成本之间取得平衡。允许一块磁盘损坏。 | 写入性能受奇偶校验计算影响。重建阵列耗时长且性能下降。 | 文件服务器、Web服务器等主流应用。 |
| RAID 10 | 镜像+条带 | 4 | 先镜像(RAID 1),再条带化(RAID 0)。例如,4块盘先两两镜像,再组成一个RAID 0。 | 兼具高性能(RAID 0)和高冗余(RAID 1),允许每组镜像中损坏一块盘。 | 成本高,容量是总磁盘容量的一半。 | 高性能数据库、虚拟化平台。 |
代码示例
本示例将完整演示使用 mdadm 创建一个 RAID 5 阵列,并模拟磁盘故障及恢复过程。
步骤 1:环境准备与安装 mdadm
# 检查系统是否已安装 mdadm,若无则安装
# 使用虚拟机添加多块小容量虚拟磁盘(如/dev/sdb, /sdc, /sdd, /sde)进行实验
sudo apt update && sudo apt install mdadm -y # Debian/Ubuntu
# sudo yum install mdadm -y # CentOS/RHEL
步骤 2:创建 RAID 5 阵列
# 查看新加入的磁盘,确认设备名(例如 /dev/sdb, /dev/sdc, /dev/sdd)
lsblk
# 使用 mdadm 创建 RAID 5 阵列
# --create: 创建新阵列
# /dev/md0: 阵列设备名,通常以 md 开头
# --level=5: 指定 RAID 级别为 5
# --raid-devices=3: 指定用于该阵列的活动磁盘数量
# /dev/sd{b,c,d}: 要使用的磁盘设备
sudo mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sd{b,c,d}
# 系统会提示确认,输入 `y` 继续。
步骤 3:查看阵列状态
# 查看详细阵列信息
sudo mdadm --detail /dev/md0
# 快速查看所有 RAID 阵列的状态(关键信息)
cat /proc/mdstat
# 输出示例:
# Personalities : [raid6] [raid5] [raid4]
# md0 : active raid5 sdd[3] sdc[1] sdb[0]
# 20958464 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
# 其中 `[UUU]` 表示所有磁盘(U)状态正常。
步骤 4:创建文件系统并使用
# 在 /dev/md0 上创建 ext4 文件系统
sudo mkfs.ext4 /dev/md0
# 创建一个挂载点并挂载
sudo mkdir /mnt/raid5
sudo mount /dev/md0 /mnt/raid5
# 写入一些测试数据
sudo touch /mnt/raid5/testfile.txt
echo “Hello RAID 5” | sudo tee /mnt/raid5/testfile.txt
步骤 5:模拟磁盘故障与恢复
# 1. 标记一块磁盘(如 /dev/sdb)为故障状态
sudo mdadm --manage /dev/md0 --fail /dev/sdb
# 再次查看状态,会发现 sdb 状态变为 (F)ailed,阵列进入 [UU_] 降级(degraded)状态
cat /proc/mdstat
sudo mdadm --detail /dev/md0
# 2. 从阵列中移除故障磁盘
sudo mdadm --manage /dev/md0 --remove /dev/sdb
# 3. 添加一块新磁盘(/dev/sde)作为替换
sudo mdadm --manage /dev/md0 --add /dev/sde
# 阵列会自动开始重建(Rebuild),将数据和奇偶校验信息复制到新磁盘。
# 重建过程中阵列仍可读写,但性能会下降。可通过 /proc/mdstat 监控进度。
watch cat /proc/mdstat # 按 Ctrl+C 退出监控
步骤 6:保存阵列配置(至关重要)
# 将阵列配置保存到文件,确保系统重启后阵列能自动装配
sudo mdadm --detail --scan >> /etc/mdadm/mdadm.conf
# 重新生成 initramfs,以便在启动早期阶段识别阵列
sudo update-initramfs -u # Debian/Ubuntu
# sudo dracut -f # CentOS/RHEL
步骤 7:清理(实验结束后)
# 卸载文件系统
sudo umount /mnt/raid5
# 停止并删除 RAID 阵列
sudo mdadm --stop /dev/md0
sudo mdadm --remove /dev/md0
# (可选)擦除磁盘上的超级块信息,以便磁盘可用于其他目的
sudo mdadm --zero-superblock /dev/sd{b,c,d,e}
实践练习
练习 1:基础 - 创建 RAID 0 阵列
- 要求:使用两块新磁盘(如
/dev/sdx,/dev/sdy)创建一个名为/dev/md1的 RAID 0 阵列。将其格式化为xfs文件系统并挂载到/mnt/raid0。 - 预期输出:成功挂载,并通过
df -h /mnt/raid0命令看到容量约为两块磁盘容量之和。
练习 2:进阶 - 创建 RAID 1 阵列
- 要求:使用两块新磁盘创建一个 RAID 1 阵列
/dev/md2。挂载后,故意标记一块磁盘为故障,观察阵列是否仍能正常工作(降级状态)。然后添加一块新盘进行重建。 - 预期输出:在
/proc/mdstat中观察到状态从[UU]变为[U_],并在添加新盘后开始重建。
练习 3:综合 - 配置带备用盘的 RAID 10
- 要求:使用四块磁盘创建一个 RAID 10 阵列(
level=10,raid-devices=4)。再额外添加一块磁盘作为全局备用盘(--spare-devices=1)。模拟一块活动磁盘损坏,观察备用盘是否自动接替并启动重建。 - 预期输出:使用
mdadm --detail /dev/mdX查看,备用盘应出现在Spare Devices部分。故障后,备用盘变为活动盘,并开始重建。
常见错误
- 操作真实数据磁盘:在实验时,绝对不要对存有重要数据的物理磁盘(如
/dev/sda, 通常是系统盘)执行 RAID 操作,这会导致数据立即丢失。务必使用空磁盘或虚拟机新添加的磁盘。 - 混淆 RAID 级别:错误地认为 RAID 0 有冗余,或将 RAID 1 的容量误认为是总和。请牢记核心概念表格中的关键区别。
- 忽略配置持久化:创建阵列并重启后,发现
/dev/mdX消失了。这是因为没有将阵列配置保存到/etc/mdadm/mdadm.conf并更新initramfs。 - 在降级状态下忽视修复:当
cat /proc/mdstat显示状态为[UU_]或[U_U]时,表示阵列已降级,失去冗余能力。应立即安排更换故障磁盘,而非置之不理,否则再坏一块盘就会导致数据丢失。 - 误将 RAID 当作备份:RAID 只能防止物理磁盘硬件故障。对于文件误删除、病毒勒索、火灾水灾等逻辑或物理灾难,RAID 完全无能为力。务必执行独立的定期备份策略。
小结
本节课我们深入探索了 Linux 软件 RAID 的世界,核心要点如下:
- RAID 的本质:通过组合多块磁盘,实现性能和/或可靠性的提升。常见级别包括追求性能的 RAID 0、追求安全的 RAID 1、均衡的 RAID 5 以及高性能高可靠的 RAID 10。
- 核心工具
mdadm:我们掌握了它的关键子命令:--create: 创建阵列。--detail和/proc/mdstat: 查看状态。--manage --fail/--remove/--add: 管理故障磁盘和备用盘。--stop: 停止阵列。--scan: 扫描和保存配置。
- 运维关键步骤:创建阵列后,必须格式化、挂载、保存配置并更新
initramfs,以确保其可用性和持久性。 - 最重要的观念:RAID 是保障业务连续性(Availability)的重要一环,但它不能替代定期、异地、多版本的数据备份(Backup)。两者结合,才能构成稳健的数据保护体系。
掌握了 RAID 配置,你便拥有了为服务器构建高性能、高可用存储基础的能力。下一课,我们将学习如何通过 NFS 将这些存储空间安全地共享给网络中的其他客户端。
练习编辑器
rust
Loading...