最近处理了两起存储上的麻烦事,恰好是同一类问题的两种表现:一台机器硬盘报警,阵列降级运行;另一台机器重启之后,软件 RAID 阵列直接“消失”。两台机器都是 Linux,一台是服务器自带的硬件 RAID 卡,一台是纯用 mdadm 搭的软件 RAID。排查加恢复折腾了整整一个下午,我才意识到 RAID 这套东西,很多人平时只停留在概念层面,真正出问题时连从哪里下手都搞不清楚。
所以这篇就专门聊聊 Linux 下的 RAID 存储技术。不搞那种“第一章 RAID 概述”的教科书套路,我直接按实际干活的经验来:先讲选型逻辑,再讲软件 RAID 和硬件 RAID 的操作流程,最后放一批掉盘、断电、扩容、恢复的真实场景处理办法。适合刚接手服务器的新手、准备运维面试的人,以及在虚拟机里折腾过 Linux 但没处理过真实故障的实验党。
1. RAID 选型的核心逻辑:先弄明白要解决什么问题
1.1 RAID 不是备份,先纠正一个观念
我见过不少刚入行的同事,一听说要保证数据安全,第一反应就是“给服务器做个 RAID”。这个想法本身没有错,但把 RAID 和备份混为一谈就很危险。
RAID 的本质是冗余阵列,解决的是磁盘硬件层面的可用性问题。单块磁盘故障会导致数据不可读,RAID 通过多块盘一起存储,让系统在一块甚至多块盘损坏时仍然能够正常工作。但它解决不了误删文件、中勒索病毒、文件系统逻辑损坏、机房火灾这种灾难——这些只能靠真正的备份解决。
换句话说,RAID 保证的是“磁盘坏了不影响业务”,备份保证的是“逻辑错误了数据还能找回”。两者是互补关系,不能互相替代。我在面试题里也看到过类似的追问,问的就是“服务器做了 RAID 还需要备份吗”,正确答案就是:需要,而且必须分开说清。
1.2 常用级别对比:0、1、5、10怎么选
被问最多的就是 RAID 0、1、5、10 之间的区别,先放一张对照表,然后用大白话拆开讲。
| RAID级别 | 最少盘数 | 可用容量 | 容错能力 | 随机写性能 | 典型适用场景 |
|---|---|---|---|---|---|
| RAID 0 | 2 | 全部容量之和 | 无,任意一块坏全部丢 | 最好 | 缓存、临时数据、游戏盘 |
| RAID 1 | 2 | 单块盘容量 | 坏 1 块 | 需要写两份,略降 | 系统盘、小数据量热备 |
| RAID 5 | 3 | (N-1) 块 | 坏 1 块 | 写惩罚明显 | 常规业务数据盘 |
| RAID 10 | 4 | N/2 | 每组坏 1 块,最多坏 N/2 块 | 比 RAID 5 好 | 数据库、核心业务 |
RAID 0就是单纯把多块盘拼接起来,读写性能翻倍,容量全部可用,但没有任何保护。坏一块盘等于全部数据完蛋。所以它只适合那些丢了也不心疼的数据,比如视频剪辑的临时工程缓存、游戏库、计算节点的中间结果。
RAID 1就是镜像,两块盘内容完全一样。可用容量只有一半,写性能因为要同时写两块盘会略有下降,读性能反而可以双盘同时读。选 RAID 1 的典型场景是小机器上的系统盘,容量需求不大,但系统稳定性要求高。
RAID 5是最容易让人误解的。它通过分布式校验位,用 N 块盘提供 N-1 块的容量,允许坏一块盘。但很多人没注意一个关键点:RAID 5 的写惩罚很重。每次写一条数据,除写入数据本身外,还要读旧数据、读旧校验、写新校验,一次写操作背后要发生 4 次 IO。对小随机写入的场景,比如虚拟机镜像文件、数据库事务日志,RAID 5 的性能会非常难看。
RAID 10是把数据先做镜像,再做条带。容错逻辑是每组镜像对里各坏一块还能跑,最多允许坏 N/2 块盘,但要分布在不同组。它的随机写性能远好于 RAID 5,代价就是可用容量打折一半,需要更多盘才能组成相同的容量。
在“性能优先”和“容量优先”之间,我自己的经验法则是:数据库和核心业务用 RAID 10,不差那点盘位;海量文件存储和备份池用 RAID 5/6,利用容量;系统盘要么 RAID 1 要么让硬件卡做 RAID 1,很少在系统盘上做 RAID 5。
1.3 容量与性能的简单估算方法
很多人在规划阵列时只看盘的数量,弄不清可用容量怎么算,这里给三个公式,照着套就行。
- RAID 0:可用容量 = 盘数 × 单盘容量
- RAID 1:可用容量 = 单盘容量
- RAID 5:可用容量 = (盘数 - 1) × 单盘容量
- RAID 6:可用容量 = (盘数 - 2) × 单盘容量
- RAID 10:可用容量 = (盘数 / 2) × 单盘容量
是不是很直观。但要注意一个细节:RAID 5 的容量公式成立的前提是所有盘容量一致。如果混插了不同容量的盘,阵列的可用容量会按最小盘的容量来算。4 块盘里 3 块是 4TB、1 块是 2TB,RAID 5 的可用容量不是 3×4TB,而是按 2TB 计算,容量直接缩一半。
这个规律不仅适用 RAID 5,RAID 1、RAID 10 也一样,镜像基数是按最小盘容量算的。所以采购硬盘时尽量一次买齐同容量,别贪便宜混着买,后期维护很难受。
性能估算方面,顺序读性能大概等于参与条带读的盘数量的总和(RAID 10 理论读并发更高),但实际瓶颈通常在网卡、总线、文件系统层。随机 IO 能力是群里最关心的,核心结论是:RAID 10 的随机写比 RAID 5 稳定得多。原因就是 RAID 5 有读改写惩罚,RAID 10 只需要写两个副本。
2. 软件 RAID 实验环境与 mdadm 实操
2.1 先用虚拟机搭一个练手环境
软件 RAID 在 Linux 里最常用的工具是 mdadm。它不需要专门的硬件 RAID 卡,直接把普通 SATA/SAS/NVMe 盘组成阵列,灵活性非常高,也便于在虚拟化环境里做实验。
我特别推荐先在虚拟机里模拟整套 RAID 流程,因为真机上做实验风险太大。用 VMware Workstation 或者 VirtualBox 建一台 Linux 虚拟机,再额外添加 4 块虚拟硬盘,就能像真机一样操作。唯一要注意的是:模拟出来的虚拟盘和真机磁盘的 IO 特性不同,能练的是命令逻辑和恢复流程,不是性能指标。
创建虚拟机时,给系统分一个最小化安装的 Linux(CentOS、Rocky、Ubuntu Server 都行)。然后加入 4 块 5GB 的虚拟磁盘,也不需要很大,够练习就行。等我做环境实操时,再加两个 5GB 虚拟盘做热备盘。
虚拟机里练 RAID 还有个额外好处:随手快照。配置错了、想重新来一遍,直接恢复快照,几秒钟搞定。真机上可没有这种后悔药。
2.2 用 mdadm 创建阵列的完整流程
进入系统后,先用lsblk或fdisk -l确认磁盘名。虚拟机新加的盘一般叫/dev/sdb、/dev/sdc、/dev/sdd、/dev/sde。
如果要创建 RAID 1,命令非常简单:
mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc如果要创建 RAID 5,三块盘起步:
mdadm --create /dev/md5 --level=5 --raid-devices=3 /dev/sdb /dev/sdc /dev/sdd或者创建加一块热备盘的 RAID 5:
mdadm --create /dev/md5 --level=5 --raid-devices=3 --spare-devices=1 /dev/sdb /dev/sdc /dev/sdd /dev/sde创建完成后,查看阵列状态:
cat /proc/mdstat会看到类似下面这样的输出:
Personalities : [raid1] [raid6] [raid5] [raid4] md5 : active raid5 sde[4](S) sdd[3] sdc[1] sdb[0] 10485760 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]在这段输出中,[UUU]的含义非常重要。三个 U 表示 3 块盘都正常工作,某个盘变成_就意味着对应槽位已经缺失或掉线,阵列进入降级状态。(S)表示热备盘。创建完阵列后,建议用mdadm --detail /dev/md5再确认一遍完整信息,包括阵列 UUID、成员盘列表、重建进度、可用容量等。
创建只是个开始,接下来按顺序做这几步:写文件系统、挂载、更新配置。
mkfs.ext4 /dev/md5 mkdir -p /data mount /dev/md5 /data为了重启后自动挂载,还要写入/etc/fstab。但这里有个大坑:不要在 fstab 里写 /dev/md5 这种设备名,因为重启后内核分配设备号的顺序不一定稳定。正确做法是在/etc/fstab里使用 UUID。
blkid /dev/md5拿到输出里的 UUID,然后写入 fstab:
UUID=你的UUID值 /data ext4 defaults 0 0同时把 RAID 阵列信息写进 mdadm 的配置文件,让系统开机时能自动组装阵列:
mdadm --detail --scan >> /etc/mdadm/mdadm.confRHEL/CentOS/Rocky 系还要执行:
dracut -fUbuntu/Debian 系执行:
update-initramfs -u更新 initramfs 的目的是把新的 mdadm 配置打包进启动镜像,否则内核启动早期阶段可能无法识别阵列,导致启动时提示找不到设备。
2.3 巡检、监控与重建操作习惯
阵列搭好不代表一劳永逸。日常巡检第一件是看状态:
cat /proc/mdstat mdadm --detail /dev/md5每次看到[UUU]变成[UU_],阵列就已经在降级模式了。这时候数据还能读,但已经没有冗余能力,第二块盘再坏就是数据灾难,必须马上处理。
如果只是普通的坏盘替换,操作顺序是三步:把坏盘从阵列中移除、物理换盘或把新盘插上、把新盘加入阵列触发重建。
mdadm /dev/md5 --fail /dev/sdb mdadm /dev/md5 --remove /dev/sdb mdadm /dev/md5 --add /dev/sdf执行完最后一条命令后,系统会自动开始 rebuild。查看进度:
watch -n 1 cat /proc/mdstat重建期间,阵列 IO 性能会明显下降,因为需要重新计算并写入校验数据。如果是生产环境,尽量把重建时间安排在业务低峰,同时在重建完成前不要着急做其他重 IO 操作。
监控方面,可以用 mdadm 自带的 monitor 模式。
mdadm --monitor --daemonize --mail=admin@example.com --program=/etc/mdadm/mdadm-monitor /dev/md5设置后,当阵列出现降级、rebuild 失败、设备移除等事件时,会自动发送邮件告警。当然,更现代的做法是把/proc/mdstat纳入 Prometheus+Alertmanager 或者 Zabbix 监控,但不管用什么,核心就是盯住[UUU]状态和 raid 事件。
3. 硬件 RAID 卡:从配置界面到 storcli 命令行
3.1 开机配置界面里必须知道的几个英文
生产服务器上,硬件 RAID 比软件 RAID 更常见。原因是服务器自带 RAID 卡之后,整阵列的操作对操作系统完全透明,系统看到的是一块已经做好的逻辑盘,驱动负担小,掉电保护、写缓存策略这些也要比纯软件 RAID 复杂有效。
几乎所有硬件 RAID 卡(包括常见的 LSI/Avago 系,以及各家 OEM 服务器那批)在开机自检画面都会提示按某个快捷键进入配置界面,常见的是Ctrl+H、Ctrl+R、Ctrl+C,具体看开机提示。
进入配置界面后,有几个英文术语一定要认识:
Virtual Drive:逻辑盘,也就是系统能看到的磁盘设备。Physical Drive:物理硬盘,是组成阵列的原始磁盘。Foreign Config:外部配置,RAID 卡读到不属于自己的 RAID 配置信息。JBOD:直接把物理盘透传给系统,不做 RAID。Rebuild:阵列重建,用新盘/热备盘恢复冗余。
第一次进 RAID 卡配置界面的人,最容易犯的错误就是乱点Clear Configuration或者Delete Virtual Drive。这两个操作会直接清掉阵列配置,后果是数据全部丢失,而且很多时候不需要清任何东西。在界面上看到不认识的功能,先查清楚再动,这个原则比任何命令技巧都重要。
3.2 storcli 命令行管理虚拟磁盘
图形界面的 RAID 卡管理适合偶尔配置一次。但真到生产环境里管理多台机器,一个个重启进 BIOS 界面点来点去效率太低,所以掌握命令行工具非常关键。
对于 LSI/Avago/Broadcom 系的巨型 RAID 卡,storcli是事实标准。装好 storcli 后,第一步永远是查看控制器信息:
storcli /c0 show/c0表示控制器 0,多控机器会有/c1等。输出里能看到控制器型号、固件版本、BBU 状态、写缓存策略。
查看所有物理盘状态:
storcli /c0 /eall /sall show输出会按插槽位置显示每一块物理盘的状态,包括UGood(正常)、Onln(在线)、Offln(离线)、Failed(故障)等状态。
创建虚拟磁盘(比如 RAID 10)可以这样:
storcli /c0 add vd type=raid10 drives=252:0,1,2,3 size=all name=VD0这里的252是 Enclosure 编号,0,1,2,3是插槽号,具体编号由上一句命令的输出决定。
查看虚拟磁盘信息:
storcli /c0 /vall show删除不要的虚拟磁盘:
storcli /c0 /vall delete删除前务必确认没选错对象,这个命令就是实打实的破坏性操作。
还有两个常用设置。设置 JBOD 透传模式:
storcli /c0 set jbod=on导入外部配置(换卡、搬迁后常见):
storcli /c0 import foreignconfig如果你没把阵列信息丢掉,只是换了张 RAID 卡,检测到外部配置后不要选择清除,先用这个命令导入。之前见过有人图省事直接清掉 foreign config,结果数据没了,当场崩溃,得不偿失。
3.3 更换物理盘与 Rebuild 的正确姿势
硬件 RAID 卡换盘,表面上很简单:把坏盘拔出来,新盘插进去,RAID 卡会自动识别新盘并开始重建(前提是阵列还处于降级状态且没有禁用自动重建)。
实际运维中有三个细节最容易踩坑。
第一,不要盲目相信“自动重建”。有些环境会在后台策略里关闭了自动重建,或者新盘容量不够、型号不匹配,RAID 卡会直接忽略新盘。正确做法是换盘之后用 storcli 查看新盘状态:
storcli /c0 /eall /sall show如果新盘状态是UGood,通常说明已被识别;如果还是Offln,需要手动把它设为 online:
storcli /c0 /ex /sx set online重建进度查询:
storcli /c0 /vx show rebuild重建期间不要对阵列做重负载操作。很多 RAID 卡在重建时写缓存会被暂停,性能会很感人。
第二,热备盘并不是万能的。热备盘在平时确实可以自动顶替故障盘,但热备盘本身也会坏。如果热备盘长期在线但一直没被用上,它的固件和磁盘健康状态同样需要监控。有的热备盘已经报警了,但因为没参与阵列,RAID 卡监控不一定报出来,要定期主动看。
第三,注意写缓存策略和 BBU 状态。硬件 RAID 卡的性能核心是写缓存。一旦 BBU(后备电池)状态异常,写缓存策略会被硬件自动降级为 Write Through,性能会直线下降。排查性能问题时,先用storcli /c0 show看看 BBU 状态,如果显示Failed或者Not Ready,先去解决电池或电容问题,否则性能怎么调都白搭。
4. 掉盘、断电、扩容:真实场景的故障处理
4.1 掉盘后的标准处理流程:先镜像再动手
不管是软件 RAID 还是硬件 RAID,掉盘之后最容易犯的错误就是“着急把新盘加进去让它重建”。原理很简单:如果掉下来的盘其实是接口松动或者线缆接触不良,在不明原因下贸然重建,可能会把原本状况不一致的盘数据写进阵列,造成不可逆的数据损坏。
我的处理流程一直是这样的,如果解决了你的问题,可以参考:
- 先确认掉盘原因。软件 RAID 看
/proc/mdstat,硬件 RAID 看 storcli 里的状态。是磁盘自身报错,还是 SAS/SATA 线缆松动,还是背板供电问题。 - 千万不要直接做
--add。先把嫌疑盘做成镜像。 - 如果还有一块好盘能读,用
dd或者更推荐用ddrescue把坏盘/有问题的盘完整克隆出来。原料盘不碰,镜像盘随便试。 - 再把镜像盘加进阵列尝试恢复,这样即使恢复过程中搞坏了,原始盘还在,可以重来。
这个流程看起来多花时间,但对核心数据来说完全值得。在没有把握的前提下,一上来就走重建流程,遇到不可逆损坏再后悔就晚了。
4.2 RAID 信息丢失时的恢复思路
最吓人的故障不是掉盘,而是重启之后整个阵列“消失”。这种情况在纯软件 RAID 环境比较常见:系统引导失败找不到/dev/mdX,或者/proc/mdstat里什么也没有。
先说第一原则:别慌,也别乱重建。阵列消失不等于数据没了,很多时候只是超级块没有被正确识别或者排序问题。
先用 mdadm 扫描所有物理盘上的 RAID 超级块:
mdadm --examine /dev/sdb /dev/sdc /dev/sdd /dev/sde每块盘会输出超级块信息,包括阵列 UUID、角色、更新时间等。如果能从盘中读取到的 UUID 一致,说明这些盘还是同一个阵列的成员盘,只是没有被自动组装。
这时试着按扫描结果组装:
mdadm --assemble --scan如果扫描不完全,可以手动指定成员盘:
mdadm --assemble /dev/md5 /dev/sdb /dev/sdc /dev/sdd /dev/sde组装后立即查看状态:
cat /proc/mdstat mdadm --detail /dev/md5我遇到过一次比较极端的情况:控制节点因为初始化脚本问题,启动了一半阵列没有自动组装,然后又执行了mkfs导致文件系统超级块被覆盖,那种情况恢复难度就大了。所以每次排查时,先确认状态再动手写任何东西,这个习惯能救命。
如果是硬件 RAID 卡的配置丢失,比如更换了 RAID 卡、主板电池没电导致配置丢失,storcli 的import foreignconfig就是把外部配置导回来。如果其他盘还能看到,就不要选择clear或initialize,否则这张阵列就是真的宣布终结。
4.3 扩容与断电场景的实战经验
扩容场景分几种。如果是软件 RAID 把现有阵列扩大容量,思路是:先把新盘加入阵列、扩展阵列可用空间、再扩文件系统。
第一步,新加一块盘进入阵列(RAID 5 为例):
mdadm /dev/md5 --add /dev/sdf这一步只是加盘,阵列容量不会立刻变化。要让 RAID 5 扩容到新盘,需要做一次 grow:
mdadm --grow /dev/md5 --raid-devices=4注意,这个命令会先触发一次 array reshape,这个过程耗时较长,期间阵列 IO 能力下降,建议在低峰执行。
完成后再扩展文件系统:
lvextend -l +100%FREE /dev/vg_data/lv_data resize2fs /dev/vg_data/lv_data硬件 RAID 卡的扩容方式差异很大。典型的是通过storcli进行虚拟磁盘的扩展:
storcli /c0 /v0 expand size=对比但并不是所有 RAID 卡都支持在线扩展。还有一种是物理盘全换大盘重建。在 RAID 5 上要特别注意:如果一次只换一块盘重建,再换下一块,最后整个阵列容量就会变大。RAID 5 扩容到新盘后,还需要再做一次 controller 层面的 expand 才能用上全部容量。
断电场景,大家都关心“服务器断电之后 RAID 还能继续用吗”,这么说吧:只要阵列是正常的、RAID 卡配置没丢,断电重启后阵列会自动恢复在线。真正的问题在于断电瞬间写缓存里没落盘的数据。
硬件 RAID 卡有 BBU 保护,断电时写缓存能保住,重新上电后回写,这个没问题。但如果没有 BBU、或者电池已经失效,RAID 卡通常会自动把写策略从 Write Back 降级为 Write Through,重启后文件系统可能处于不一致状态,需要 fsck。
软件 RAID 没有 BBU 概念,断电风险就是在内核 IO 栈里的数据会丢失。文件系统日志能解决一部分问题,但不能完全避免。重启后如果文件系统检查报错,用fsck修的时候要看清楚提示,不该按的自动修复选项别乱按,否则可能造成更严重的逻辑破坏。
顺便说一个虚机场景:很多人用虚拟机模拟 RAID,断电测试之后重启发现阵列起不来。原因多半是虚拟盘快照回滚了,导致每块盘的超级块版本不一致。处理方法是把快照统一到断电前的状态,再用mdadm --assemble --scan重新组。
5. 运维避坑速查表与我的个人心得
5.1 日常巡检清单:10分钟例行检查
RAID 故障往往不是突然发生的,它有前兆。磁盘有坏道、控制器日志开始报 SMART 错误、Rebuild 历史频繁,这些都是信号。我自己整理了一份例行巡检清单,照着做基本不会漏。
- 查看
/proc/mdstat,确认所有软件阵列都是[UUU]状态。 - 查看
mdadm --detail /dev/md*,确认没有盘处于Sparring或Removed。 - 硬件 RAID 卡执行
storcli /c0 /eall /sall show,看是否有Failed或Offln盘。 - 检查 BBU 状态:
storcli /c0 show看 Battery 是否正常,状态不正常就要安排更换。 - 关注磁盘 SMART 信息,
smartctl -a /dev/sdX,看 Reallocated Sector Count 是否持续增长。 - 定期检查
/var/log/messages或journalctl里与 md/raid 相关的报错。 - 发容量告警的机器、Rebuild 频繁的机器,重点排查盘体健康,不要等问题爆发才动手。
5.2 常见问题速查表
| 现象 | 可能原因 | 处理方式 |
|---|---|---|
| 重启后阵列消失 | mdadm 配置未写入 /etc/mdadm/mdadm.conf 或 initramfs 未更新 | 执行mdadm --examine,然后--assemble --scan,再更新配置 |
阵列降级,[UU_] | 某块盘掉线 | 确认掉线盘状态,先镜像再 remove + add 重建 |
| 重建一直在 0% | 磁盘可能存在物理坏道或 IO 被占用 | 用 storcli 确认新盘健康状态,降低负载再观察 |
| 系统盘性能突然下降 | RAID 卡 BBU 状态异常导致写缓存降级 | 查看 BBU 状态,安排更换电容/电池 |
| 无法识别外部配置 | 更换了 RAID 卡或背板顺序变化 | 不要 clear,使用import foreignconfig导入 |
| 磁盘容量不识别 | 部分 RAID 卡不支持超过 2TB 的逻辑盘 | 检查 GPT 分区表,必要时使用支持大容量的控制器固件 |
| 扩容后文件系统没变大 | 只扩了阵列,未扩文件系统 | 用lvextend+resize2fs或mkfs.grow完成最后一步 |
| Windows 无法读取 Linux 软件 RAID 盘 | mdadm 元数据是 Linux 私有格式 | 不要跨平台直接读,用 Linux LiveCD 恢复数据后导出 |
还有一条额外的经验,和“Windows 打开 Linux RAID”相关的热词我也遇到过,你不是第一个搜这个的人。软件 RAID 用的 md 超级块格式在 Windows 的磁盘管理里是不识别的,直接用 Windows 插上这些盘,大概率会提示未初始化。别去点“初始化磁盘”,那会清掉盘上元数据。正确做法是用 Linux LiveCD(比如系统安装盘里的救援模式)组好阵列,把数据拷贝到其他盘,再传输到 Windows 环境。
5.3 一些只有踩坑才换来的个人心得
最后聊几条我这么多年积累下来的操作体会,供你参考。
第一,在任何 RAID 操作前,先备份重要数据。这话说了无数遍,但我还是要再说一次。RAID 阵列提供的是硬件冗余,不是灾备。执行 delete、clear、create 这些命令之前,核对清楚,别把有数据的盘当成空盘初始化。
第二,每台机器都要留下一份 RAID 配置档案。包括阵列级别、成员盘型号、容量、RAID卡固件版本、storcli 生成的完整配置导出。归档文件放在该机器之外的地方。等哪天真的需要恢复阵列,你就能少花一个小时去回忆当初是怎么配的。
第三,不要过度依赖热备盘。热备盘顶替上去之后,不再有冗余,如果你又发现一块盘报错,那就很危险了。出现这种情况的首要任务是把数据迁移掉,而不是继续赌运气。
第四,在真机上动手前,一定先在虚拟机里演练一遍。模拟掉盘、模拟断电、模拟配置文件丢失,把恢复流程跑熟练了再上生产。我自己带的运维兄弟,每个人都要求先在虚拟环境完整走一遍完整流程,通过考核之后才允许碰真机。
RAID 这个东西,配置起来很简单,难的是故障处理和恢复决策。希望这篇从选型到实操、从软件阵列到硬件卡的经验整理,能帮你少走一些弯路。如果你在实验环境或者生产环境里遇到别的 RAID 问题,欢迎把具体场景抛出来,我们可以继续一起推演。