本文在 Linux(内核 5.x+)上以 4 块 NVMe 盘为例,构建 RAID0/1/10 阵列,并用 fio 进行性能测试与恢复演练,帮助在生产中进行方案选型。
## 准备与前提
- 磁盘:`/dev/nvme0n1`、`/dev/nvme1n1`、`/dev/nvme2n1`、`/dev/nvme3n1`。
- 工具:`mdadm`、`fio`、`smartctl`、`nvme-cli`。
## 构建阵列(可复现)
sudo mdadm --create /dev/md0 --level=0 --raid-devices=4 /dev/nvme[0-3]n1
sudo mkfs.xfs /dev/md0 && sudo mount /dev/md0 /mnt/raid0
sudo mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/nvme0n1 /dev/nvme1n1
sudo mkfs.xfs /dev/md1 && sudo mount /dev/md1 /mnt/raid1
sudo mdadm --create /dev/md10 --level=10 --raid-devices=4 --layout=n2 /dev/nvme[0-3]n1
sudo mkfs.xfs /dev/md10 && sudo mount /dev/md10 /mnt/raid10
确认:`cat /proc/mdstat` 与 `mdadm --detail /dev/md0` 等查看阵列状态。
## 性能测试(fio 可复现)
顺序读(128k):
sudo fio --name=read_seq --filename=/mnt/raid0/testfile --size=20G \
--rw=read --bs=128k --ioengine=libaio --direct=1 --numjobs=1 --iodepth=64 --runtime=30 --time_based
随机读写(4k,70/30):
sudo fio --name=rand_rw --filename=/mnt/raid10/testfile --size=20G \
--rw=randrw --rwmixread=70 --bs=4k --ioengine=libaio --direct=1 --numjobs=4 --iodepth=256 --runtime=60 --time_based
观察指标:`bw`、`iops`、`clat (usec)`。RAID0 顺序带宽近似线性提升;RAID10 在随机读写下通常优于 RAID1 且具备冗余。
## 故障与恢复演练
sudo mdadm --fail /dev/md10 /dev/nvme2n1
sudo mdadm --remove /dev/md10 /dev/nvme2n1
sudo mdadm --add /dev/md10 /dev/nvme2n1
验证:`/proc/mdstat` 显示重建进度;业务层面关注 IO 抖动与延迟。
## 选型建议
- RAID0:追求极致顺序吞吐但无冗余,适合暂存/可重建数据。
- RAID1:读性能可提升(多副本读),写性能受限,具备冗余。
- RAID10:综合读写性能与冗余,生产常用;磁盘数量≥4。
## 注意事项
- 阵列写入会影响盘寿命(TBW),结合 `smartctl` 监控并预留维护窗口。
- 主板/CPU 的 PCIe 通道与拓扑决定总带宽上限;跨 NUMA 可能影响延迟。
- 文件系统与对齐(如 1MB)会显著影响顺序性能,建议 XFS/EXT4 合理配置。
## 结语
通过 mdadm + fio 的组合,可在目标平台上实证不同 RAID 的性能与风险,帮助在生产环境做出兼顾吞吐与可靠性的 NVMe 阵列选型。

发表评论 取消回复