0

サーバー上で中程度のエラーが発生しているドライブをすばやく見つけることができるように、ワンライナーをまとめました。これは次のようになります。

/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]'

これは、Western Digital ドライブを搭載したサーバーでは問題なく機能しますが、Seagate のサーバーでは次の理由によりワンライナーが機能しません。

awk '/^vendorID  WDC/{p=1}p'

2 つのサーバーの表形式のログの生の出力は、次のようになります。

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で)これを行う方法を誰かが提案できますか?

4

1 に答える 1

0

これが私の解決策です。

/var/lib/einarc/tools/adaptec_arcconf/cli getlogs 1 device tabular | egrep 'serialNumber|mediumErrors|deviceID' | awk '{$2="";print}' | grep -C2 'mediumErrors  [1-9]'

とにかく便利なので、vendorID の代わりに deviceID を探すように少し変更しました。その後、WDC ドライブをフィルタリングしていた awk を簡単に削除できました。-C1 の代わりに -C2 を使用すると、出力のフォーマットが予想と少し異なっていても、すべてのデータを確実に取得できます。

于 2013-04-13T01:10:11.753 に答える