81·存储管理高级

RAID 磁盘阵列配置

raidmdadm

第 81 课 - RAID 磁盘阵列配置

课程:Linux 系统管理与运维 模块:存储管理 难度:高级 标签:raid, mdadm 上一课:LVM 逻辑卷管理 下一课:NFS 网络文件系统

学习目标

  1. 理解 RAID 的核心概念:能够清晰解释 RAID 的目的、基本原理以及常见级别(RAID 0, 1, 5, 10)的区别与适用场景。
  2. 掌握 mdadm 工具的使用:熟练运用 mdadm 命令创建、管理、监控和删除软件 RAID 阵列。
  3. 完成 RAID 5 阵列的完整生命周期:能够独立完成从磁盘准备、阵列创建、文件系统格式化、挂载使用到模拟磁盘故障及恢复的整个流程。
  4. 了解 RAID 状态监控与维护:学会使用 mdadm/proc/mdstat 实时监控阵列健康状况,并执行日常维护任务。
  5. 树立正确的运维观念:深刻理解 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=10raid-devices=4)。再额外添加一块磁盘作为全局备用盘(--spare-devices=1)。模拟一块活动磁盘损坏,观察备用盘是否自动接替并启动重建。
  • 预期输出:使用 mdadm --detail /dev/mdX 查看,备用盘应出现在 Spare Devices 部分。故障后,备用盘变为活动盘,并开始重建。

常见错误

  1. 操作真实数据磁盘:在实验时,绝对不要对存有重要数据的物理磁盘(如 /dev/sda, 通常是系统盘)执行 RAID 操作,这会导致数据立即丢失。务必使用空磁盘或虚拟机新添加的磁盘。
  2. 混淆 RAID 级别:错误地认为 RAID 0 有冗余,或将 RAID 1 的容量误认为是总和。请牢记核心概念表格中的关键区别。
  3. 忽略配置持久化:创建阵列并重启后,发现 /dev/mdX 消失了。这是因为没有将阵列配置保存到 /etc/mdadm/mdadm.conf 并更新 initramfs
  4. 在降级状态下忽视修复:当 cat /proc/mdstat 显示状态为 [UU_][U_U] 时,表示阵列已降级,失去冗余能力。应立即安排更换故障磁盘,而非置之不理,否则再坏一块盘就会导致数据丢失。
  5. 误将 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...

继续学习

完成本课后,建议继续学习下一课「NFS 网络文件系统」 以巩固所学知识。