ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

MegaCli与StorCLI实战:Linux服务器RAID卡管理运维指南

MegaCli与StorCLI实战:Linux服务器RAID卡管理运维指南 1. 为什么到今天还要翻这些命令行工具先说一个真实场景凌晨两点业务告警群里有人喊数据库写入超时你ssh上去一看/var/log/messages里刷满了SCSI错误df -h显示目录变成了只读。这时候你心里大概有数了——RAID阵列里面某块盘出问题了。但问题来了服务器在几百公里外的机房没有远程管理卡界面你手上只有一个终端窗口怎么办答案就是MegaCli和StorCLI。这两个工具是LSI现在叫Broadcom系列RAID卡的标准命令行管理工具几乎所有基于LSI芯片的阵列卡——包括戴尔、惠普、浪潮、曙光、中兴这些整机厂商定制卡——都能用它们来管理。它们能做的事情很全查看控制器状态、物理盘和虚拟盘的健康状况、创建和删除阵列、配置热备盘、触发和监控重建、查看控制器日志甚至还能看电池/电容的健康状态。换句话说机房里的Linux服务器只要有SSH能上去你就可以用它把RAID卡摸得清清楚楚完全不需要进BIOS或者等远程管理卡恢复。我看到很多同学的习惯是机器装完系统以后这些工具就再也不碰了。这个习惯得改。RAID卡是服务器里最闷头干活的部件平时不声不响一旦出事往往就是数据安全级别的严重问题——阵列降级、逻辑盘掉线、硬盘被标记为Failed这些都不是靠重启能解决的。更麻烦的是很多故障如果早一点发现处理成本非常低拖到业务已经受影响那就只能祈祷备份还活着了。这篇手册的目标读者是那些需要独立管理服务器、但还没有系统接触过命令行RAID管理的运维、DBA、SRE同学。我尽量把命令、参数、输出解读和坑都写清楚让这篇文章能当工具书放收藏夹里用遇到情况翻到对应章节照着操作就行。MegaCli和StorCLI的命令风格不一样我会两边都写方便你根据手头卡的类型和习惯选一套。需要说明的是我这篇内容里用到的命令都是最常见的生产实践组合不同固件版本和不同整机厂商的定制卡之间会有细微差异操作前建议先跑一遍查询命令确认本机情况别一上来就执行删除、重建这类危险操作。2. RAID级别到底怎么选0、1、5、10的区别先搞明白很多人在网上搜raid 0 1 5 10 区别然后看了一堆理论回到机房还是不知道怎么选。这里我用最直白的方式把这些级别过一遍因为后面所有命令行操作都建立在你对阵列形态的理解上。2.1 四种常用级别一句话版RAID0条带把两块或更多硬盘合并成一块数据分散写在所有盘上。读写性能几乎线性提升但没有任何冗余任何一块盘坏掉整个阵列数据全部丢失。适合存放缓存、临时数据或者你明确知道丢得起的数据。RAID1镜像至少两块盘同一份数据同时写两份。坏一块盘另一块还是完整的直接换盘重建即可。写性能略降读性能有提升是系统盘最稳妥的选择。RAID5分布式奇偶校验至少三块盘数据加校验信息分散存放在所有盘上。允许坏一块盘数据不丢。空间利用率是 (n-1)/n兼顾容量和冗余。不过重建时有风险后面细说。RAID10条带镜像至少四块盘先做镜像再做条带。兼顾性能和冗余坏一块盘只影响对应镜像对重建速度比RAID5快得多。缺点是空间利用率只有50%成本高。2.2 选型的真实逻辑实际生产环境里我的习惯是操作系统盘两块盘做RAID1。系统盘IO压力不大冗余是第一位的重建也快。数据库数据盘/日志盘如果预算允许优先RAID10。尤其是MySQL、Oracle这类对随机IO敏感的业务RAID10的写放大明显低于RAID5性能更稳定。海量存储、视频、备份、归档RAID5或者RAID6。这类场景顺序读写多RAID5的空间利用率优势能省不少盘位。超过8块盘的大阵列我更倾向RAID6能容忍同时坏两块盘避免重建期间第二块盘故障导致全军覆没。冷备/不重要的数据有的服务器甚至直接做JBOD直通不组阵列把盘交给操作系统管理。这里必须强调一句RAID不是备份。RAID解决的是硬盘硬件故障导致的可用性问题它防不住误删除、勒索软件、逻辑损坏、控制器故障。阵列做得再稳该有的备份和容灾还是得有。这个观念不摆正后面操作再多也是白搭。还有一个常被忽略的点是重建窗口。RAID5在坏一块盘以后进入降级状态整个阵列的读写都会受影响重建期间如果再坏一块盘数据就无法恢复了。盘越大、数据越多、控制器越旧重建时间越长。一块16TB的盘在老旧RAID卡上重建跑两三天很正常。所以阵列卡选型和RAID级别选择是环环相扣的决策而不是看哪个名字好听。2.3 RAID级别改了能无缝切换吗有人会问我现在是RAID1想改成RAID5能在线迁移吗分情况如果你用的是阵列卡的在线迁移功能确实可以在线的把RAID级别的部分属性做转换比如RAID1迁移到RAID5RAID5迁移到RAID6。但这不是所有卡所有固件都支持而且在线迁移期间IO性能和数据安全风险都不小。更常见、更稳妥的做法是把数据备份出去删掉阵列重新创建新级别再把数据导回来。尤其是在容量布局变化比较大的场景下老老实实重新规划才是生产环境该有的态度。3. 环境准备先把工具装好再谈其他3.1 先确认RAID卡是什么型号在装工具之前你得知道自己机器上插的是什么卡。最简单的方式lspci | grep -i raid输出类似03:00.0 RAID bus controller: LSI Logic / Symbios Logic MegaRAID SAS-3 3108 [Invader] (rev 02)看到LSI Logic / Symbios Logic MegaRAID或者Broadcom / LSI字样说明这就是MegaCli/StorCLI能管的卡。如果是其他芯片组比如Adaptec、Areca或者Intel集成的软RAID那本篇的命令很多就不适用了这点要先区分清楚。另外可以看看内核加载的驱动模块lsmod | grep -E megaraid|mpt3sas|mpt2sasmegaraid_sas是绝大多数MegaRAID卡的驱动mpt3sas对应的是SAS3008/3108等三模式控制器。看到这些模块基本就可以放心往下走了。3.2 MegaCli安装与版本选择MegaCli是LSI时期的标准工具目前官方已经停止更新但对老卡比如9240、9260、9341这类SAS-2/SAS-3时代的卡支持得很好。整机厂商比如戴尔的卡对应的其实是同芯片的perccli/omcli命令体系不太一样不过大部分还是兼容MegaCli的基础命令。安装方式很简单在Linux下一般拿到的是一组rpm或deb包比如rpm -ivh MegaCli-8.07.14-1.noarch.rpm装完以后执行文件在/opt/MegaRAID/MegaCli/MegaCli64。顺手做个软链接方便调用ln -s /opt/MegaRAID/MegaCli/MegaCli64 /usr/local/bin/MegaCli64MegaCli有个特点某些老版本在较新的glibc系统上会报找不到libstdc.so.6之类的错误因为系统里只有64位库而老工具依赖32位兼容库。解决方法是装对应的glibc.i686和libstdc.i686或者干脆换用StorCLI。3.3 StorCLI安装与新版命令体系StorCLI是Broadcom收购LSI之后推出的新一代工具命令结构比MegaCli清晰得多不再是前面一堆-加缩写的方式而是类似控制器/卷/磁盘的层次化路径。新卡比如9361-8i、9460-16i、95xx系列优先选StorCLI老卡理论上StorCLI也兼容但我实际用下来感觉部分旧固件支持得不如MegaCli细腻。安装同样解包rpmrpm -ivh storcli-007.1709.0000.0000-1.noarch.rpm装完后主程序在/opt/MegaRAID/storcli/storcli64同样建议做软链接。运行一下看是否生效storcli64 show如果能列出控制器和基本状态那就说明工具和卡对上了。StorCLI还有个优点就是新版本同时发布了UEFI版本和Windows版本在系统进不去、需要在启动环境操作的场景下UEFI Shell里也能跑storcli这个后面会细说。3.4 下载渠道的坑围绕storcli下载这个热搜词我多说几句。网上能搜到很多第三方下载站但强烈建议只认准Broadcom官方支持站点broadcom.com下的support页面。第三方站点的问题一是版本混乱二是文件可能被改过服务器上的工具可不敢乱来。另外一个实际问题是Broadcom官网下载需要注册账号嫌麻烦的话可以直接在已经装好同型号卡的正常机器上打包拷贝整个/opt/MegaRAID目录到新机器我经常这么干只要系统架构一致工具拷贝过去基本能用。4. 查询类命令先把阵列状态看明白工具装好后的第一件事永远不是去创建阵列而是把自己手上的RAID状态查清楚。下面这组查询命令是日常用得最频繁的我按场景拆开讲。4.1 控制器整体状态MegaCli风格MegaCli64 -AdpAllInfo -aALLStorCLI风格storcli64 /c0 show all这两个命令展示的是控制器的完整信息固件版本、BIOS版本、板载内存、BBU电池状态、支持的RAID级别、当前配置的虚拟磁盘数量等等。生产环境里我一般用一个加过滤的展示方式只看关键行MegaCli64 -AdpAllInfo -aALL | grep -E Firmware|Product Name|BBU|Memory|Rebuild4.2 虚拟磁盘逻辑卷状态虚拟磁盘就是你在阵列卡上划分出来的逻辑盘操作系统看到的是它而不是物理盘。查询命令MegaCli64 -LDInfo -LALL -aALLStorCLIstorcli64 /c0/v0 show all输出里最重要的是几个字段StateOptimal正常、Degraded降级有盘坏了、Offline离线很危险RAID LevelPrimary-1/Secondary-0/RAID Level Qualifier-0这种输出自己换算一下Span Depth跨距数RAID10通常会显示Size逻辑盘容量Sector Size建议确认是512还是4K影响后续分区对齐4.3 物理磁盘状态这块是最容易被问到的也是所有后续操作的基础MegaCli64 -PDList -aALLStorCLIstorcli64 /c0/e0/s0 show all # 或者批量 storcli64 /c0 showStorCLI的磁盘路径格式是/c0/e0/s0含义是控制器0、Enclosure 0、Slot 0。注意这里的e是磁盘笼编号SAS直连盘柜一般e0如果后面挂了扩展柜会有e1、e2。物理盘状态字段常见值有状态含义处理建议Online在线正常参与阵列无需处理Unconfigured(Good)未配置但健康可以用来建阵列或做热备Hot Spare热备盘自动顶替故障盘Rebuild正在重建不要给它加负载观察进度Failed故障准备换盘Foreign外部配置来自其他控制器需要先处理foreign状态Missing掉线检查线缆/背板/盘是否掉电物理盘还有几个值得关注的属性比如Media Error Count、Other Error Count、Predictive Failure Count。如果Predictive Failure Count大于0说明磁盘固件已经通过SMART疑似盘要出问题这时候哪怕状态还是Online也要安排业务低峰期换盘。等状态变成Failed再处理往往就有点被动。4.4 电池和电容状态阵列卡缓存能不能在断电时保住全靠BBU电池或者SuperCap超级电容。查询命令MegaCli64 -AdpBbuCmd -GetBbuStatus -aALL storcli64 /c0/bbu show all关键看Battery State是不是Optimal以及Relative State of Charge是不是接近100%。如果电池状态变成Degraded或者Learn Cycle跑不完缓存策略可能会被自动从WriteBack降级为WriteThrough性能大幅下降。实际案例里我见过一个数据库性能突然掉一半的查了半天最后发现是阵列卡电池老化写缓存被关闭了。Learn Cycle电池学习周期是控制器定期做的充放电校准一般在90天左右自动触发一次。学习期间电池会短暂进入充电/放电状态这是正常的但如果学习周期频繁失败那就要考虑换电池/电容了。4.5 事件日志故障排查时的关键证据来源MegaCli64 -FwTermLog -Dsply -aALL storcli64 /c0 show events事件日志里能看到磁盘上下线、重建开始/结束、温度告警、BBU状态变化等记录时间戳一般都有。遇到说不清的问题先从事件日志找线索往往比瞎猜高效得多。比如磁盘在短时间内反复上线又下线这种flap现象通常是线缆、背板或者磁盘本身接触不良事件日志里会非常明显。5. 阵列配置实操创建、删除、热备一条龙到了大家最关心的动手环节。先警告一句以下操作会改变存储布局执行前务必确认磁盘编号无误数据已经备份。我下面所有示例里的磁盘编号都是举例你实际操作时必须以PDList查到的实际Enclosure和Slot号为准。5.1 创建阵列假设我有三块盘Enclosure 0的Slot 0、1、2想组一个RAID5。MegaCli方式MegaCli64 -CfgLdAdd -R5[0:0,0:1,0:2] -a0StorCLI方式storcli64 /c0 add vd typeraid5 drives0:0,0:1,0:2这里解释一下编号规则-R5[0:0,0:1,0:2]中方括号内逗号分隔的是每块盘的Enclosure ID:Slot ID。-a0表示控制器0。StorCLI的drives0:0,0:1,0:2同理前面的0是Enclosure后面的0/1/2是Slot。创建成功后如果阵列卡默认不立即初始化你可能会发现阵列状态是Online但还没有后台初始化Background Init。建议手动触发一下初始化把一致性校验底打好MegaCli64 -LDInit -Start -L0 -a0 storcli64 /c0/v0 start init5.2 创建RAID10RAID10需要偶数块盘比如四块盘先两两镜像成两组再条带storcli64 /c0 add vd typeraid10 drives0:0,0:1,0:2,0:3MegaCli写法MegaCli64 -CfgSpanAdd -R10 -Array0[0:0,0:1] -Array1[0:2,0:3] -a0注意RAID10的盘序很重要Array0和Array1的盘最好来自不同的物理背板通道或者不同批次避免同一时间故障。有的RAID卡还支持RAID10的Span深度更多但盘越多风险越大一般生产环境Span深度2就足够。5.3 配置热备盘热备盘可以在阵列里任何盘故障时自动顶替并触发重建强烈建议每一台重要的服务器都配一块。普通热备全局热备命令MegaCli64 -PDHSP -Set -PhysDrv[0:4] -a0 storcli64 /c0/e0/s4 add hotsparedrive如果要指定某个阵列专用热备阵列专用MegaCli是MegaCli64 -PDHSP -Set -PhysDrv[0:4] -Array0 -a0StorCLI是storcli64 /c0/e0/s4 add hotsparedrive dgs0注意用作热备的盘会被擦除原有配置如果这块盘之前有数据或者属于其他阵列操作前一定要确认清楚。我见过一次事故——同事把一块还在线使用中的盘手动设成了热备结果原阵列瞬间缺盘降级。这操作几乎不可逆千万看清盘号再动手。5.4 删除阵列删卷要格外谨慎因为一旦删除阵列上的所有数据立刻不可访问MegaCli64 -CfgLdDel -L0 -a0 storcli64 /c0/v0 del有些控制器会要求确认StorCLI加force参数跳过确认。我不建议在生产环境用force手一抖就没了。删除阵列后原来的物理盘状态会变成Unconfigured(Good)可用于创建新阵列。如果盘上残留了阵列配置信息控制器可能会把它们识别为Foreign状态这时候需要先清掉外来配置storcli64 /c0/fall delete或者用MegaCliMegaCli64 -CfgForeign -Clear -a0这里要特别说明Foreign状态是什么意思它代表磁盘上带有属于另一个控制器的配置信息。比如你从一台坏机器上拆了盘插到新机器新控制器不认识这块盘上的旧配置就会标记为Foreign。如果你确信盘上数据不要了可以清foreign如果数据还要抢救千万别清先想办法用原来的控制器把数据导出来。5.5 关于直通JBOD和系统盘不是所有盘都要进RAID阵列。某些场景下比如大数据节点想让操作系统直接管理每块盘可以设置直通模式。StorCLI里通常的做法是把盘加到一个RAID0卷中但这种做法会带RAID开销新款控制器支持直接将物理盘设为直通盘storcli64 /c0 mode jbod设完以后需要重启之后新插入的盘会默认以JBOD方式呈现给操作系统。MegaCli时代对JBOD的支持比较弱老控制器还是老实组RAID0或者用系统自己的软raid吧。6. 硬盘故障与重建最考验人的排查过程这里我完整讲一个硬盘亮红灯的排查链路你把它当剧本走一遍下次遇到就知道了。6.1 第一步收到告警先确认不是误报先看控制器整体状态storcli64 /c0 show如果显示Degraded说明确有物理盘掉了。再看是哪块盘storcli64 /c0/e0/s0 show all | grep State假设Slot 2状态是Failed那基本可以确定这块盘需要更换了。6.2 第二步定位盘的位置命令行工具能查到的是逻辑编号但你要去机房拔盘总得知道物理位置。先点亮定位指示灯storcli64 /c0/e0/s2 start locate这时候可以看到那块盘前面的蓝色LED灯亮了不同品牌灯的闪烁模式不一样一般是快速闪烁。拔盘前一定记得关掉定位灯storcli64 /c0/e0/s2 stop locate6.3 第三步判断能不能直接拔RAID1/RAID5/RAID10在阵列降级状态下理论上支持热拔插。但要注意先确认这块盘不是缓存盘或者日志盘有些业务把日志放在单独一块盘上拔掉会直接IO报错。检查一下控制器日志确认是物理盘故障还是线缆问题storcli64 /c0 show events | tail -50如果日志反复出现reset、phy相关关键词可能与背板线缆有关拔盘解决不了问题。这种现象常见于服务器多次搬运后SAS线松动或者背板供电不稳。6.4 第四步换新盘并等待自动重建插入新盘后正常流程是新盘被识别为Unconfigured(Good)控制器检测到阵列降级且新盘健康会自动把它配成重建盘并开始后台重建。如果你配置了热备盘这一过程完全不需要人工介入热备盘已经顶上了。查看重建进度MegaCli64 -LDRebuildShowProg -L0 -a0 storcli64 /c0/v0 show rebuild输出里能看到重建百分比和剩余时间。重建期间尽量降低业务压力不要做全量备份、大批量导入导出这类操作。这不是玄学是实打实的IO竞争——重建本身要读源盘所有数据写新盘所有数据业务IO一高重建时间会明显拉长同时源盘如果有隐性问题高负载下更容易再扇区。6.5 重建失败的常见原因实际工作中换盘重建失败比例不低常见原因有新盘和原盘规格不一致容量、转速、扇区大小不同控制器可能拒绝重建。备件盘最好和原型号一致或者至少满足容量不小于原盘、扇区大小一致。背板槽位接触不良换个槽位试试或者把盘插拔一次。控制器认为新盘有Foreign配置先清掉再等自动重建。盘是翻新盘或者有大量坏道重建启动后很快又Failed这种只能再换一块。还有一个容易忽略的场景是系统已经启动完毕、根文件系统所在的阵列盘故障了怎么办这时系统可能已经变成只读甚至挂起在线换盘也救不回当前正在跑的业务进程。所以系统盘阵列必须提前配置热备盘并且监控要盯住否则等你发现的时候基本只能强制重启碰运气了。7. 监控脚本化把RAID健康检查交给计划任务手动查RAID状态终究不是长久之计。生产实践中我强烈建议把RAID健康检查做成定时任务出了问题第一时间通知到人。下面是一个非常简化的示例脚本逻辑是用StorCLI检查所有控制器上的虚拟磁盘状态如果发现Degraded或者Offline就告警再检查物理盘有没有Failed状态顺带看看BBU电池状态。你可以根据实际环境改造成邮件、钉钉/飞书/企业微信机器人Webhook、或者Zabbix/Prometheus采集脚本。#!/bin/bash # raid_check.sh ALERT_URLhttps://your-webhook.example.com/alert HOST$(hostname) # 1. 检查虚拟磁盘状态 VD_STATE$(storcli64 /c0/vall show | grep -E ^[0-9] | awk {print $NF}) echo $VD_STATE | grep -qE Dgd|Ofld|Offline { curl -s -X POST $ALERT_URL -H Content-Type: application/json \ -d {\msg\: \[$HOST] RAID VD Degraded/Offline: $VD_STATE\} } # 2. 检查物理盘状态 PD_FAIL$(storcli64 /c0/eall/sall show | grep -E Failed | wc -l) if [ $PD_FAIL -gt 0 ]; then storcli64 /c0/eall/sall show | grep -E Failed /tmp/raid_alert.txt curl -s -X POST $ALERT_URL -H Content-Type: application/json \ -d {\msg\: \[$HOST] RAID Physical Disk Failed, count$PD_FAIL\} fi # 3. 检查BBU状态 BBU_STATE$(storcli64 /c0/bbu show | grep -i State | head -1) echo $BBU_STATE | grep -qi Optimal || { curl -s -X POST $ALERT_URL -H Content-Type: application/json \ -d {\msg\: \[$HOST] BBU State Abnormal: $BBU_STATE\} }放到crontab里每10分钟执行一次*/10 * * * * /opt/scripts/raid_check.sh这个脚本看起来简单但它把三个最容易出问题的点都覆盖了。实际落地时你还需要考虑告警去重、故障恢复后的自动通知、日志留存等细节。另外脚本本身依赖storcli64命令路径建议在脚本开头显式定义PATH或者使用绝对路径不然cron环境下经常出现command not found的坑。我个人的体会是RAID状态监控是服务器监控里最基础、但也是最容易被遗漏的一项。CPU、内存、磁盘空间大家都盯得紧反而是RAID卡这种底层中的底层常常没人管。而一旦出问题它往往是静默开始的——先是后台重建再是性能下降最后才表现为业务故障。到那一步你已经错过了最佳干预时机。8. 几个容易让人栽跟头的联动场景最后聊几个我在群里、工单里常见到的问题属于踩过才知道疼的典型场景。8.1 整机厂商定制卡与工具版本的兼容性中兴、曙光、浪潮这些整机厂商的服务器很多用的是定制固件版本的LSI/Broadcom卡。比如热搜词里提到的中兴R5300 G3曙光RAID卡配置手册NF5468M6服务器这些机器自带的RAID工具往往是厂商定制的比如曙光有自己的管理工具华为有类似tac或者ssacli基于storcli封装戴尔是perccli惠普是ssacli。表面看命令不同底层思路都一样而且很多通用MegaCli命令在定制固件上也能跑通只是个别参数可能不支持。遇到这种情况我的建议是优先用厂商提供的工具和文档通用工具可以作为交叉验证手段但别拿通用工具去改厂商卡的配置改完万一固件不认麻烦的是自己。8.2 iBMC和RAID控制器通信失败的问题热搜词里有一条communication between the ibmc and raid controller card 1 failed这是整机服务器远程管理卡比如华为iBMC、浪潮BMC、曙光管理卡和RAID控制器之间通信失败的报错。遇到过这个报错的人不少现象是管理界面里看不到RAID卡信息或者管理卡历史记录里频繁刷这条日志。这个问题的根因通常是管理卡固件和RAID卡固件版本不匹配。整机厂商会针对自家机型发布配套的固件版本矩阵跨版本乱升容易导致管理通道握手失败。RAID卡处于高负载或异常状态管理通道超时。可以先尝试重启管理卡的服务比如ipmitool mc reset cold很多时候能恢复通信。RAID控制器出现异常死锁。这种情况更严重可能需要整机重启但重启前建议先用命令行工具确认RAID卷状态避免在阵列故障状态下重启带来二次风险。处理思路是先看管理卡告警详情再对照厂商固件兼容矩阵确认版本组合正常情况升级对齐版本即可解决。别一上来就动配置这问题绝大多数不是配置问题。8.3 新系统与老工具的兼容性一台老服务器装的是CentOS 6上面MegaCli跑得好好的。后来重装成Ubuntu 22.04跑MegaCli报各种库错误这种事很常见。老工具用的是老glibc接口新系统不一定带32位兼容库。此时两条路一是在新系统上装libncurses5、libstdc6:i386等兼容层硬凑二是干脆换用StorCLI新版新工具对新内核的支持好得多。我倾向前者只用于临时查询长期管理迁到StorCLI。8.4 UEFI/BIOS配置界面与命令行工具的边界总有人问如何进入RAID配置传统方式是在开机自检时按组合键比如CtrlR绝大多数MegaRAID BIOS配置工具、CtrlH部分SAS卡或者在三模式卡上按CtrlC进入UEFI RAID配置页。具体按键和界面布局取决于固件这里不多展开。命令行工具的优势是适合批量管理和脚本化而且在不方便进BIOS的远程环境里也能操作。但边界也很明显某些底层操作比如修改控制器模式、升级固件仍需在BIOS/UEFI配置界面或者专门的启动盘环境完成。比如把控制器从IR模式切换到IT模式这种操作命令行做不了必须借助固件刷写工具在DOS或者UEFI下完成。所以不要指望命令行取代所有图形化操作两手都要会。8.5 磁盘顺序变化引发的认盘混乱最后说一个很有迷惑性的坑storcli看到的Slot号、/dev/sda的设备名、操作系统里的盘序三者不是永远一致的。尤其是重启后如果物理盘顺序有变化操作系统盘符可能从/dev/sdb变成/dev/sdc。所以做任何脚本操作只要涉及具体设备建议都用/dev/disk/by-id/或者by-path/方式引用别直接用sdX。否则自动化脚本在系统重启后可能会指向错误的盘写错数据就是事故了。这一点也延伸到一个实际问题很多人在Linux上用fdisk -l看到的是RAID逻辑卷比如/dev/sda实际是对应RAID1的系统卷而/dev/sdb是对应RAID10的数据卷。这时候你想通过命令行查看每个逻辑卷对应哪些物理盘可以用StorCLI的卷详情storcli64 /c0/v0 show all | grep -A5 Physical Disk这样能看到卷和PD的对应关系避免物理盘和逻辑卷的关系在脑子里是一团浆糊。写在最后操作RAID卡这件事核心不在命令记多少而在于对你现在做的事情会带来什么后果有清醒的判断。我见过太多人把CfgLdDel当成重启一样随手敲结果整库数据瞬间蒸发。所以在文章最后我还是想再唠叨两句。第一所有危险操作前把PDList的输出存一份把要操作的危险命令截图或者复制到临时文件里让旁边的同事帮你确认一眼再执行。不是信不过自己是防止半夜困到犯迷糊。第二平时就把工具装好、软链接做好、监控加好别等到出了故障再翻这篇手册现装。阵列卡这个东西平时准备得越细致故障时你的处理空间就越大。第三如果你管理的机器比较多强烈建议把RAID健康检查纳入统一的监控平台不要每台机器各搞各的脚本。统一管理之后你才能在故障还没影响业务的时候就被叫醒而不是被业务方叫醒。我自己在带团队的时候有一条铁律新服务器上线部署单里必须包含安装RAID管理工具、配置健康监控、记录阵列拓扑这三项。这三件事做完了后续几年的运维压力会小很多。这篇手册里的命令你在第一次部署的时候照着跑一遍后面大概率用不着查文档了——但真到用着的那天希望它能帮你省下最宝贵的时间。
返回列表