这几年帮朋友维护过几台跑业务的Linux服务器,也面试过不少做运维的候选人,发现大家对于RAID磁盘阵列的认知普遍存在一种"会用不会说、会说不会救"的状态。我自己也是从这种状态里爬出来的——最初以为RAID 5就是"坏一块盘不丢数据",直到亲眼看着一台四盘位文件服务器在掉盘报警后被折腾到差点全体离线,才下定决心把磁盘阵列从原理到实战完整啃一遍。今天这篇学习日志,就是把我从硬件选型、级别对比到mdadm实操、故障演练的全过程记录下来,适合正在学Linux存储的读者,也适合准备运维面试的人对照查漏。
1. RAID到底在解决什么问题:先看懂存储的两种核心诉求
1.1 单块磁盘的瓶颈:性能与可靠性的双重天花板
先说一个容易被忽略的事实:传统机械硬盘的随机读写能力其实非常弱。一块7200转的SATA盘,寻道时间大约在8到10毫秒,换算下来随机IOPS大概只有100到150左右。数据库随便跑点并发查询,单盘很快就成了瓶颈。即便换成SSD,单盘的顺序吞吐和IOPS再高,价格也会让人冷静下来。这是RAID要解决的第一个问题——性能。
第二个问题是可靠性。机械盘是精密机电设备,盘片旋转、磁头寻道都意味着磨损,厂商标称的MTBF动辄几十万小时,但那是统计平均值,不代表你手里这块盘不会在下个月出问题。数据中心里的真实年化故障率通常比宣传值高不少。而且我见过太多案例,同一批次购入的磁盘会在相近的时间段集中出现故障,像是约好了一起罢工。阵列里盘越多,整个存储系统越复杂,故障的概率也会跟着上升。这是RAID要解决的第二个问题——冗余。
1.2 RAID的三种基本手段:条带化、镜像、校验
RAID(Redundant Array of Independent Disks,独立磁盘冗余阵列)本质上就是把多块物理盘组合成一个逻辑卷,再通过几种基础手段实现性能或冗余上的增益。
第一种手段是条带化(Striping)。数据按固定大小的块(chunk)分散写到多块盘上,读写时可以并行操作,吞吐量随盘数提升。比如四块盘组条带,顺序读的理论带宽接近单盘的四倍。条带化是RAID 0、RAID 5、RAID 6等几乎所有高性能级别的基础。
第二种手段是镜像(Mirroring)。同一份数据同时写到两块盘,两块盘内容完全一致,一块坏了另一块顶上,冗余最直接,代价是可用容量减半。这是RAID 1的核心。
第三种手段是校验(Parity)。通过异或等算法把多块盘的数据块计算出一个校验块,分散存放在不同盘上。某块盘坏了,可以用剩余数据块加校验块反推出丢失的内容,冗余效率比镜像高,但写入时需要额外计算,带来"写入惩罚"。RAID 5和RAID 6都是基于分布式校验的思路。
1.3 一个关键认知:RAID解决的是"盘"的问题,不是"数据"的问题
我学习过程中最大的认知纠偏,是把"RAID防数据丢失"这句话彻底删掉。RAID主要防的是物理磁盘故障——某块盘彻底读不出来或者坏道蔓延的时候,阵列能利用冗余信息继续服务,并给你时间更换新盘。但误删文件、格式化错了分区、勒索病毒把文件加密、甚至阵列控制器本身固件出bug,这些场景RAID全都无能为力。尤其是逻辑错误,镜像和校验块会忠实地把错误数据同步到所有副本,到时候越可靠的阵列反而帮你把"坏数据"备份得越完整。
所以一定要把备份和RAID当成两条独立的线。RAID保证硬件坏了不停机,备份保证数据错了还能找回。这个认知后面我还会反复强调,因为实践中太多人在这上面栽跟头。
2. RAID级别逐个拆解:0/1/5/6/10的代价与收益
2.1 RAID 0与RAID 1:两个极端的入门理解
RAID 0只有条带化,没有冗余。最低两块盘,可用容量等于所有盘容量之和,性能几乎线性提升,但任何一块盘损坏,整个阵列的数据全部丢失。它适合存临时文件、渲染缓存这类丢了不心疼的东西。我见过有人拿两块旧盘组RAID 0跑下载机,坏了就重新挂PT重新下载,这种做法挺务实的,但如果你打算用它存照片,请三思。
RAID 1就是镜像,最低两块盘,可用容量是总容量的一半。写入时两份数据同时落盘,所以随机写性能不如单盘,但读取可以从两块盘任选,读性能有提升空间。它冗余最简单可靠,适合系统盘、数据库日志这类容量要求不高但必须稳的场景。两块盘同时坏才会丢数据,这种概率很低,但仍然不是备份。
2.2 RAID 5与RAID 6:企业级主力与它的写入惩罚
RAID 5的最低盘数是三块,采用条带化加分布式校验,可用容量是N减一块盘。它允许阵列中一块盘故障而不丢数据。为什么校验块要分布存放而不是单独用一块盘?因为如果校验集中在同一块盘,那这块盘的写负载会非常高,容易先坏,而且每次写入都要访问这块盘,形成瓶颈。
但RAID 5不是没有代价。每次小规模随机写操作,理论上需要先读出旧数据和旧校验块,计算新校验,再写回数据块和校验块,也就是一次逻辑写要产生四次物理I/O,这被称为写入惩罚。RAID 6因为有两份校验,写入惩罚更高,理论上需要六次物理I/O。所以如果工作负载是大量随机写,比如OLTP数据库,RAID 5和RAID 6的表现会远低于RAID 10。
RAID 6最低四块盘,可用容量是N减两块,允许同时坏两块盘。在单盘容量动辄8TB甚至16TB的今天,RAID 5重建时间往往以天为单位,期间如果再坏一块盘,阵列就彻底废了。所以大容量阵列选RAID 6会更稳妥,这也是为什么现在新项目里RAID 6越来越常见。
2.3 RAID 10:用一半容量换性能的数据库标配
RAID 10是条带化和镜像的组合,先两两镜像,再把镜像组做条带化,最低四块盘,可用容量是总容量的一半。它同时具备镜像的冗余能力和条带化的并行读写性能,随机写入只需要写两份副本,没有校验计算,写入惩罚最低。数据库、虚拟化平台这类读写都重的场景,基本都推荐RAID 10。
冗余方面有个细节值得说:RAID 10允许每组镜像中各坏一块盘,也就是说四块盘的RAID 10最多可以坏两块,但前提是这两块不能是同一镜像组里的两块。它不像RAID 6那样无条件允许任意两块同时损坏。理解这个约束,换盘时心里才有数。
2.4 选型对照表与个人建议
| 级别 | 最少盘数 | 可用容量 | 冗余能力 | 核心代价 | 典型场景 |
|---|---|---|---|---|---|
| RAID 0 | 2 | N × 单盘 | 无 | 任意盘损坏全毁 | 缓存、临时数据、渲染分区 |
| RAID 1 | 2 | N / 2 | 允许1块故障 | 容量减半 | 系统盘、关键日志 |
| RAID 5 | 3 | (N-1) × 单盘 | 允许1块故障 | 写入惩罚、重建风险 | 文件共享、备份存储池 |
| RAID 6 | 4 | (N-2) × 单盘 | 允许2块故障 | 写入惩罚更高 | 大容量数据仓库、冷数据 |
| RAID 10 | 4 | N / 2 | 每镜像组各允许1块故障 | 容量减半 | 数据库、虚拟化、高并发业务 |
如果你现在问我怎么选,我的思路很简单:追求极致写性能就RAID 10;容量优先且盘数多、单盘容量大就RAID 6;预算紧张、盘数少、存的是不太要紧的数据才考虑RAID 5;RAID 0和RAID 1则看具体场景,前者给临时数据提速,后者给系统盘兜底。没有绝对的好坏,只有适合不适合。
3. 软件RAID实战:用mdadm从创建到上线
3.1 为什么先学软RAID:硬件阵列卡和mdadm的双轨思路
生产环境里很多服务器带硬件阵列卡,比如各类服务器主板上集成的LSI/Avago系列芯片方案,装系统时按Ctrl+H或者Ctrl+R进入阵列卡配置界面,先建好逻辑盘再装Linux,系统层面看到的是单块"虚拟盘"。这种方式有个好处:阵列管理独立于操作系统,甚至可以在装系统前完成。
但学习阶段,我强烈建议先玩软RAID,也就是Linux内核自带的md模块配合mdadm管理工具。原因有三:第一,任何一台普通PC甚至虚拟机都能实验,不需要专门的阵列卡硬件;第二,mdadm的命令行方式能把阵列的创建、故障、重建过程完全透明地暴露出来,/proc/mdstat里每个字符的变化都是活教材;第三,云服务器和很多虚拟化环境根本不提供硬件阵列卡,纯软件方案照样能实现RAID级别。先弄懂原理,再去碰硬件阵列卡,你会轻松很多。
3.2 磁盘规划与环境检查
我这里用一台普通的Linux服务器演示,给它挂了三块同样大小的磁盘(/dev/sdb、/dev/sdc、/dev/sdd),再加一块备用盘(/dev/sde),准备组一个带热备盘的RAID 5阵列。先跑几个命令看看磁盘现状:
lsblk fdisk -l cat /proc/mdstatlsblk能直观看到磁盘有没有分区、挂载点情况。fdisk -l会显示每块盘的容量和磁盘类型。cat /proc/mdstat这一步很关键,很多新手上来就建阵列,完全不知道这台机器上已经有别的RAID在跑,结果把旧阵列的盘也拉进新阵列,酿成事故。
如果磁盘之前被用来组过软RAID,盘上会残留md超级块。最好先清理干净再复用:
mdadm --zero-superblock /dev/sdb /dev/sdc /dev/sdd wipefs -a /dev/sdb /dev/sdc /dev/sddwipefs会把分区表签名和文件系统签名都清掉,避免后续创建阵列时系统误判磁盘已占用。这一步在实验环境里看似多余,在真实服务器上换旧盘时却是保命操作。
3.3 创建RAID 5阵列并理解初始化过程
执行创建命令时,把三块数据盘加一块热备盘一起交给mdadm:
mdadm --create --verbose /dev/md0 --level=5 --raid-devices=3 --spare-devices=1 /dev/sdb /dev/sdc /dev/sdd /dev/sde--create表示新建,--level=5指定RAID级别,--raid-devices=3说明数据盘是三块,--spare-devices=1说明额外附带一块热备盘。命令执行后会提示是否继续,输入y回车。这时候立刻打开另一个终端看状态:
cat /proc/mdstat会看到类似这样的输出:
Personalities : [raid6] [raid5] [raid4] md0 : active raid5 sde[3](S) sdd[2] sdc[1] sdb[0] 2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU] [=>...................] resync = 5.2% (109568/2095104) finish=2.6min speed=13333K/sec不要被这堆输出吓到。我教你三分钟读懂:第一行列出内核支持的RAID级别;第二行显示md0处于active状态,后面括号里的(S)表示sde是spare热备盘;第三行的[3/3]表示三块数据盘全部在线,[UUU]里的U代表每块盘状态正常,如果是_就代表该盘已掉线;最后一行是初始化进度。RAID 5创建后会立刻做一次全量初始化,目的是把校验数据计算并写满全盘。这个过程叫resync,理论上阵列在初始化期间就可以挂载使用,但我会建议等它跑完再正式上线,否则初始化读盘和业务读写互相争抢I/O,双方速度都会很难看。
创建成功后再用mdadm --detail查看更完整的信息:
mdadm --detail /dev/md0这里面有阵列UUID、级别、块大小(Chunk Size)、设备列表、事件计数等。事件计数值得注意,每次阵列状态变化它都会+1,后续排查问题时它是个重要的参照物。
3.4 格式化、挂载与开机自动加载
阵列设备创建完成后,要像普通磁盘一样格式化。文件系统选型我在后面专门讲,这里先用XFS做演示:
mkfs.xfs /dev/md0 mkdir -p /storage mount /dev/md0 /storage df -h /storage如果一切正常,/storage就能正常读写。这里我要强调一个新手容易犯的错:直接把/etc/fstab写设备名。
echo "/dev/md0 /storage xfs defaults 0 0" >> /etc/fstab这样做存在隐患。系统重启后设备名可能因为盘符漂移(比如原来sdb变成了sdc)而变掉,导致挂载失败。正确做法是用UUID:
blkid /dev/md0拿到UUID后,在/etc/fstab里写成如下格式:
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /storage xfs defaults,nofail 0 0nofail选项的意思是,就算开机时这个设备因为某些原因没出现,系统也不会卡在等待挂载上,这个选项在拔掉外置盘或阵列故障时能帮你避免开机卡死。
另外还要把阵列信息写入mdadm的配置文件,否则重启后内核可能无法自动识别组装阵列:
mdadm --detail --scan | tee -a /etc/mdadm/mdadm.conf在Debian/Ubuntu系统上,更新完配置后执行update-initramfs -u刷新一下启动映像;在RHEL/Rocky系上则执行dracut --force,让新配置进入引导环境。这一步经常被忽略,结果就是重启后阵列设备消失,吓得人以为数据全没了,其实只是内核没去扫描组装。
4. 阵列健康监控与故障演练:掉盘、热备、扩容一次讲透
4.1 日常体检:三行命令看懂阵列状态
阵列建好之后,接下来是长期维护。我的习惯是每天早上先跑这三条命令再干别的:
cat /proc/mdstat mdadm --detail /dev/md0 smartctl -H /dev/sdb/proc/mdstat看阵列级别、状态、重建进度;mdadm --detail看详细设备情况和事件计数;smartctl -H看物理磁盘的健康自检结果。smartctl是smartmontools包提供的,没有的话先安装。如果磁盘的SMART状态显示FAILURE,哪怕阵列还显示healthy,也说明这块盘随时可能出问题,应该尽快安排更换。
上面三条命令适合手动巡检,但你不可能一天到晚盯着终端。更实际的方案是用系统服务做自动监控。很多发行版自带mdmonitor服务,如果没有,也可以用cron脚本每5分钟跑一次mdadm --monitor,把状态异常发邮件:
mdadm --monitor --daemonize --syslog --mail=admin@example.com --delay=300 /dev/md0--delay=300表示每300秒检查一次,有事件才通知。真实生产环境里我会同时配置邮件告警和短信,避免邮件被埋没在垃圾箱里。
4.2 热备盘机制:从配置到自动顶替
回到刚才创建阵列时那块标记为(S)的sde热备盘。热备盘平时不参与读写,盘子闲着,但阵列会一直保持对它的监控。一旦某块数据盘故障掉线,热备盘会自动顶上,立即开始重建,不需要人工干预。
验证这个机制最直接的办法就是模拟故障。注意:下面这个操作会在你的测试机器上真实地触发阵列重建,请确保操作对象是实验盘,不是生产数据盘。
mdadm --fail /dev/md0 /dev/sdb cat /proc/mdstat执行后,/proc/mdstat里原本的[UUU]会变成[U_U],同时你会看到sde从(S)变成了正常的编号,并且resync进度开始增长。这就是热备盘自动顶替的全过程。阵列从"三块数据盘一块热备"变成"两块数据盘正常工作、热备盘转正并正在补数据",自动切换速度很快,业务基本无感。
4.3 完整故障演练:模拟掉盘到换上新盘
热备盘能兜住一次故障,但如果故障盘本身要拔掉换新,流程要严谨。很多新手犯的错误是直接物理拔盘。在真实服务器上,如果阵列卡或mdadm已经识别到盘故障,直接拔盘问题不大;但如果盘还没被标记为failed,暴力拔出会让系统认为发生了不可预测的掉盘,反而可能触发更复杂的恢复流程。所以正确顺序是先在软件层面标记、移除,再动硬件。
假设刚才那块sdb是真坏了,现在要换新盘,流程如下:
mdadm --fail /dev/md0 /dev/sdb mdadm --remove /dev/md0 /dev/sdb这时系统已经认为sdb不属于阵列了,可以安全关机或热插拔更换。如果是支持热插拔的背板,直接换上新盘,然后扫描新盘:
echo "- - -" > /sys/class/scsi_host/host0/scan lsblk新盘可能出现在sdb位置,也可能因为盘符漂移变成sdf之类。找到新盘设备名后,把它加进阵列:
mdadm --add /dev/md0 /dev/sdb cat /proc/mdstat新盘加入后,阵列会自动开始重建,把它恢复到完整状态。到这里,一次完整的"发现故障—标记故障—移除—换盘—重新加入"流程就走完了。核心心法就一句话:先软后硬,先标记后拔盘。
4.4 扩容操作:加盘、reshape与文件系统扩展
阵列空间不够用了,有两种思路。一种是把现有阵列的盘换成更大容量的盘,逐块替换并等待重建;另一种是往阵列里加硬盘,增加数据盘数量。第二种涉及一个叫reshape的过程,也就是阵列几何结构重排,数据会重新打散分布到更多盘上,整个过程需要较长时间。
以三块数据盘升级为四块为例:
mdadm --add /dev/md0 /dev/sdf mdadm --grow /dev/md0 --raid-devices=4注意,--raid-devices=4这个参数对应的是数据盘数量,不是总盘数。扩容前务必确认新盘容量不小于现有数据盘容量。reshape开始后,/proc/mdstat会显示状态:
[UUUU] [=================>] reshape = 30.2%reshape跑完后,阵列容量已经变大,但文件系统还不知道这事儿。文件系统扩容要按类型操作:XFS直接挂载状态下执行xfs_growfs /storage;ext4则要先卸载,再执行e2fsck -f /dev/md0和resize2fs /dev/md0。这里再次体现XFS的优势——在线扩容非常方便。
扩容和生产环境的结合要谨慎。reshape期间阵列同样处于降级或半降级状态,一旦再坏盘,数据风险比平时更高。所以扩容前做备份、扩容中盯监控、扩容完成后验证数据,这条铁律不要省。
5. 踩坑记录:重建风险、配置丢失与其他常见问题
5.1 重建期间的"第二块盘"诅咒
我在文章开头提到过帮朋友处理掉盘报警那件事,最惊险的不是第一块盘坏了,而是重建过程中的第二块盘风险。
软阵列里,一块盘坏掉后,阵列转入degraded状态,你还有冗余撑着。但重建开始时,系统会疯狂读取所有剩余盘上的数据来重新计算校验。这场高强度的读操作相当于给所有老盘做了一次压力测试。同批次购买、同样使用年限的盘,很可能在第一块盘坏掉的时候已经处于亚健康状态,重建的压力一来,第二块盘也跟着掉线。两块盘同时缺失,RAID 5直接阵列失效。
我的应对策略有三个:第一,大容量、高危的存储池尽量选RAID 6,给自己留出第二块盘的容错空间;第二,保持热备盘在位,尽量缩短阵列处于degraded状态的时间;第三,手动重建时尽量安排在业务低峰期,并且盯着重建进度,发现某块盘SMART数值恶化立刻人工介入。记住,重建本身是对整个阵列的一次大考,不是后台自动跑完就万事大吉。
5.2 mdadm.conf丢失之后怎么救阵列
实际工作中经常遇到这种场景:系统重装了,或者/ etc/mdadm/mdadm.conf文件被误删了,重启之后发现/dev/md0没出现,数据像消失了一样。很多人这时候就慌了,其实只要盘上的md超级块还在,阵列就能重新组装起来。
软阵列的超级块(superblock)里记录了阵列的UUID、级别、成员盘、事件计数等完整元数据,这些信息是持久化保存在每块成员盘上的。mdadm.conf只是帮助系统启动时自动去扫描组装,它本身不是数据的唯一凭据。救回阵列的方法是手动扫描和组装:
mdadm --examine /dev/sdb /dev/sdc /dev/sdd mdadm --assemble --scan mdadm --assemble /dev/md0 /dev/sdb /dev/sdc /dev/sdd先执行mdadm --examine看盘的超级块信息,确认这三块盘属于同一个阵列(对比UUID和事件计数)。然后mdadm --assemble --scan让mdadm自动从已知盘的超级块中找阵列。如果自动扫描因为设备顺序问题失败,就手动指定成员盘去组装。
组装成功后,/dev/md0会重新出现,数据完好。之后记得把配置重新写进mdadm.conf并刷新initramfs,否则下次重启还是回不来。
5.3 阵列上的文件系统选择与块大小对齐
阵列只是提供了一块连续的逻辑设备,用什么文件系统在上面构建,直接影响最终性能和管理便利度。
XFS和ext4是我在Linux软阵列上的两个主要选择。XFS对超大文件和顺序读写性能出色,支持在线扩容,是目前很多Linux发行版的默认文件系统,适合数据存储池。ext4稳定性和兼容性极好,小文件表现不差,单文件最大容量限制对一般场景也够用。如果要跑数据库,我往往会在阵列之上再叠加LVM,不直接建文件系统,这样后面可以灵活做快照、按需扩容卷。
还有一个参数容易被忽略:条带对齐。RAID阵列有chunk size(默认512K),文件系统如果不知道这个底层的条带宽度,可能把逻辑块跨在两个条带单元上,导致一次小写操作要额外读写多个盘。XFS在创建时可以指定:
mkfs.xfs -d su=512k,sw=3 /dev/md0su对应chunk size,sw对应数据盘数量。ext4则用-E stride和stripe-width参数。平时测试用默认参数无所谓,但生产环境的存储池,对齐参数值得认真算一算,效果能立竿见影。
5.4 RAID不是备份:这个认知越早建立越好
再强调一遍我在1.3节说过的话,因为这是我从差点数据全毁的教训里总结出来的核心认知。RAID能防硬盘物理故障,但防不了rm -rf、防不了勒索病毒、防不了文件系统逻辑错误、防不了阵列控制器的固件bug。甚至RAID 1这种镜像级别,如果控制器在写入时把错误数据同时写到了两块盘,备份的效果反而变成了"完整地复制错误"。
所以任何阵列都必须有独立的备份链路。我的经验是三件套:底层做快照(LVM快照或文件系统快照)、异地做定时同步(rsync或restic)、关键数据再放一份离线备份。3-2-1原则(三份数据、两种介质、一份离线)虽然老生常谈,但每次觉得"冗余够了"的时候,想想如果整个阵列卡烧了、或者机房进水,你的"冗余"还剩什么。
6. 软硬RAID选型思考:从实验环境到生产环境的距离
6.1 硬件RAID的真实价值在哪里
学完软RAID再去碰硬件阵列卡,会有一种"哦原来如此"的通透感。硬件阵列卡本质上就是把条带化、校验计算、缓存这些工作从CPU手里接过去,用卡上的专用芯片完成,再配一块带电池或电容的写缓存(write cache),让写入可以先缓存在卡上再统一落盘。在随机写密集的场景,硬件卡的优势非常明显,这也是数据库服务器普遍使用硬件阵列卡的原因。
Linux对主流阵列卡的支持其实相当成熟。过去很多人一买服务器就到处找阵列卡驱动,其实现代内核基本内置了megaraid_sas等主流驱动,装上系统后用工具就能看到阵列信息,比如MegaRAID系列卡的 storcli 和 perccli。相比之下,真正让人头疼的反而是硬件故障——阵列卡本身坏了,又不容易找到同型号替换卡时,数据恢复会变得非常棘手。所以硬件RAID不是万能的,它只是把故障和性能问题转移到了另一个层面。
6.2 Linux内核软RAID的可靠性底线
同时也要给软RAID正名。Linux的md是内核级实现,不依赖任何特定硬件,盘拿下来换一台机器装个系统就能重新组装识别,可移植性反而是它的优势。没有电池缓存,写入掉电风险可以用文件系统日志来缓解;没有专用芯片,校验计算占用的CPU在现代服务器上根本不算事。
实际项目中,中小规模的文件存储、备份池、日志归档,软RAID完全够用。我自己就有一台存储服务器用四块盘做软RAID 6跑了三年多,中间经历过两次掉盘更换,没有任何数据损失。关键是要把监控和备份两条线做扎实。软RAID真正的短板在于阵列卡级的缓存性能和企业级的管理工具生态,如果你要跑高并发数据库,还是老老实实上硬件卡加BBU写缓存。
6.3 我的学习路线建议与最终体会
如果让我给后来者画一条学习路线,我会建议按这个顺序走:先读两遍man mdadm,在虚拟机里加四块虚拟盘创建RAID 0/1/5/6/10各玩一遍,搞清楚/proc/mdstat每一段的含义;然后主动执行mdadm --fail模拟故障,观察热备盘顶替和重建全程;再手动执行一遍"故障、移除、加盘、重建、扩容、reshape"的完整生命周期,把每个阶段的状态都截图记录下来。最后把阵列删掉重来一次,直到不看任何资料也能独立操作。
这套流程走完,你对RAID的理解会远超那些只会背面试答案的候选人。我自己的体会是,真正让人成长的不是创建阵列时的顺利,而是把阵列折腾坏再救回来的过程。你越敢在实验环境里破坏它,就越知道生产环境里哪些操作是雷区。
最后分享一个每次换盘前我都会默念一遍的口诀:先fail标记、再remove摘除、后拔盘更换、再add加入、最后盯重建。每一步都停下来看一眼/proc/mdstat和mdadm --detail,确认当前状态符合预期再做下一步。这套慢动作流程救过我太多次了,希望也能帮你少踩几个坑。