3.5.3 软件RAID与硬件RAID差异

软件RAID与硬件RAID的核心差异在于实现位置、资源占用与可维护性。软件RAID由内核与工具(mdadm)实现,依赖CPU/内存;硬件RAID由独立控制器实现,具备专用处理器与缓存(BBU/CacheVault),对操作系统更透明。选型需在性能、成本、可迁移性与故障定位之间权衡。

原理草图(对比数据路径):

文章图片

关键差异要点(含可验证方向):
- 性能:硬件RAID在RAID5/6校验与高并发写入上更稳定;软件RAID依赖CPU,重建时更易影响业务。
- 可靠性:硬件RAID依赖控制器固件,控制器故障可能导致阵列难迁移;软件RAID元数据在盘上,跨主机更易恢复。
- 监控与可观测:软件RAID可直接读SMART与mdadm事件;硬件RAID常需厂商工具查看物理盘健康。
- 成本与扩展:软件RAID成本低、自动化友好;硬件RAID成本高但提供写缓存保护、热备、巡检一致性。

示例:软件RAID(RAID1)完整演示(安装、创建、监控、故障模拟)

# 1) 安装工具(以 Debian/Ubuntu 为例)
sudo apt-get update
sudo apt-get install -y mdadm

# 2) 准备两块空盘(示例 /dev/sdb /dev/sdc)
lsblk

# 3) 创建 RAID1 阵列 /dev/md0
sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc

# 4) 查看阵列状态(预期:State: clean, resyncing/active)
cat /proc/mdstat
sudo mdadm --detail /dev/md0

# 5) 创建文件系统并挂载
sudo mkfs.ext4 /dev/md0
sudo mkdir -p /data/raid1
sudo mount /dev/md0 /data/raid1
df -h | grep /data/raid1

# 6) 保存配置,保证重启可识别
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
sudo update-initramfs -u

# 7) 故障模拟:标记一块盘失败并移除
sudo mdadm /dev/md0 --fail /dev/sdb
sudo mdadm /dev/md0 --remove /dev/sdb

# 8) 替换新盘并重建
sudo mdadm /dev/md0 --add /dev/sdb
cat /proc/mdstat  # 观察 resync 进度

命令解释要点:
- mdadm --create:创建阵列,--level 指定RAID级别。
- /proc/mdstat:快速查看阵列与重建进度。
- mdadm --detail:查看详细状态、设备角色与故障计数。
- mdadm --fail/--remove/--add:故障演练与更换盘的核心流程。

硬件RAID示例(以常见的 MegaCLI/StorCLI 为参考,命令会因厂商不同而变化)

# 1) 查看控制器与物理盘(示例命令)
sudo storcli /c0 show
sudo storcli /c0 /eall /sall show

# 2) 创建 RAID1 虚拟磁盘(VD)
sudo storcli /c0 add vd r1 drives=252:0-1

# 3) 查看虚拟磁盘与缓存策略
sudo storcli /c0 /vall show
sudo storcli /c0 /v0 show all

预期效果:系统看到一个逻辑盘(如 /dev/sda),操作系统无感知具体物理盘。

排错清单(软件RAID):

# 阵列无法组装
sudo mdadm --assemble --scan
sudo mdadm --detail --scan

# 查看事件与内核日志
dmesg | tail -n 100
journalctl -k | tail -n 100

# SMART 检查(软件RAID下能直接查看物理盘)
sudo smartctl -a /dev/sdb
sudo smartctl -a /dev/sdc

练习建议:
1) 使用两块虚拟磁盘创建 RAID1,并模拟故障与重建,记录重建时间与业务影响。
2) 对比 RAID1 与 RAID5 在 fio 压测下的 CPU 使用率(软件RAID更明显):

sudo apt-get install -y fio
fio --name=randwrite --filename=/data/raid1/testfile --rw=randwrite \
    --bs=4k --iodepth=32 --numjobs=4 --size=1G --runtime=60 --time_based

3) 观察重建期间业务写入延迟变化,结合 iostat -x 1 分析瓶颈。

选型总结:
- 成本敏感、需自动化与迁移:优先软件RAID。
- 高并发、低延迟、关键业务且需要写缓存保护:优先硬件RAID。
- 混合方案:HBA直通+软件RAID,兼顾性能与可维护性。