下面是惠普萨克利命令查看配置的硬件 RAID 详细信息:
ssacli ctrl slot=0 show config
其输出如下:
HPE Smart Array P408i-a SR Gen10 in Slot 0 (Embedded)
Internal Drive Cage at Port 1I, Box 1, OK
Internal Drive Cage at Port 2I, Box 0, OK
Port Name: 1I (Mixed)
Port Name: 2I (Mixed)
Array A (Solid State SAS, Unused Space: 0 MB)
logicaldrive 1 (447.10 GB, RAID 1, OK)
physicaldrive 1I:1:1 (port 1I:box 1:bay 1, SAS SSD, 480 GB, OK)
physicaldrive 1I:1:2 (port 1I:box 1:bay 2, SAS SSD, 480 GB, OK)
SEP (Vendor ID HPE, Model Smart Adapter) 379 (Port: Unknown)
我必须弄清楚大批名称,以便通过搜索我从用户输入获得的匹配磁盘信息来删除它。例如,如果磁盘输入是1I:1:1然后我必须在上述命令的输出中搜索该字符串。由于该磁盘可用且匹配,我必须提取阵列名称(此处为“A')一旦我得到这个阵列参数,我就可以继续删除这个现有的 RAID 配置。
ssacli ctrl slot=0 show config | grep -B 4 '1I:1:1' | grep Array | awk '{print $2}'
上述命令的问题是,
值 4 中grep -B不能始终保持不变,因为匹配的磁盘可能位于输出中阵列下的第一、第二或第三等位置。
输出中可能有多个可用的 RAID 阵列配置,因此可能有 ArrayA,乙,C等等,我必须找到并检索最近的“大批" 与我的输入磁盘匹配的字符串
答案1
以下 perl oneliner 逐行读取文件,记录最后一个数组,直到遇到物理驱动器“1I:1:1”的行:
ssacli ctrl slot=0 show config | perl -ne 'if ($_ =~ /Array (.)/) { $array = $1; } elsif ($_ =~ /physicaldrive 1I:1:1/) { print $array; exit; }'