我拼凑了一个单行,所以我可以快速找到任何在服务器上有中等错误的驱动器。就像这样:
/var/lib/einarc/tools/adaptec_arcconf/cli getlogs 1 device tabular | egrep 'serialNumber|mediumErrors|vendorID' | awk '{$2="";print}' | awk '/^vendorID WDC/{p=1}p' | grep -C1 'mediumErrors [1-9]'
虽然这在拥有西部数据驱动器的服务器上运行得非常好,但是有一些是Seagate,因此,由于以下原因,一个衬垫不起作用:
awk '/^vendorID WDC/{p=1}p'
两台服务器上的表格日志的原始输出看起来像这样。
Western Digital:
driveErrorEntry
smartError ....................... false
vendorID ......................... LSI CORP
serialNumber .....................
wwn .............................. 41121562336217ea
deviceID(T:L) .................... 0(0:0)
productID ........................ SAS2X26
numParityErrors .................. 0
linkFailures ..................... 0
hwErrors ......................... 0
abortedCmds ...................... 10
mediumErrors ..................... 0
smartWarning ..................... 0
driveErrorEntry
smartError ....................... false
vendorID ......................... WDC
serialNumber ..................... WD-WCAW25942651
wwn .............................. 0000000000000000
deviceID(T:L) .................... 13(13:0)
希捷:
Controllers found: 1
ControllerLog
controllerID ..................... 0
type ............................. 0
time ............................. 1365801225
version .......................... 3
tableFull ........................ false
driveErrorEntry
smartError ....................... false
vendorID ......................... LSI CORP
serialNumber .....................
wwn .............................. 411313200032c06a
deviceID(T:L) .................... 0(0:0)
productID ........................ SAS2X26
numParityErrors .................. 0
linkFailures ..................... 0
hwErrors ......................... 0
abortedCmds ...................... 12
mediumErrors ..................... 0
smartWarning ..................... 0
我想要获得的输出如下:
serialNumber WD-WMAYP5242602
mediumErrors 457
vendorID WDC
serialNumber WD-WMAYP3262235
mediumErrors 2
我想确保我没有过滤掉重要信息,因为一台服务器没有WDC驱动器,但同时我也不希望任何不直接涉及硬盘的信息 - 即无论安装的驱动器类型如何,都应忽略控制器输出。
任何人都可以建议一种可行的方法吗(在bash中)?
答案 0 :(得分:0)
这是我的解决方案。
/var/lib/einarc/tools/adaptec_arcconf/cli getlogs 1 device tabular | egrep 'serialNumber|mediumErrors|deviceID' | awk '{$2="";print}' | grep -C2 'mediumErrors [1-9]'
我稍微修改它以查找deviceID而不是vendorID,因为这样更有用,然后我可以简单地删除过滤WDC驱动器的awk。 -C2而不是-C1也确保即使输出的格式与预期稍有不同,我仍然可以获得所有数据。