创建RAID阵列
约 773 字
把多块数据盘用 mdadm 组成软 RAID,可以获得更高的吞吐、容量或冗余。适合数据库、大文件存储等多盘场景;单盘小业务用不到。
组阵列会清空盘
mdadm --create 会清掉所选盘上的全部数据,只用空盘组阵列。物理服务器若配有硬件 RAID 卡,阵列在 RAID 卡 BIOS/管理界面配置,请提交工单处理,不要在系统里做软 RAID。
RAID 级别选择
| 级别 | 最少盘数 | 可用容量 | 容错 | 适用场景 |
|---|---|---|---|---|
| RAID 0 | 2 | 全部容量之和 | 无,坏一块全丢 | 缓存、临时数据等纯性能场景 |
| RAID 1 | 2 | 单盘容量 | 允许坏 1 块 | 数据库、文件服务等可靠性优先 |
| RAID 5 | 3 | (N-1) 块盘 | 允许坏 1 块 | 容量与冗余兼顾,读多写少 |
| RAID 10 | 4 | 一半容量 | 每组镜像可坏 1 块 | 性能与冗余都要,数据库常用 |
创建阵列(以 2 盘 RAID 1 为例)
# 0. 安装工具,确认空盘
sudo apt install -y mdadm # Debian/Ubuntu
sudo dnf install -y mdadm # RHEL 系
lsblk # 确认参与组阵的盘(如 vdb、vdc)无分区无文件系统
# 1. 创建阵列
sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/vdb /dev/vdc
# 其他级别示例:
# RAID 5(3盘+1热备):
# sudo mdadm --create /dev/md0 --level=5 --raid-devices=3 --spare-devices=1 /dev/vdb /dev/vdc /dev/vdd /dev/vde
# RAID 10(4盘):
# sudo mdadm --create /dev/md0 --level=10 --raid-devices=4 /dev/vdb /dev/vdc /dev/vdd /dev/vde
# 2. 查看状态(同步/初始化进度看 /proc/mdstat)
cat /proc/mdstat
sudo mdadm --detail /dev/md0 # State : clean 即正常格式化、挂载、开机自动
# 1. 格式化并挂载
sudo mkfs.ext4 /dev/md0
sudo mkdir /data && sudo mount /dev/md0 /data
# 2. 写入阵列配置,重启后自动重组(必须做,否则重启后设备名可能变化)
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf # Debian/Ubuntu 路径
# RHEL 系写入 /etc/mdadm.conf
sudo update-initramfs -u # Debian/Ubuntu 需更新 initramfs
# 3. fstab 持久挂载(用 UUID + nofail)
blkid /dev/md0
echo 'UUID=替换为查到的UUID /data ext4 defaults,nofail 0 0' | sudo tee -a /etc/fstab
sudo mount -a && df -Th # 验证 fstab 无误fstab 写错会导致无法开机,规范见Linux服务器挂载数据盘;nofail 参数可保证阵列异常时系统仍能启动。
更换故障盘
阵列报 degraded(mdadm -D 里 State 不再是 clean)时,定位故障盘并更换:
# 1. 标记故障并移除(假设 /dev/vdb 坏了)
sudo mdadm /dev/md0 --fail /dev/vdb --remove /dev/vdb
# 2. 换上新盘(快照回滚/新挂载的空盘)后加入阵列
sudo mdadm /dev/md0 --add /dev/vdb
# 3. 观察重建进度,rebuild 完成前阵列仍无冗余,尽快完成
cat /proc/mdstat # [===>...] recovery = x.x%RAID 不是备份
RAID 只防单盘物理故障,防不了误删除、病毒、系统损坏——RAID 1 两块盘同步的就是被删后的样子。重要数据按备份与容灾策略另做备份。
常用管理命令
sudo mdadm -D /dev/md0 # 阵列详情
cat /proc/mdstat # 实时状态/重建进度
sudo mdadm --stop /dev/md0 # 停止阵列
sudo mdadm --zero-superblock /dev/vdb # 彻底清除盘上的 RAID 信息(拆阵后复用盘时用)