如何将两条MegaCli命令输出按虚拟磁盘编号匹配合并?
合并MegaRAID虚拟磁盘信息与对应物理盘ID的方法
解决方案
可以用awk一次性处理原始命令输出,直接将每个虚拟磁盘的基础信息和对应的物理盘ID行合并,无需分开执行两次命令:
sudo /opt/MegaRAID/MegaCli/MegaCli64 -LdPdInfo -a0 | awk ' BEGIN { RS=""; ORS="\n\n" } { # 提取虚拟磁盘编号 match($0, /Virtual_Disk([0-9]+)/, vd_match) vd_number = vd_match[1] # 打印当前虚拟磁盘的基础信息 print $0 # 提取所有Slot Number的ID并格式化 drive_ids = "" temp_line = $0 while (match(temp_line, /Slot Number:\s+([0-9]+)/, slot_match)) { drive_ids = drive_ids " " slot_match[1] "," temp_line = substr(temp_line, RSTART + RLENGTH) } # 打印对应格式的物理盘ID行 print "Virtual Drive: " vd_number " Physical Drives ids:" drive_ids }'
工作原理
- 用
RS=""将原始输出按空行分割为每个虚拟磁盘的独立信息块,保证处理单位是单个虚拟磁盘的所有数据 - 从每个块中提取
Virtual_Disk后的编号,确保和目标输出的Virtual Drive编号完全匹配 - 先输出原始的基础信息(RAID级别、状态、磁盘数量等)
- 遍历当前块中的所有
Slot Number,提取磁盘ID并拼接成指定格式 - 输出对应编号的物理盘ID行,并用
ORS="\n\n"保证合并后的每个虚拟磁盘信息块之间保留空行分隔
原有命令无效原因
你之前的命令是先完整输出所有虚拟磁盘的基础信息,再输出所有物理盘ID行,只是简单的顺序拼接,没有将每个虚拟磁盘的信息对应关联,所以会出现所有基础信息在前、所有ID行在后的错位情况。
内容的提问来源于stack exchange,提问作者Josue Baquerizo
相关产品推荐
相关产品推荐

