bityard Blog

// Nagios Monitoring - IBM SVC and Storwize (Update)

After upgrading our test IBM SAN Volume Controller (SVC) systems from version 7.3.0.7 to 7.3.0.8 or later, the previously described Nagios monitoring plugin (Nagios Monitoring - IBM SVC and Storwize) ceased to work. A quick check revealed that the “wbemcli” command line tool from the Standards Based Linux Instrumentation project, which is used in the Nagios plugin to query the CIMOM server on the SVC or Storwize systems, would fail with the following error message:

$ /opt/sblim-wbemcli/bin/wbemcli -dx -noverify ecn https://user:pass@svc-test:5989/root/ibm
*
* /opt/sblim-wbemcli/bin/wbemcli: Http Exception: SSL connect error
*

Re-checking the release notes, this sudden change in behaviour seemed to be explained by the fix:

SSL vulnerability CVE-2014-3566

Not really being that verbose a description, a quick look at the CVE-2014-3566 showed that this is a fix for the “POODLE” issue. So IBM probably switched off the support for the SSLv3 protocol in the SVC and Storwize code. But why would this cause the “wbemcli” command line tool to fail? Here are the steps taken in an analysis of the issue:

  1. First, i was trying to get the “wbemcli” command line tool to be a tad more verbose about what it is actually doing:

    $ /opt/sblim-wbemcli/bin/wbemcli -dx -noverify ecn https://user:pass@svc-test:5989/root/ibm
    To server: <?xml version="1.0" encoding="utf-8" ?>
    <CIM CIMVERSION="2.0" DTDVERSION="2.0">
    <MESSAGE ID="4711" PROTOCOLVERSION="1.0"><SIMPLEREQ><IMETHODCALL NAME="EnumerateClassNames"><LOCALNAMESPACEPATH><NAMESPACE NAME="root"></NAMESPACE><NAMESPACE NAME="ibm"></NAMESPACE></LOCALNAMESPACEPATH>
    <IPARAMVALUE NAME="DeepInheritance"><VALUE>TRUE</VALUE></IPARAMVALUE>
    </IMETHODCALL></SIMPLEREQ>
    </MESSAGE></CIM>
    *
    * /opt/sblim-wbemcli/bin/wbemcli: Http Exception: SSL connect error
    *

    Not really an abundance of information in here too.

  2. Getting the source code for and, while we're at it, updating the “wbemcli” command line tool from version 1.6.0 to 1.6.3. Spent some time looking through the source code and with the “gdb” debugger to get a feeling for the general program flow and functions/methods being called. While looking through the source code i noticed the cURL debugging options are being set if a environment variable named “CURLDEBUG” is set to “true”. Later also found this mentioned in the ChangeLog file:

    $ CURLDEBUG=true /opt/sblim-wbemcli/bin/wbemcli -dx -noverify ecn https://user:pass@svc-test:5989/root/ibm
    To server: <?xml version="1.0" encoding="utf-8" ?>
    <CIM CIMVERSION="2.0" DTDVERSION="2.0">
    <MESSAGE ID="4711" PROTOCOLVERSION="1.0"><SIMPLEREQ><IMETHODCALL NAME="EnumerateClassNames"><LOCALNAMESPACEPATH><NAMESPACE NAME="root"></NAMESPACE><NAMESPACE NAME="ibm"></NAMESPACE></LOCALNAMESPACEPATH>
    <IPARAMVALUE NAME="DeepInheritance"><VALUE>TRUE</VALUE></IPARAMVALUE>
    </IMETHODCALL></SIMPLEREQ>
    </MESSAGE></CIM>
    * About to connect() to svc-test port 5989 (#0)
    *   Trying 192.168.x.x...
    * connected
    * Connected to svc-test (192.168.x.x) port 5989 (#0)
    * successfully set certificate verify locations:
    *   CAfile: none
      CApath: /etc/ssl/certs
    * Unknown SSL protocol error in connection to svc-test:5989
    * Closing connection #0
    * SSL connect error
    *
    * /opt/sblim-wbemcli/bin/wbemcli: Http Exception: SSL connect error
    *

    Now we know that we're encountering a “Unknown SSL protocol error” – not that helpful either.

  3. Searched the web for further information on how to debug the cURL library and found the debug.c example source code, which was very helpful. Incorperated it into the file “CimCurl.cpp”:

    sblim-wbemcli-1.6.3_debug.patch
    --- sblim-wbemcli-1.6.3_orig/CimCurl.cpp    2013-09-21 01:26:32.000000000 +0200
    +++ sblim-wbemcli-1.6.3_new/CimCurl.cpp     2014-11-26 16:30:19.000000000 +0100
    @@ -37,6 +37,100 @@
     extern int waitTime;
     extern int expect100;
     
    +// Trace Begin
    +struct data {
    +  char trace_ascii; /* 1 or 0 */ 
    +};
    +
    +static
    +void dump(const char *text,
    +          FILE *stream, unsigned char *ptr, size_t size,
    +          char nohex)
    +{ 
    +  size_t i;
    +  size_t c;
    +  
    +  unsigned int width=0x10;
    +  
    +  if(nohex)
    +    /* without the hex output, we can fit more on screen */
    +    width = 0x40;
    +
    +  fprintf(stream, "%s, %010.10ld bytes (0x%08.8lx)\n",
    +          text, (long)size, (long)size);
    +
    +  for(i=0; i<size; i+= width) {
    +
    +    fprintf(stream, "%04.4lx: ", (long)i);
    +
    +    if(!nohex) {
    +      /* hex not disabled, show it */
    +      for(c = 0; c < width; c++)
    +        if(i+c < size)
    +          fprintf(stream, "%02x ", ptr[i+c]);
    +        else
    +          fputs("   ", stream);
    +    }
    +
    +    for(c = 0; (c < width) && (i+c < size); c++) {
    +      /* check for 0D0A; if found, skip past and start a new line of output */
    +      if (nohex && (i+c+1 < size) && ptr[i+c]==0x0D && ptr[i+c+1]==0x0A) {
    +        i+=(c+2-width);
    +        break;
    +      }
    +      fprintf(stream, "%c",
    +              (ptr[i+c]>=0x20) && (ptr[i+c]<0x80)?ptr[i+c]:'.');
    +      /* check again for 0D0A, to avoid an extra \n if it's at width */
    +      if (nohex && (i+c+2 < size) && ptr[i+c+1]==0x0D && ptr[i+c+2]==0x0A) {
    +        i+=(c+3-width);
    +        break;
    +      }
    +    }
    +    fputc('\n', stream); /* newline */
    +  }
    +  fflush(stream);
    +}
    +
    +static
    +int my_trace(CURL *handle, curl_infotype type,
    +             char *data, size_t size,
    +             void *userp)
    +{
    +  struct data *config = (struct data *)userp;
    +  const char *text;
    +  (void)handle; /* prevent compiler warning */
    +
    +  switch (type) {
    +  case CURLINFO_TEXT:
    +    fprintf(stderr, "== Info: %s", data);
    +  default: /* in case a new one is introduced to shock us */
    +    return 0;
    +
    +  case CURLINFO_HEADER_OUT:
    +    text = "=> Send header";
    +    break;
    +  case CURLINFO_DATA_OUT:
    +    text = "=> Send data";
    +    break;
    +  case CURLINFO_SSL_DATA_OUT:
    +    text = "=> Send SSL data";
    +    break;
    +  case CURLINFO_HEADER_IN:
    +    text = "<= Recv header";
    +    break;
    +  case CURLINFO_DATA_IN:
    +    text = "<= Recv data";
    +    break;
    +  case CURLINFO_SSL_DATA_IN:
    +    text = "<= Recv SSL data";
    +    break;
    +  }
    +
    +  dump(text, stderr, (unsigned char *)data, size, config->trace_ascii);
    +  return 0;
    +}
    +// Trace End
    +
     // These are the constant headers added to all requests
     static const char *headers[] = {
         "Content-Type: application/xml; charset=\"utf-8\"",
    @@ -152,6 +246,11 @@
         CURLcode rv;
         string sb;
     
    +// Trace Begin
    +struct data config;
    +config.trace_ascii = 1;
    +// Trace End
    +
         mUri = url.scheme + "://" + url.host + ":" + url.port + "/cimom";
         url.ns.toStringBuffer(sb,"%2F");
     
    @@ -248,6 +347,11 @@
     
         rv = curl_easy_setopt(mHandle, CURLOPT_WRITEHEADER, &mErrorData);
         rv = curl_easy_setopt(mHandle, CURLOPT_HEADERFUNCTION, headerCb);
    +
    +// Trace Begin
    +    rv = curl_easy_setopt(mHandle, CURLOPT_DEBUGFUNCTION, my_trace);
    +    rv = curl_easy_setopt(mHandle, CURLOPT_DEBUGDATA, &config);
    +// Trace End
     }
     
     static string getErrorMessage(CURLcode err)

    rebuild the “wbemcli” command line tool and tried again:

    $ CURLDEBUG=true /opt/sblim-wbemcli/bin/wbemcli -dx -noverify ecn https://user:pass@svc-test:5989/root/ibm
    To server: <?xml version="1.0" encoding="utf-8" ?>
    <CIM CIMVERSION="2.0" DTDVERSION="2.0">
    <MESSAGE ID="4711" PROTOCOLVERSION="1.0"><SIMPLEREQ><IMETHODCALL NAME="EnumerateClassNames"><LOCALNAMESPACEPATH><NAMESPACE NAME="root"></NAMESPACE><NAMESPACE NAME="ibm"></NAMESPACE></LOCALNAMESPACEPATH>
    <IPARAMVALUE NAME="DeepInheritance"><VALUE>TRUE</VALUE></IPARAMVALUE>
    </IMETHODCALL></SIMPLEREQ>
    </MESSAGE></CIM>
    == Info: About to connect() to svc-test port 5989 (#0)
    == Info:   Trying 192.168.x.x...
    == Info: connected
    == Info: Connected to svc-test (192.168.x.x) port 5989 (#0)
    == Info: found 172 certificates in /etc/ssl/certs/ca-certificates.crt
    == Info: gnutls_handshake() failed: A TLS packet with unexpected length was received.
    == Info: Closing connection #0
    == Info: SSL connect error
    *
    * /opt/sblim-wbemcli/bin/wbemcli: Http Exception: SSL connect error
    *

    Now we know there is an issue in the way the GnuTLS library used by libcURL interacts with the CIMOM server on the SVC or Storwize systems.

  4. Again, searching the web for similar issues with the error message “gnutls_handshake() failed: A TLS packet with unexpected length was received.”, we find a rebuild against the OpenSSL library instead of the GnuTLS library could solve this issue:

    $ dpkg -l | grep curl
    ii  curl                        7.26.0-1+wheezy11   powerpc     command line tool for transferring data with URL syntax
    ii  libcurl3:powerpc            7.26.0-1+wheezy11   powerpc     easy-to-use client-side URL transfer library (OpenSSL flavour)
    ii  libcurl3-gnutls:powerpc     7.26.0-1+wheezy11   powerpc     easy-to-use client-side URL transfer library (GnuTLS flavour)
    ii  libcurl4-gnutls-dev         7.26.0-1+wheezy11   powerpc     development files and documentation for libcurl (GnuTLS flavour)
    
    $ apt-get install libcurl4-openssl-dev
    Reading package lists... Done
    Building dependency tree
    Reading state information... Done
    Suggested packages:
      libcurl3-dbg
    The following packages will be REMOVED:
      libcurl4-gnutls-dev
    The following NEW packages will be installed:
      libcurl4-openssl-dev
    0 upgraded, 1 newly installed, 1 to remove and 0 not upgraded.
    Need to get 0 B/1,259 kB of archives.
    After this operation, 28.7 kB of additional disk space will be used.
    Do you want to continue [Y/n]? y
    (Reading database ... 65717 files and directories currently installed.)
    Removing libcurl4-gnutls-dev ...
    Processing triggers for man-db ...
    Selecting previously unselected package libcurl4-openssl-dev.
    (Reading database ... 65463 files and directories currently installed.)
    Unpacking libcurl4-openssl-dev (from .../libcurl4-openssl-dev_7.26.0-1+wheezy11_powerpc.deb) ...
    Processing triggers for man-db ...
    Setting up libcurl4-openssl-dev (7.26.0-1+wheezy11) ...
    
    $ dpkg -l | grep curl
    ii  curl                        7.26.0-1+wheezy11   powerpc     command line tool for transferring data with URL syntax
    ii  libcurl3:powerpc            7.26.0-1+wheezy11   powerpc     easy-to-use client-side URL transfer library (OpenSSL flavour)
    ii  libcurl3-gnutls:powerpc     7.26.0-1+wheezy11   powerpc     easy-to-use client-side URL transfer library (GnuTLS flavour)
    ii  libcurl4-openssl-dev        7.26.0-1+wheezy11   powerpc     development files and documentation for libcurl (OpenSSL flavour)

    Rebuild the “wbemcli” command line tool and tried again:

    $ CURLDEBUG=true /opt/sblim-wbemcli/bin/wbemcli -dx -noverify ecn https://user:pass@svc-test:5989/root/ibm
    To server: <?xml version="1.0" encoding="utf-8" ?>
    <CIM CIMVERSION="2.0" DTDVERSION="2.0">
    <MESSAGE ID="4711" PROTOCOLVERSION="1.0"><SIMPLEREQ><IMETHODCALL NAME="EnumerateClassNames"><LOCALNAMESPACEPATH><NAMESPACE NAME="root"></NAMESPACE><NAMESPACE NAME="ibm"></NAMESPACE></LOCALNAMESPACEPATH>
    <IPARAMVALUE NAME="DeepInheritance"><VALUE>TRUE</VALUE></IPARAMVALUE>
    </IMETHODCALL></SIMPLEREQ>
    </MESSAGE></CIM>
    == Info: About to connect() to svc-test port 5989 (#0)
    == Info:   Trying 192.168.x.x...
    == Info: connected
    == Info: Connected to svc-test (192.168.x.x) port 5989 (#0)
    == Info: successfully set certificate verify locations:
    == Info:   CAfile: none
      CApath: /etc/ssl/certs
    == Info: SSLv3, TLS handshake, Client hello (1):
    => Send SSL data, 0000000134 bytes (0x00000086)
    0000: ......T.."\.~....`...K4.......p..7"&4...Z.....9.8.........5.....
    0040: ................3.2.....E.D...../...A...........................
    0080: ......
    == Info: Unknown SSL protocol error in connection to svc-test:5989
    == Info: Closing connection #0
    == Info: SSL connect error
    *
    * /opt/sblim-wbemcli/bin/wbemcli: Http Exception: SSL connect error
    *

    Now we know that the “wbemcli” command line tool is actually – as already suspected – trying to initiate a SSLv3 connection.

  5. In order to confirm we're on the right track, try to first verify manually that we're unable to connct with a SSLv3 secured connection:

    $ openssl s_client -host svc-test -port 5989 -ssl3
    CONNECTED(00000003)
    write:errno=104
    ---
    no peer certificate available
    ---
    No client certificate CA names sent
    ---
    SSL handshake has read 0 bytes and written 0 bytes
    ---
    New, (NONE), Cipher is (NONE)
    Secure Renegotiation IS NOT supported
    Compression: NONE
    Expansion: NONE
    SSL-Session:
        Protocol  : SSLv3
        Cipher    : 0000
        Session-ID:
        Session-ID-ctx:
        Master-Key:
        Key-Arg   : None
        PSK identity: None
        PSK identity hint: None
        SRP username: None
        Start Time: 1418397594
        Timeout   : 7200 (sec)
        Verify return code: 0 (ok)
    ---
    quit

    And that we're instead able to connect with a TLS secured connection:

    $ openssl s_client -host svc-test -port 5989
    CONNECTED(00000003)
    depth=0 C = GB, L = Hursley, O = IBM, OU = SSG, CN = 2145, emailAddress = support@ibm.com
    verify error:num=18:self signed certificate
    verify return:1
    depth=0 C = GB, L = Hursley, O = IBM, OU = SSG, CN = 2145, emailAddress = support@ibm.com
    verify return:1
    ---
    Certificate chain
     0 s:/C=GB/L=Hursley/O=IBM/OU=SSG/CN=2145/emailAddress=support@ibm.com
       i:/C=GB/L=Hursley/O=IBM/OU=SSG/CN=2145/emailAddress=support@ibm.com
    ---
    Server certificate
    -----BEGIN CERTIFICATE-----
    MIICyDCCAjGgAwIBAgIEUAPzmTANBgkqhkiG9w0BAQUFADBqMQswCQYDVQQGEwJH
    QjEQMA4GA1UEBxMHSHVyc2xleTEMMAoGA1UEChMDSUJNMQwwCgYDVQQLEwNTU0cx
    DTALBgNVBAMTBDIxNDUxHjAcBgkqhkiG9w0BCQEWD3N1cHBvcnRAaWJtLmNvbTAe
    Fw0xMjA3MTYxMDU3MjlaFw0yNzA3MTMxMDU3MjlaMGoxCzAJBgNVBAYTAkdCMRAw
    DgYDVQQHEwdIdXJzbGV5MQwwCgYDVQQKEwNJQk0xDDAKBgNVBAsTA1NTRzENMAsG
    A1UEAxMEMjE0NTEeMBwGCSqGSIb3DQEJARYPc3VwcG9ydEBpYm0uY29tMIGfMA0G
    CSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3E7+7mE2GAID/35o5/s7cnzoqu9PQdOGB
    ryGMa8adD4Wd9hpmTkrsgyNvkUB6sPIifbFstGooOkQtK9ZNgP5OHOorZmqINSxM
    9goCkSCQG9xRKAvNt2tA8gujaV+p42oVEhIH6naJUul96qZI31y3GffUu2CRrJL7
    4wG/8cv0BQIDAQABo3sweTAJBgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQfFh1PcGVu
    U1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUkPMkXUjn0YHlfQW8
    TJiRC5jWQO4wHwYDVR0jBBgwFoAUkPMkXUjn0YHlfQW8TJiRC5jWQO4wDQYJKoZI
    hvcNAQEFBQADgYEAKqu7KpVxnOXonQE3unC1O7qUHKoyQUEWqcKsM/4tPI+lsBMZ
    jvoPwn8yQRWiLehFmVc8VSZfdFPLzshNabXp5qbZo/EFberXrgI2CbtPiULYyyyH
    DUhWF+vhwb6uqwfBbGncvTvI2ewU8+0oTXsuTkSjumJ7+chpaHFWWyj2cJA=
    -----END CERTIFICATE-----
    subject=/C=GB/L=Hursley/O=IBM/OU=SSG/CN=2145/emailAddress=support@ibm.com
    issuer=/C=GB/L=Hursley/O=IBM/OU=SSG/CN=2145/emailAddress=support@ibm.com
    ---
    No client certificate CA names sent
    ---
    SSL handshake has read 1029 bytes and written 498 bytes
    ---
    New, TLSv1/SSLv3, Cipher is AES256-GCM-SHA384
    Server public key is 1024 bit
    Secure Renegotiation IS supported
    Compression: NONE
    Expansion: NONE
    SSL-Session:
        Protocol  : TLSv1.2
        Cipher    : AES256-GCM-SHA384
        Session-ID: 48291D368E0A8584A8DFA00A9881B8979BDE370FC6C9439294C670695D031239
        Session-ID-ctx:
        Master-Key: 71BD12A161FC595CD056DA8E6D6E27420F37468E47498B7591A403A86844C55F61FF02B2FEC7739FAAEDCE3DFEA0F217
        Key-Arg   : None
        PSK identity: None
        PSK identity hint: None
        SRP username: None
        TLS session ticket lifetime hint: 300 (seconds)
        TLS session ticket:
        0000 - a0 e0 b1 9b c2 37 9a ca-49 1c 54 f5 26 4b d6 24   .....7..I.T.&K.$
        0010 - af 6a 7d cc 5e 4a 97 a8-b3 6d b7 66 0b b7 0a 65   .j}.^J...m.f...e
        0020 - 47 af ef 47 76 fc c7 e9-38 ff 84 28 ca 8e 73 25   G..Gv...8..(..s%
        0030 - 47 25 f6 0d 36 01 04 f1-f9 f7 0c b6 42 ef cf 09   G%..6.......B...
        0040 - 64 8f df ff 89 38 ed 7c-ae 1d 0e 25 d1 c1 77 86   d....8.|...%..w.
        0050 - b6 61 88 15 cf fe 9f 20-86 0d 17 74 18 da ea c0   .a..... ...t....
        0060 - 33 3a 47 f5 f9 51 24 ae-48 37 8a 3f 19 dd c6 04   3:G..Q$.H7.?....
        0070 - 7e d1 20 78 35 99 0b 9f-3b 1f ce 7c bc 11 93 e4   ~. x5...;..|....
        0080 - 0f 94 de 94 f1 0d 0c da-64 ca 0d f6 10 2a c8 fa   ........d....*..
        0090 - dc 3e e4 1a 97 d1 34 7a-9c f5 c3 00 e8 1b 10 d7   .>....4z........
    
        Start Time: 1418397614
        Timeout   : 300 (sec)
        Verify return code: 18 (self signed certificate)
    ---
    quit

    The secured connection negotiated to TLS succeeded, so we're on the right track!

  6. Now we need to find the spot in the source code, where the “wbemcli” command line tool is forced to initiate a SSLv3 connection. We know this is probably done in a cURL related function call, since libcURL is used for the network connection. So lets first look into the cURL code for all the lines showing any sign of SSL related operations:

    $ grep -n curl CimCurl.cpp | grep -i ssl
    185:    // Assume we support SSL if we don't have the curl_version_info API
    276:    rv = curl_easy_setopt(mHandle, CURLOPT_SSL_VERIFYHOST, 0);
    277:    //    rv = curl_easy_setopt(mHandle, CURLOPT_SSL_VERIFYPEER, 0);
    280:    rv = curl_easy_setopt(mHandle, CURLOPT_SSLVERSION, 3);
    441:     if ((rv=curl_easy_setopt(mHandle,CURLOPT_SSL_VERIFYPEER,0))) {
    448:       if ((rv=curl_easy_setopt(mHandle,CURLOPT_SSL_VERIFYPEER,1))) {
    466:     if ((rv=curl_easy_setopt(mHandle,CURLOPT_SSLCERT,certificate))) {
    470:     if ((rv=curl_easy_setopt(mHandle,CURLOPT_SSLKEY,key))) {

    Looks like a perfect match in line 280 of the file “CimCurl.cpp”. The line numbers are a bit off from the original source code, since the file “CimCurl.cpp” was patched with our above debugging code. The code in the original, unpatched source file “CimCurl.cpp”, within the function “CimomCurl::genRequest” looks like this:

    CimCurl.cpp
    175     [...]
    176     /* Disable SSL host verification */
    177     rv = curl_easy_setopt(mHandle, CURLOPT_SSL_VERIFYHOST, 0);
    178     //    rv = curl_easy_setopt(mHandle, CURLOPT_SSL_VERIFYPEER, 0);
    179
    180     /* Force using SSL V3 */
    181     rv = curl_easy_setopt(mHandle, CURLOPT_SSLVERSION, 3);
    182
    183     /* Set username and password */
    184     if (url.user.length() > 0 && url.password.length() > 0) {
    185         mUserPass = url.user + ":" + url.password;
    186         rv = curl_easy_setopt(mHandle, CURLOPT_USERPWD, mUserPass.c_str());
    187     }
    188     [...]

    In line 181 the cURL option “CURLOPT_SSLVERSION” is indiscriminately set to use SSLv3 and nothing else, which we know from the above deduction is bound to fail on systems adressing the “POODLE” issues.

  7. With the knowledge where the issue is actually caused, an easy quick'n'dirty fix can be implemented:

    sblim-wbemcli-1.6.3_debug.patch
    --- sblim-wbemcli-1.6.3_orig/CimCurl.cpp    2013-09-21 01:26:32.000000000 +0200
    +++ sblim-wbemcli-1.6.3/CimCurl.cpp         2014-11-26 16:46:09.000000000 +0100
    @@ -178,7 +178,7 @@
         //    rv = curl_easy_setopt(mHandle, CURLOPT_SSL_VERIFYPEER, 0);
     
         /* Force using SSL V3 */
    -    rv = curl_easy_setopt(mHandle, CURLOPT_SSLVERSION, 3);
    +    //rv = curl_easy_setopt(mHandle, CURLOPT_SSLVERSION, 3);
     
         /* Set username and password */
         if (url.user.length() > 0 && url.password.length() > 0) {

    Inserting the comment at the line where the cURL option “CURLOPT_SSLVERSION” is forced to SSLv3 causes libcURL to fall back to its default value, which is now TLS.

    Rebuild the “wbemcli” command line tool and tried again:

    $ CURLDEBUG=true /opt/sblim-wbemcli/bin/wbemcli -dx -noverify ecn https://user:pass@svc-test:5989/root/ibm
    To server: <?xml version="1.0" encoding="utf-8" ?>
    <CIM CIMVERSION="2.0" DTDVERSION="2.0">
    <MESSAGE ID="4711" PROTOCOLVERSION="1.0"><SIMPLEREQ><IMETHODCALL NAME="EnumerateClassNames"><LOCALNAMESPACEPATH><NAMESPACE NAME="root"></NAMESPACE><NAMESPACE NAME="ibm"></NAMESPACE></LOCALNAMESPACEPATH>
    <IPARAMVALUE NAME="DeepInheritance"><VALUE>TRUE</VALUE></IPARAMVALUE>
    </IMETHODCALL></SIMPLEREQ>
    </MESSAGE></CIM>
    * About to connect() to svc-test port 5989 (#0)
    *   Trying 192.168.x.x...
    * connected
    * Connected to svc-test (192.168.x.x) port 5989 (#0)
    * found 172 certificates in /etc/ssl/certs/ca-certificates.crt
    *    server certificate verification SKIPPED
    *    common name: 2145 (does not match 'svc-test')
    *    server certificate expiration date OK
    *    server certificate activation date OK
    *    certificate public key: RSA
    *    certificate version: #3
    *    subject: C=GB,L=Hursley,O=IBM,OU=SSG,CN=2145,EMAIL=support@ibm.com
    *    start date: Mon, 16 Jul 2012 10:57:29 GMT
    
    *    expire date: Tue, 13 Jul 2027 10:57:29 GMT
    
    *    issuer: C=GB,L=Hursley,O=IBM,OU=SSG,CN=2145,EMAIL=support@ibm.com
    *    compression: NULL
    *    cipher: AES-128-CBC
    *    MAC: SHA1
    * Server auth using Basic with user 'user'
    > POST /cimom HTTP/1.1
    Authorization: Basic enp6bmFnaW9zOm5hZ2lvcw==
    Host: svc-test:5989
    Content-Type: application/xml; charset="utf-8"
    Connection: Keep-Alive, TE
    CIMProtocolVersion: 1.0
    CIMOperation: MethodCall
    CIMMethod: EnumerateClassNames
    CIMObject: root%2Fibm
    Content-Length: 396
    
    * upload completely sent off: 396 out of 396 bytes
    * additional stuff not fine transfer.c:1037: 0 0
    * HTTP 1.1 or later with persistent connection, pipelining supported
    < HTTP/1.1 200 OK
    < Content-Type: application/xml; charset="utf-8"
    From server: Content-Type: application/xml; charset="utf-8"
    < content-length: 0000072284
    From server: content-length: 0000072284
    < CIMOperation: MethodResponse
    From server: CIMOperation: MethodResponse
    <
    * Connection #0 to host svc-test left intact
    From server: <?xml version="1.0" encoding="utf-8" ?>
    <CIM CIMVERSION="2.0" DTDVERSION="2.0">
    <MESSAGE ID="4711" PROTOCOLVERSION="1.0">
    <SIMPLERSP>
    <IMETHODRESPONSE NAME="EnumerateClassNames">
    <IRETURNVALUE>
    <CLASSNAME NAME="CIM_ConcreteIdentity"/>
    <CLASSNAME NAME="CIM_NetworkPacketAction"/>
    <CLASSNAME NAME="CIM_CollectionInSystem"/>
    [...]
    
    $ /opt/sblim-wbemcli/bin/wbemcli -noverify ecn https://user:pass@svc-test:5989/root/ibm
    svc-test:5989/root/ibm:CIM_ConcreteIdentity
    svc-test:5989/root/ibm:CIM_NetworkPacketAction
    svc-test:5989/root/ibm:CIM_CollectionInSystem
    svc-test:5989/root/ibm:CIM_DeviceSAPImplementation
    svc-test:5989/root/ibm:CIM_ProtocolControllerAccessesUnit
    svc-test:5989/root/ibm:CIM_ControlledBy
    [...]

    Great, now we're finally able to query and monitor the IBM SVC or Storwize systems again with the Nagios monitoring plugin (Nagios Monitoring - IBM SVC and Storwize)!

Between first noticing and researching the issue and creating the quick'n'dirty fix shown above, an official bug report has been filed on the issue and a patch has already been submitted to the source code repository in order to adress the issue more thoroughly. Hopefully an updated official source code package will be released soon.

Nonetheless, the process of researching and debugging this issue was an excellent hands on exercise for me, which i enjoyed very much. Hopefully the steps taken and described here, will turn out to be of use for others as well.

// HMC Update to 7.7.9.0 SP1

Like before with HMC Update to 7.7.5.0, HMC Update to 7.7.7.0 SP1 and HMC Update to 7.7.8.0, the recent HMC update to v7.7.9.0 was again not installable directly from the ISO images via the HMC GUI. Along with the HMC network installation images which are now mentioned in the release notes, there is now also an official documentation of the update procedure using the HMC network installation images. It's called “HMC network installation” and provides a more remote admin friendly way of performing the update. Since it's only a slightly shortened version of the procedure i already tested and used in HMC Update to 7.7.7.0 SP1, i decided to stick with my own procedure.

Also a turn for the better is, that now the release notes as well as FixCentral clearly point out the dependencies between the fixpacks that are supposed to go on top of the update release and the order they are supposed to be applied in. In case of MH01405 (aka V7R7.9.0.0) this is currently only MH01428 (aka V7R7.9.0.1 or v7.7.9.0 SP1.

As always, be sure to study the release notes thoroughly before an update attempt. Depending on your environment and HMC hardware there might be a road block in there. Special attention deserves item 2 in the “upgrade notes” section of the release notes of MH01405. Due to a bug in certain Power Systems firmware levels, there is a dependency between the usable HMC version and the firmware version on the managed system. Be sure to check if your managed systems firmware levels fall in the affected version ranges. For me this meant first upgrading certain managed systems to firmware levels not affected by the above bug. Then upgrading the HMCs to v7.7.9.0 SP1. And finally upgrading certain other managed systems to firmware levels depending on HMC version v7.7.9.0 or later. The latter dependency was - besides the fixed security issues - the main reason to upgrade the HMC in the first place.

For reference purposes, here are some example screen shots from a KVM session to the HMC during a update to MH01405:

HMC network based upgrade to v7.7.9.0 - 1

HMC network based upgrade to v7.7.9.0 - 2

HMC network based upgrade to v7.7.9.0 - 3

HMC network based upgrade to v7.7.9.0 - 4

HMC network based upgrade to v7.7.9.0 - 5

HMC network based upgrade to v7.7.9.0 - 6

HMC network based upgrade to v7.7.9.0 - 7

HMC network based upgrade to v7.7.9.0 - 8

HMC network based upgrade to v7.7.9.0 - 9

HMC network based upgrade to v7.7.9.0 - 10

HMC network based upgrade to v7.7.9.0 - 11

After the upgrade to v7.7.9.0 (MH01405) was complete and the HMC had rebooted, the following errors showed up:

Error after HMC upgrade to v7.7.9.0 - 1

Error after HMC upgrade to v7.7.9.0 - 2

Error after HMC upgrade to v7.7.9.0 - 3

There are not a lot of resources on this particular error, but it seems to occationally have occurred on earlier HMC upgrades as well. Up to now there seems to be no negative effect resulting from this error.

After the upgrade to V7R7.9.0.0 (MH01405) is complete, you can apply the service pack V7R7.9.0.1 (MH01428) in the usual way via the HMC GUI. For me the service pack showed the following output during the update process:

  • MH01428:

    Management console corrective service installation in progress. Please wait...
    Corrective service file offload from remote server in progress...
    The corrective service file offload was successful. Continuing with HMC service installation...
    Verifying Certificate Information
    Authenticating Install Packages
    Installing Packages
    --- Installing ptf-req ....
    --- Installing RSCT ....
    src-3.1.4.10-14056
    rsct.core.utils-3.1.4.10-14056
    rsct.core-3.1.4.10-14056
    rsct.service-3.5.0.0-1
    rsct.basic-3.1.4.10-14056
    --- Installing CSM ....
    csm.core-1.7.1.20-1
    csm.deploy-1.7.1.20-1
    csm_hmc.server-1.7.1.20-1
    csm_hmc.hdwr_svr-7.0-3.4.0
    csm_hmc.client-1.7.1.20-1
    csm.server.hsc-1.7.1.20-1
    --- Installing LPARCMD ....
    hsc.lparcmd-3.3.0.1-3
    ln: creating symbolic link `/usr/hmcrbin/lsnodeid': File exists
    ln: creating symbolic link `/usr/hmcrbin/lsrsrc-api': File exists
    ln: creating symbolic link `/usr/hmcrbin/mkrsrc-api': File exists
    ln: creating symbolic link `/usr/hmcrbin/rmrsrc-api': File exists
    --- Installing Pegasus ....
    --- Updating baseOS ....
    cp: cannot stat `.dev': No such file or directory
    PreInstalling HMC REST Web Services ...
    Installing HMC REST Web Services ...
    pmc.core-7.7.9.0-20140312T2001
    pmc.soliddb-7.7.9.0-20140312T2001
    pmc.wlp-7.7.9.0-20140312T2001
    pmc.wlp.soliddriver-7.7.9.0-20140312T2001
    pmc.wlp.log4j-7.7.9.0-20140312T2010
    pmc.wlp.guava-7.7.9.0-20140312T2010
    pmc.wlp.jaxb2.runtime-7.7.9.0-20140312T2010
    pmc.wlp.slf4j.api-7.7.9.0-20140312T2002
    pmc.wlp.quartz-7.7.9.0-20140312T2015
    pmc.wlp.commons-7.7.9.0-20140312T2013
    pmc.war.rest-7.7.9.0-20140312T2002
    pmc.soliddb.rest.sql-7.7.9.0-20140312T2010
    pmc.soliddb.pcm.sql-7.7.9.0-20140312T2015
    pmc.pcm.rest-7.7.9.0-20140312T2010
    pmc.ui.developer-7.7.9.0-20140312T2015
    D: opening db environment /var/lib/rpm/Packages create:cdb:mpool:private
    D: opening db index /var/lib/rpm/Packages rdonly mode=0x0
    D: locked db index /var/lib/rpm/Packages
    D: opening db index /var/lib/rpm/Name rdonly:nofsync mode=0x0
    D: read h# 849 Header SHA1 digest: OK (f280a38b206c3192103a5f4050991e1690ed43ea)
    D: ========== recording tsort relations
    D: ========== tsorting packages (order, #predecessors, #succesors, tree, depth, breadth)
    D: 0 0 0 0 1 0 -pmc.sem.war-7.7.9.0-20140312T2009.i386
    D: closed db index /var/lib/rpm/Name
    D: closed db index /var/lib/rpm/Packages
    D: closed db environment /var/lib/rpm/Packages
    D: opening db environment /var/lib/rpm/Packages create:cdb:mpool:private
    D: opening db index /var/lib/rpm/Packages create mode=0x42
    D: locked db index /var/lib/rpm/Packages
    D: sanity checking 1 elements
    D: running pre-transaction scripts
    D: computing 95 file fingerprints
    D: computing file dispositions
    D: opening db index /var/lib/rpm/Basenames create:nofsync mode=0x42
    D: read h# 931 Header SHA1 digest: OK (91c4128792b6b1d92318612e35f0d99c2b09bc41)
    D: read h# 932 Header SHA1 digest: OK (28745eb2d1d7a376c9cd9b457d024887849da559)
    D: read h# 933 Header SHA1 digest: OK (37f012c206c4a6cf6335be71d34ff09c0538d5b5)
    D: read h# 934 Header SHA1 digest: OK (9561ea0f53cff788ccf4a3f58655aff9a4d63bf3)
    D: read h# 935 Header SHA1 digest: OK (5718f74492d5e0af6858146bb5b72f588b0da4ab)
    D: read h# 936 Header SHA1 digest: OK (3a41ff5853613da4930e18097f657efb3a3b296f)
    D: read h# 937 Header SHA1 digest: OK (473cf0fe9c2b6f3458c180f1a8b206ed12f97536)
    D: read h# 938 Header SHA1 digest: OK (8b83dc36fa9ba3ee8a3454f00c0c1d3456794463)
    D: read h# 939 Header SHA1 digest: OK (76e2814d26d19030ca280e3a87c64a63f6db4939)
    D: read h# 940 Header SHA1 digest: OK (0bbd68866852e41a9813d4e95ae6f4af33316ad8)
    D: read h# 941 Header SHA1 digest: OK (88ca29e0d1812cccfd2a8729a9ae474366840cd0)
    D: read h# 942 Header SHA1 digest: OK (11fb71feb49795a55b8d4775dd3a87efa23ae085)
    D: read h# 943 Header SHA1 digest: OK (a65291baf06e105125843c7d9345284a4d036225)
    D: read h# 944 Header SHA1 digest: OK (fcf30711bf354a554a7a639bf634865a4a07dc35)
    D: read h# 945 Header SHA1 digest: OK (29769b20afd49242a01ba84d069521dac74bcb99)
    D: ========== --- pmc.sem.war-7.7.9.0-20140312T2009 i386-linux 0x0
    D: erase: pmc.sem.war-7.7.9.0-20140312T2009 has 95 files, test = 0
    D: opening db index /var/lib/rpm/Name create:nofsync mode=0x42
    D: read h# 849 Header SHA1 digest: OK (f280a38b206c3192103a5f4050991e1690ed43ea)
    D: opening db index /var/lib/rpm/Triggername create:nofsync mode=0x42
    D: erase: %preun(pmc.sem.war-7.7.9.0-20140312T2009.i386) asynchronous scriptlet start
    D: erase: %preun(pmc.sem.war-7.7.9.0-20140312T2009.i386) execv(/bin/sh) pid 16142
    D: erase: waitpid(16142) rc 16142 status 0 secs 0.001
    D: fini 100755 1 ( 504,1004) 662 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/theme/feed.css
    D: fini 100755 1 ( 504,1004) 625 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/theme/Master.css
    D: fini 040755 2 ( 504,1004) 4096 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/theme
    D: fini 100755 1 ( 504,1004) 2121 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/feed.xsl
    D: fini 100755 1 ( 504,1004) 1704 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/web.xml
    D: fini 100755 1 ( 504,1004) 57211 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/wink-client-1.2.0-incubating.jar
    D: fini 100755 1 ( 504,1004) 679719 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/pmc.workhorse.templates-7.7.9.0.jar
    D: fini 100755 1 ( 504,1004) 404664 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/pmc.workhorse.templates-7.7.9.0-src.jar
    D: fini 100755 1 ( 504,1004) 35865 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/pmc.servlet.templates-7.7.9.0.jar
    D: fini 100755 1 ( 504,1004) 29188 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/pmc.servlet.templates-7.7.9.0-src.jar
    D: fini 100755 1 ( 504,1004) 26675 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/pmc.servlet.jdbc-7.7.9.0.jar
    D: fini 100755 1 ( 504,1004) 128797 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/pmc.servlet.common-7.7.9.0.jar
    D: fini 100755 1 ( 504,1004) 92119 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/pmc.servlet.common-7.7.9.0-src.jar
    D: fini 100755 1 ( 504,1004) 41062 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/pmc.schema.web.src-7.7.9.0.jar
    D: fini 100755 1 ( 504,1004) 93348 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/pmc.schema.web-7.7.9.0.jar
    D: fini 100755 1 ( 504,1004) 349323 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/pmc.schema.vios-7.7.9.0.jar
    D: fini 100755 1 ( 504,1004) 182187 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/pmc.schema.uom.src-7.7.9.0.jar
    D: fini 100755 1 ( 504,1004) 509804 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/pmc.schema.uom-7.7.9.0.jar
    D: fini 100755 1 ( 504,1004) 120510 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/pmc.schema.templates.src-7.7.9.0.jar
    D: fini 100755 1 ( 504,1004) 415957 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/pmc.schema.templates-7.7.9.0.jar
    D: fini 100755 1 ( 504,1004) 90846 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/pmc.schema.serviceableeventmanager.src-7.7.9.0.jar
    D: fini 100755 1 ( 504,1004) 62845 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/pmc.schema.serviceableeventmanager-7.7.9.0.jar
    D: fini 100755 1 ( 504,1004) 613724 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/pmc.rest.westbound-7.7.9.0.jar
    D: fini 100755 1 ( 504,1004) 643149 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/pmc.rest.viosapi.rmc.handler-7.7.9.0.jar
    D: fini 100755 1 ( 504,1004) 343001 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/pmc.rest.viosapi.rmc.handler-7.7.9.0-src.jar
    D: fini 100755 1 ( 504,1004) 55846 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/pmc.rest.servlet.utils-7.7.9.0.jar
    D: fini 100755 1 ( 504,1004) 31166 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/pmc.rest.servlet.utils-7.7.9.0-src.jar
    D: fini 100755 1 ( 504,1004) 1812 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/pmc.rest.servlet.uom.vios-7.7.9.0.jar
    D: fini 100755 1 ( 504,1004) 1787 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/pmc.rest.servlet.uom.vios-7.7.9.0-src.jar
    D: fini 100755 1 ( 504,1004) 399799 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/pmc.rest.servlet.uom.phyp-7.7.9.0.jar
    D: fini 100755 1 ( 504,1004) 247481 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/pmc.rest.servlet.uom.phyp-7.7.9.0-src.jar
    D: fini 100755 1 ( 504,1004) 15743 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/pmc.rest.servlet.spi-7.7.9.0.jar
    D: fini 100755 1 ( 504,1004) 10126 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/pmc.rest.servlet.spi-7.7.9.0-src.jar
    D: fini 100755 1 ( 504,1004) 22369 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/pmc.rest.servlet.sem-7.7.9.0.jar
    D: fini 100755 1 ( 504,1004) 13576 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/pmc.rest.servlet.sem-7.7.9.0-src.jar
    D: fini 100755 1 ( 504,1004) 62648 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/pmc.rest.provider-7.7.9.0.jar
    D: fini 100755 1 ( 504,1004) 14607 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/pmc.resources-7.7.9.0.jar
    D: fini 100755 1 ( 504,1004) 12268 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/pmc.resources-7.7.9.0-src.jar
    D: fini 100755 1 ( 504,1004) 32880 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/pmc.logging.log4j-7.7.9.0.jar
    D: fini 100755 1 ( 504,1004) 13132 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/pmc.logging-7.7.9.0.jar
    D: fini 100755 1 ( 504,1004) 10638 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/pmc.logging-7.7.9.0-src.jar
    D: fini 100755 1 ( 504,1004) 877816 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/pmc.jaxb.web-7.7.9.0.jar
    D: fini 100755 1 ( 504,1004) 294774 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/pmc.jaxb.web-7.7.9.0-src.jar
    D: fini 100755 1 ( 504,1004) 762319 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/pmc.jaxb.vios-7.7.9.0.jar
    D: fini 100755 1 ( 504,1004) 582466 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/pmc.jaxb.vios-7.7.9.0-src.jar
    D: fini 100755 1 ( 504,1004) 11266109 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/pmc.jaxb.uom-7.7.9.0.jar
    D: fini 100755 1 ( 504,1004) 2401072 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/pmc.jaxb.uom-7.7.9.0-src.jar
    D: fini 100755 1 ( 504,1004) 5042339 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/pmc.jaxb.templates-7.7.9.0.jar
    D: fini 100755 1 ( 504,1004) 1587400 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/pmc.jaxb.templates-7.7.9.0-src.jar
    D: fini 100755 1 ( 504,1004) 581709 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/pmc.jaxb.serviceableeventmanager-7.7.9.0.jar
    D: fini 100755 1 ( 504,1004) 197153 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/pmc.jaxb.serviceableeventmanager-7.7.9.0-src.jar
    D: fini 100755 1 ( 504,1004) 472045 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/pmc.jaxb.reflection-7.7.9.0.jar
    D: fini 100755 1 ( 504,1004) 145769 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/pmc.jaxb.reflection-7.7.9.0-src.jar
    D: fini 100755 1 ( 504,1004) 493817 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/pmc.jaxb.api.server-7.7.9.0.jar
    D: fini 100755 1 ( 504,1004) 280894 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/pmc.jaxb.api.server-7.7.9.0-src.jar
    D: fini 100755 1 ( 504,1004) 76060 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/pmc.jaxb.api.common-7.7.9.0.jar
    D: fini 100755 1 ( 504,1004) 41833 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/pmc.jaxb.api.common-7.7.9.0-src.jar
    D: fini 100755 1 ( 504,1004) 368989 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/pmc.cli.adapter-7.7.9.0.jar
    D: fini 100755 1 ( 504,1004) 2061 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/pmc.annotations-7.7.9.0.jar
    D: fini 100755 1 ( 504,1004) 1078246 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/dpsmapi-7.7.9.0.jar
    D: fini 100755 1 ( 504,1004) 243016 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/commons-lang-2.2.jar
    D: fini 100755 1 ( 504,1004) 65621 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/commons-io-1.2.jar
    D: fini 100755 1 ( 504,1004) 232771 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/commons-codec-1.6.jar
    D: fini 100755 1 ( 504,1004) 713 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib/.jazzignore
    D: fini 040755 2 ( 504,1004) 4096 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/lib
    D: fini 100755 1 ( 504,1004) 4892 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/geronimo-web.xml
    D: fini 100755 1 ( 504,1004) 5963 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/classes/log4j2.xml
    D: fini 100755 1 ( 504,1004) 1378 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/classes/com/ibm/pmc/war/servlet/applications/sem/SemServletApplication.class
    D: fini 040755 2 ( 504,1004) 4096 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/classes/com/ibm/pmc/war/servlet/applications/sem
    D: fini 040755 2 ( 504,1004) 4096 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/classes/com/ibm/pmc/war/servlet/applications
    D: fini 040755 2 ( 504,1004) 4096 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/classes/com/ibm/pmc/war/servlet
    D: fini 040755 2 ( 504,1004) 4096 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/classes/com/ibm/pmc/war
    D: fini 040755 2 ( 504,1004) 4096 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/classes/com/ibm/pmc
    D: fini 040755 2 ( 504,1004) 4096 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/classes/com/ibm
    D: fini 040755 2 ( 504,1004) 4096 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/classes/com
    D: fini 100755 1 ( 504,1004) 764 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/classes/ServletDaemonClassnames.properties
    D: fini 100755 1 ( 504,1004) 771 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/classes/REST_Servlet.properties.SAMPLE
    D: fini 100755 1 ( 504,1004) 967 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/classes/META-INF/wink-alternate-shortcuts.properties
    D: fini 100755 1 ( 504,1004) 0 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/classes/META-INF/server/wink-providers
    D: fini 040755 2 ( 504,1004) 4096 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/classes/META-INF/server
    D: fini 100755 1 ( 504,1004) 363 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/classes/META-INF/persistence.xml
    D: fini 040755 2 ( 504,1004) 4096 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/classes/META-INF
    D: fini 040755 2 ( 504,1004) 4096 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF/classes
    D: fini 040755 2 ( 504,1004) 4096 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/WEB-INF
    D: fini 100755 1 ( 504,1004) 275 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/META-INF/MANIFEST.MF
    D: fini 040755 2 ( 504,1004) 4096 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war/META-INF
    D: fini 040755 2 ( 504,1004) 4096 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps/PMC_SEM.war
    D: fini 040755 7 ( 504,1004) 4096 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc/apps skip
    D: fini 040755 8 ( 504,1004) 4096 /opt/pmc/lib/share/wlp-8.5.5/usr/servers/pmc skip
    D: fini 040755 6 ( 504,1004) 4096 /opt/pmc/lib/share/wlp-8.5.5/usr/servers skip
    D: fini 040755 4 ( 504,1004) 4096 /opt/pmc/lib/share/wlp-8.5.5/usr skip
    D: fini 040755 9 ( 504,1004) 4096 /opt/pmc/lib/share/wlp-8.5.5 skip
    D: fini 040755 4 ( 504,1004) 4096 /opt/pmc/lib/share skip
    D: fini 040755 3 ( 504,1004) 4096 /opt/pmc/lib skip
    D: fini 040755 8 ( 504,1004) 4096 /opt/pmc skip
    D: erase: %postun(pmc.sem.war-7.7.9.0-20140312T2009.i386) asynchronous scriptlet start
    D: erase: %postun(pmc.sem.war-7.7.9.0-20140312T2009.i386) execv(/bin/sh) pid 16145
    + . /opt/pmc/bin/rpmScripts.include
    ++ EZLOG=/var/hsc/log/EZBuild.rpm.log
    ++ BASENAME=/usr/bin/basename
    ++ CAT=/bin/cat
    ++ CHMOD=/bin/chmod
    ++ CHOWN=/bin/chown
    ++ CP=/bin/cp
    ++ DATE='/bin/date --rfc-3339=seconds'
    ++ DIRNAME=/usr/bin/dirname
    ++ ECHO=/bin/echo
    ++ FIND=/usr/bin/find
    ++ GREP=/usr/bin/grep
    ++ LN=/bin/ln
    ++ MKDIR=/bin/mkdir
    ++ RM='/bin/rm -v'
    ++ RUNASROOT=/opt/ccfw/bin/framework/runAsRoot
    ++ TAR=/bin/tar
    ++ WC=/usr/bin/wc
    ++ UNZIP=/usr/bin/unzip
    ++ MV=/bin/mv
    + setupPMC
    + PMC_ROOT=/opt/pmc
    + PMC_BIN=/opt/pmc/bin
    + PMC_CONFIG=/opt/pmc/config
    + PMC_LIB=/opt/pmc/lib
    + PMC_LIB_SHARE=/opt/pmc/lib/share
    + PMC_LIB_WLP=/opt/pmc/lib/wlp
    + PMC_LIB_SOLIDDB=/opt/pmc/lib/soliddb
    + PMC_LOG=/opt/pmc/log
    + PMC_TMP=/opt/pmc/tmp
    + setupWLP
    + WLP_ROOT=/opt/pmc/lib/wlp
    + WLP_CONFIG_DIR=/opt/pmc/config/wlp
    + WLP_LOG_DIR=/opt/pmc/log/wlp
    + WLP_CONFIG_DIR=/opt/pmc/config/wlp
    + WLP_VERSION=8.5.5
    + WLP_SHARE_ROOT=/opt/pmc/lib/share/wlp-8.5.5
    + WLP_SERVER_ROOT=/opt/pmc/lib/wlp/usr/servers/pmc
    + WLP_PMC_CONTRIB=/opt/pmc/lib/wlp/usr/servers/pmc/libs/pmc-contrib/
    + WLP_SERVER_LOGS=/var/hsc/log/wlp
    + WLP_SERVER_APPS=/opt/pmc/lib/wlp/usr/servers/pmcapps/
    + HMC_PLUGINJARS_DIR=/usr/websm/codebase/pluginjars
    + RPM_NAME=pmc.sem.war
    + write_to_log START: RPM postUnInstall for pmc.sem.war
    ++ /bin/date --rfc-3339=seconds
    + echo '2014-12-04 22:24:13+01:00 START: RPM postUnInstall for pmc.sem.war'
    + /opt/pmc/bin/removeWARfromWLPserverxml.sh PMC_SEM_WAR
    + write_to_log removing of REST war is done
    ++ /bin/date --rfc-3339=seconds
    + echo '2014-12-04 22:24:13+01:00 removing of REST war is done'
    + write_to_log STOP: RPM postUnInstall for pmc.sem.war
    ++ /bin/date --rfc-3339=seconds
    + echo '2014-12-04 22:24:13+01:00 STOP: RPM postUnInstall for pmc.sem.war'
    D: erase: waitpid(16145) rc 16145 status 0 secs 0.016
    D: --- h# 849 pmc.sem.war-7.7.9.0-20140312T2009
    D: removing "pmc.sem.war" from Name index.
    D: removing 95 entries from Basenames index.
    D: opening db index /var/lib/rpm/Group create:nofsync mode=0x42
    D: removing "pmc" from Group index.
    D: opening db index /var/lib/rpm/Requirename create:nofsync mode=0x42
    D: removing 5 entries from Requirename index.
    D: opening db index /var/lib/rpm/Providename create:nofsync mode=0x42
    D: removing "pmc.sem.war" from Providename index.
    D: opening db index /var/lib/rpm/Dirnames create:nofsync mode=0x42
    D: removing 24 entries from Dirnames index.
    D: opening db index /var/lib/rpm/Requireversion create:nofsync mode=0x42
    D: removing 5 entries from Requireversion index.
    D: opening db index /var/lib/rpm/Provideversion create:nofsync mode=0x42
    D: removing "0:7.7.9.0-20140312T2009" from Provideversion index.
    D: opening db index /var/lib/rpm/Installtid create:nofsync mode=0x42
    D: removing 1 entries from Installtid index.
    D: opening db index /var/lib/rpm/Sigmd5 create:nofsync mode=0x42
    D: removing 1 entries from Sigmd5 index.
    D: opening db index /var/lib/rpm/Sha1header create:nofsync mode=0x42
    D: removing "f280a38b206c3192103a5f4050991e1690ed43ea" from Sha1header index.
    D: opening db index /var/lib/rpm/Filemd5s create:nofsync mode=0x42
    D: removing 95 entries from Filemd5s index.
    D: running post-transaction scripts
    D: closed db index /var/lib/rpm/Filemd5s
    D: closed db index /var/lib/rpm/Sha1header
    D: closed db index /var/lib/rpm/Sigmd5
    D: closed db index /var/lib/rpm/Installtid
    D: closed db index /var/lib/rpm/Provideversion
    D: closed db index /var/lib/rpm/Requireversion
    D: closed db index /var/lib/rpm/Dirnames
    D: closed db index /var/lib/rpm/Triggername
    D: closed db index /var/lib/rpm/Providename
    D: closed db index /var/lib/rpm/Requirename
    D: closed db index /var/lib/rpm/Group
    D: closed db index /var/lib/rpm/Basenames
    D: closed db index /var/lib/rpm/Name
    D: closed db index /var/lib/rpm/Packages
    D: closed db environment /var/lib/rpm/Packages
    D: May free Score board((nil))
    package pmc.sem.war is not installed
    Corrective service installation was successful.

    For reference purposes, here are some example screen shots from a KVM session to the HMC during a update to MH01428:

    HMC network based upgrade to v7.7.9.0 SP1 - 1

    HMC network based upgrade to v7.7.9.0 SP1 - 2

The MH01428 update still shows error messages with regard to symlink creation appearing during the update process, which can be savely ignored. The error message “cp: cannot stat `.dev': No such file or directory” is also becoming an old friend and originates from the shell script /images/installImages inside the MH01428 installation ISO image, where non-existing files are attempted to be copied.

The strange output lines starting with “D:”, “+” and “++” characters seemed awfully familiar, just like the output of a “rpm -vv” command. From tracing down the call order of /images/installImages inside the MH01428 installation ISO image:

/images/installImages
448
449 if [ -f $image/installK2Payloads.sh ]
450 then
451     echo "Installing HMC REST Web Services ..."
452     $image/./installK2Payloads.sh $image
453 fi
454

to:

/images/installK2Payloads.sh
  4
  5 LogFile=/tmp/K2Install.log
  6 IndexFile=K2Payloads.txt
  7
[...]
 73     while read line
 74     do
 75     rpmToInstall=`echo $line | cut -d '/' -f 4`
 76     rpmToUpdate=`echo $line | cut -d '/' -f 4 | cut -d '-' -f 1`
 77 
 78     #   pmc.sem.war needs to be uninstalled and then installed
 79     if [ "$rpmToUpdate" == "pmc.sem.war" ]; then
 80         /bin/rpm -evv $rpmToUpdate --nodeps --allmatches
 81     fi
 82 
 83     /bin/rpm -q $rpmToUpdate
 84     if [ $? -eq 0 ]; then
 85         /bin/rpm -vvh -U $rpmToInstall >> $LogFile 2>&1
 86     else
 87         /bin/rpm -vv -i $rpmToInstall >> $LogFile 2>&1
 88     fi
 89     done < $IndexFile

it seems the dubious output is due to a missing output redirection at the “rpm -evv pmc.sem.war” command in line 80 in the above code snippet of “/images/installK2Payloads.sh”. Since the uninstall of pmc.sem.war is mentioned in the comment in line 78 and the uninstall process apparently finished successfully it can be savely ignored. Although from the above output and without privileged access to the HMCs OS its hard to verify, whether the RPM “pmc.sem.war-7.7.9.1-20140905T1656.i386.rpm” was subsequently successfully re-installed. It can indirectly be verified by looking at the log entries written to the file “/tmp/K2Install.log” in line 87 of the above code snippet. The contents of the log file “/var/hsc/log/EZBuild.rpm.log” written from within the RPM install-/erase-time scriptlets could also be interesting in order to verify everything was re-installed properly.

Aside from the error and dubious messages mentioned above, we're currently not experiencing any issues with the new HMC version v7.7.9.0 SP1 (V7R7.9.0.1).

// IBM SVC and experiences with Real-time Compression

We've been using the IBM SAN Volume Controller (SVC) for several years now (since about 2006). While the technological progress was a tad slow in the early years, development – probably along with popularity and more widespread use – of the SVC fortunately picked up considerable pace in recent years. For us the most interesting new features that emerged over time are the:

  • stretched cluster configuration, which seems to be far more popular in europe with its traditionally shorter distances between datacenters. It allows us to provide active-active access to host LUNs and thus considerably simplifying a resilient VMware environment.

  • synchronous VDisk mirroring, which allows us to provide mirrored LUNs that are independent of the storage vendor in the backend.

  • EasyTier, which allows us to utilize our TMS RamSan (now IBM Flash System) flash storage much more efficiently.

  • Real-time compression (RTC), which as well allows us to utilize our overall backend storage much more efficiently.

We also went through several cycles of node hardware, starting with our initial 2145-4F2 via the 2145-8F2 and the 2145-8G4 to our current 2145-CG8. Currently our overall environment looks like this:

  • Six 2145-CG8 nodes in three I/O groups.

  • A stretched cluster configuration covering two datacenters which are within a distance of about 300 meters of single-mode fibre length. A quorum storage on a third location on the same campus.

  • Dual fabric 8GB FC SAN consisting of four Brocade DCX-4S directors.

  • A total of six disk based storage systems from different vendors (HDS AMS2300, Fujitsu DX90, IBM V3700), one of each vendor in each datacenter, with a total capacity of about 260TB. The systems are typically sized and configured for multiple 4+1 or 8+1 RAID-5 arrays. The arrays are subsequently mapped entirely as LUNs to the SVC. All the LUNs from one disk storage system are pooled together into one MDiskGroup, forming a single, striped failure group.

  • A total of six flash based storage systems (TMS RamSan-630, TMS RamSan-810, IBM Flashsystem 820), one of each model in each datacenter, with a total capacity of about 34TB. The systems LUNs are also mapped to the SVC and all the LUNs from one flash storage are added to one disk based MDiskGroup for use as a SSD tier with EasyTier.

  • 65 host systems (IBM xSeries, IBM BladeCenter and IBM Power), running either non-virtualized or virtualized (VMware, Xen, PowerVM) workloads.

  • 291 VDisks, ranging from sizes of 1GB up to 4TB. Almost all VDisks are mirrored, exceptions are made where the application on the host prefers to do the mirroring or the replication itself (e.g. MS Exchange).

For about seven months – since the end of april 2014 – we've now been using Real-time compression (RTC). We started by implementing RPQ 8S1296 on all of our nodes. This added an additional 6-core CPU and 24GB memory to each node. As a result the “normal” SVC operation still uses four of the CPU-cores on the initially installed CPU and the RTC algorithm is dedicated eight CPU-cores – two on the initially and six on the additionally installed CPU. The SVC code version was v7.1.0.3 when we initially started testing and implementing RTC (see the screenshots below). After gradually converting more and more VDisks to compressed volumes, the CPU load of the RTC algorithm became quite noticable (30-60%). Along with that, a substancially increased latency (>10ms) could be observed. After updating the SVC code to v7.2.0.7, the CPU utilization dropped noticably to 10% and below. The latency also went back to the values (<2ms) usually observed before implementing RTC. There must have been quite an improvement in the RTC code, unfortunately IBM does not publish any such interesting details.

Over the course of implementing RTC, i took four series of screenshots from the SVC WebUI showing the compression allocation view at that particular point in time. They have been combined into the four following images showing all information at once, with the last one being a representation of the current situation:

RTC compressed capacity - Sample 1

RTC compressed capacity - Sample 2

RTC compressed capacity - Sample 3

RTC compressed capacity - Sample 4

One thing about the visual representation in the compression allocation view and the volume of RTC licensed storage – which confused me too at first – has to be noted. It seems that with regard to RTC licensing only the storage space allocated to primary VDisk volumes i.e. the unmirrored storage capacity is considered. From the information available on the matter at the time, both the corresponding sections from the “IBM EMEA Software Announcement ZP12-0235”:

The license entitles users for the quantity of terabytes of SVC volumes created with real-time compression enabled. The volume size (and not necessarily the amount of data you are able to store on that volume compressed) is the measure used to determine how many terabytes of 5641-CP1 to license.

and from the “Real-time Compression in SAN Volume Controller and Storwize V7000” redpaper:

In SAN Volume Controller, real-time compression is licensed by the total number of terabytes of virtual capacity, which is the amount of storage that the host sees.

are a bit ambiguous. At first the emphasis seems to be on the matter of uncompressed vs. compressed storage size. But on second thought, the key words “[…] the amount of storage that the host sees.” from the second quote come into play. Those basically say, that enabling RTC on secondary VDisk copies is free, since a host only sees the unmirrored amount of storage.

Example: In our setup each VDisk compressed with RTC has also a secondary copy, also compressed with RTC. There is currently only one exception in the form of a flash copy volume of 2750GB which is compressed, but not mirrored. The currently compressed virtual capacity is 62.67TB. The currently used RTC licenses is being reported as 32.68TB. The calculation is: ( 62.67TB - 2750GB ) / 2 + 2750GB = 32.68TB. Makes sense, doesn't it?

For the four cases shown in the images above, the average RTC+TP and RTC-only compression ratio, relative storage size after compression and relative storage saving have been calculated and are shown in the following table:

Sample RTC plus Thin Provisioning RTC only
Ratio Relative Size Relative Saving Ratio Relative Size Relative Saving
1 1:3.75 26.69% 73.31% 1:3.06 32.65% 67.35%
2 1:3.63 27.51% 72.49% 1:3.02 33.07% 66.92%
3 1:3.5 28.58% 71.42% 1:2.80 35.65% 64.35%
4 1:3.2 31.25% 68.75% 1:2.60 38.53% 61.47%

Although thin provisioning (TP) alone would amount to 16-20% storage saving on the overall average, the larger and quiet substancial effect of 64-67% of storage saving on the overall average can only be achieved with RTC. Needless to say, we're currently only using RTC on VDisks that promise to yield rather good compression results. This is done in order to save valueable licensed compression volume and to minimize the number of CPU cycles wasted on uncompressible data. For guidelines please see the recommendations in the redbook referenced below in the “Links & Resources” section. The VDisks have either been chosen by estimating the compressability with the comprestimator utility or by knowing the application data very well. VDisks which contain data with an inherent high entropy, like e.g. encrypted and compressed MS Exchange DAGs, repositories of already compressed installation media, compressed Windows system images or compressed AIX mksysb images, page compressed MS SQL data files or fileserver volumes with user data (docx, xlsx, pptx, zip, jpeg, mpeg, etc.) have been excluded from RTC for now. We're still investigating which way to ultimately go on the topic of MS SQL page compression vs. IBM SVC RTC. We're also still sorting out the “mess” of compressible and uncompressible data being mixed together within the same VMware datastores before converting some of them into RTC enabled VDisks. We'll probably end up with a mix of RTC enabled VDisks backing VMware datastores containing compression-friendly VMs and regular VDisks backing datastores containing high-entropy, less compressible VMs. It'll be interesting to see what the ratio between the two will be and which VM will fall into which category.

A detailed compilation of storage saving with RTC on a per VDisk basis is shown in the section Detailed per VDisk RTC data. The columns are pretty self-explainatory, with the most interesting columns being “Application Type”, “Size (%)” and “Saving (%)”. To get a better overview, a condensed view aggregated by “Application Type” was compliled. The following table shows the values aggregated by “Application Type”. The columns “Avg. Size (GB)” and “Avg. Compressed Size (GB)” show the arithmetic average for the VDisk size and compressed size. To be able to compare the different application types against each other, relative arithmetic averages were calculated (columns “Avg. Size (%)” and “vg. Saving (%)”). The columns “Min./Max. Size/Saving (%)” and “Samples” are provided to get an impression about the variability and the significance of the arithmetic averages.

Application Type Avg. Size (GB) Avg. Compressed Size (GB) Min. Size (%) Avg. Size (%) Max. Size (%) Min. Saving (%) Avg. Saving (%) Max. Saving (%) Samples
AIX rootvg 16.61 5.53 9.38 33.29 73.44 9.38 66.71 90.62 198
Apache & MySQL 19.56 10.58 17.19 54.12 84.38 15.62 45.88 82.81 18
Code Server 200.00 64.50 32.25 32.25 32.25 67.75 67.75 67.75 2
Fileserver 350.00 142.63 40.71 40.75 40.79 59.21 59.25 59.29 2
Linux Package 250.00 152.75 61.10 61.10 61.10 38.90 38.90 38.90 2
MS SQL 120.00 18.50 15.42 15.42 15.42 84.58 84.58 84.58 2
Database 346.40 86.56 5.38 24.99 59.17 40.83 75.01 94.62 80
ERP 426.95 141.02 21.25 33.03 48.05 51.95 66.97 78.75 59
TSM OpCenter 26.00 9.25 35.58 35.58 35.58 64.42 64.42 64.42 2
VMware ESX 1756.00 798.84 28.34 45.49 53.73 46.27 54.51 71.66 8
Windows Package 300.00 185.13 61.67 61.71 61.75 38.25 38.29 38.33 2
Xen Server 512.00 184.64 11.87 36.06 47.75 52.25 63.94 88.13 18

A graphical representation of the above aggregated data is shown in the following graph:

Relative average SVC RTC VDisk size by application

The values “Avg. Size (%)” and “Avg. Saving (%)” are shown as colored bars, the error bars are their respective relative minimum and maximum values, the numbers at the bottom of the colored bars are the number of samples per application type.

The “AIX rootvg” and “Database” application types show rather good compression results, but also a high range of variability. For the case of “AIX rootvg” the compression results depend mainly on the amount of paging space being used, since on all systems the paging space is part of the rootvg. Systems with very low compressed VDisk size also show no or almost no paging space usage. For the case of “Database” the compression results obviously depend on the data stored within the database tablespaces, unfortunately i have no further information on what kind of data is stored in the less compressible cases. In the most compressible cases (5.38% and 7.32% of the original VDisk size) though, the databases contain large amounts of text data and fulltext search indexes, which explains the extraordinary compression results. The “ERP” application type shows equally good compression results, but with a much lower variability, which seems to be largely caused by the current amount of free unused database space. The sample from the “MS SQL” application type is unfortunately the only VDisk directly allocated to a MS SQL Server instance, so it's not really a representative sample. All other MS SQL Server instance in our environment run on VMware and the VDisks there are currently not RTC enabled due to the application and use case mixture described above. The “Code Server” and “Fileserver” application types show good compression results, considering the data usually associated with those. The low sample number indicated that they have specifically been chosen as candidates for RTC enabled VDisks. Especially the other available fileserver VDisks showed much worse results in the preliminary comprestimator runs. Only the the fileserver VDisk containing the Windows server saved user profiles showed good enough results to justify enabling RTC. The “Linux Package” and “Windows Package” application types show the expected worst compression results, since the data on those VDisks is already stored in compressed formats. Still, compression savings of approximately 40% on this kind of data is still pretty good. The “Apache & MySQL” application type is by its compression behaviour kind of a mixture between the “AIX rootvg” and “Fileserver” application types, since it has the same paging space configuration and has large amounts of already compressed data (bz2, gz, docx, xlsx, pptx, zip, jpeg, mpeg, etc.) stored on the VDisks. The “VMware ESX” and “Xen Server” also show average compression results, considering that those are run by 3rd parties where there is currently no distinction between and seperation of compression-friendly from compression-unfriendly VM data being made.

Overall, we're up to now quite happy with the SVCs RTC feature, since it gives us some breathing room and on the overall takes off the pressure to evaluate, purchase, implement and maintain additional storage units for the foreseeable future. On the downside, there is a pretty hefty price tag to the RTC volume licenses. Especially compared to other vendors (e.g. Pure Storage) where the compression functionality is part of the systems base package. One is advised to do a thorough TCO calculation to determine whether the investment in SVC RTC licenses outways the benefits of operating storage systems with actually allocateable space. In the end this boils down to a bet about the current and future compressability of the data actually stored. Besides licensing terms another issue for us was, that we unfortunately pretty quickly reached the limit for the allowed number of compressed VDisks per I/O group on our current 2145-CG8 hardware (max. 200 RTC enabled VDisks). This limit is put in place by SVC development as a safeguard, supposedly in order to keep the nodes from being overloaded with RTC workload. While understandable from a technical point of view, this limit can be reached pretty quickly if you're for example using a lot RTC enabled rootvgs or if you're following the SAP or Oracle disk layout guidelines pretty closely. For the rootvgs and possibly test and development SAP or Oracle systems a consolidation of the system and data disks into fewer VDisks using AIX/VIOS shared storage pools could be an option. But then again, the same downsides for e.g. VMware datastores apply to shared storage pools as well.

Detailed per VDisk RTC data

Detailed compilation of storage saving with RTC on a per VDisk basis. If JavaScript is enabled in your browser, click on a column headers to sort by that particular column.

Application Type VDisk Name Type Size (GB) Compressed Size (GB) Size (%) Saving (%) Ext. HDD Ext. SSD
AIX rootvg sas-8G-197 primary 8.00 4.00 50.00 50.00 16 0
AIX rootvg sas-8G-197 secondary 8.00 4.00 50.00 50.00 16 0
AIX rootvg sas-24G-155 primary 24.00 8.50 35.42 64.58 34 0
AIX rootvg sas-24G-155 secondary 24.00 8.50 35.42 64.58 34 0
AIX rootvg sas-16G-209 primary 16.00 4.00 25.00 75.00 16 0
AIX rootvg sas-16G-209 secondary 16.00 4.00 25.00 75.00 16 0
AIX rootvg sas-16G-2CA primary 16.00 2.50 15.62 84.38 10 0
AIX rootvg sas-16G-2CA secondary 16.00 2.50 15.62 84.38 10 0
AIX rootvg sas-16G-2C8 primary 16.00 2.75 17.19 82.81 11 0
AIX rootvg sas-16G-2C8 secondary 16.00 2.75 17.19 82.81 11 0
AIX rootvg sas-16G-2C9 primary 16.00 2.50 15.62 84.38 10 0
AIX rootvg sas-16G-2C9 secondary 16.00 2.50 15.62 84.38 10 0
AIX rootvg sas-16G-23E primary 16.00 2.50 15.62 84.38 10 0
AIX rootvg sas-16G-23E secondary 16.00 2.50 15.62 84.38 10 0
AIX rootvg sas-16G-2B5 primary 16.00 1.50 9.38 90.62 6 0
AIX rootvg sas-16G-2B5 secondary 16.00 1.50 9.38 90.62 6 0
AIX rootvg sas-16G-307 primary 16.00 11.75 73.44 26.56 47 0
AIX rootvg sas-16G-307 secondary 16.00 11.75 73.44 26.56 47 0
AIX rootvg sas-16G-2AA primary 16.00 4.50 28.12 71.88 18 0
AIX rootvg sas-16G-2AA secondary 16.00 4.50 28.12 71.88 18 0
AIX rootvg sas-8G-19A primary 8.00 1.50 18.75 81.25 6 0
AIX rootvg sas-8G-19A secondary 8.00 1.50 18.75 81.25 6 0
AIX rootvg sas-8G-241 primary 8.00 1.75 21.88 78.12 7 0
AIX rootvg sas-8G-241 secondary 8.00 1.75 21.88 78.12 7 0
AIX rootvg sas-8G-2BD primary 8.00 1.50 18.75 81.25 6 0
AIX rootvg sas-8G-2BD secondary 8.00 1.50 18.75 81.25 6 0
AIX rootvg sas-8G-2BE primary 8.00 1.50 18.75 81.25 6 0
AIX rootvg sas-8G-2BE secondary 8.00 1.50 18.75 81.25 6 0
AIX rootvg sas-8G-194 primary 8.00 1.25 15.62 84.38 5 0
AIX rootvg sas-8G-194 secondary 8.00 1.25 15.62 84.38 5 0
AIX rootvg sas-8G-195 primary 8.00 1.50 18.75 81.25 6 0
AIX rootvg sas-8G-195 secondary 8.00 1.50 18.75 81.25 6 0
AIX rootvg sas-8G-22F primary 8.00 3.75 46.88 53.12 15 0
AIX rootvg sas-8G-22F secondary 8.00 3.75 46.88 53.12 15 0
AIX rootvg sas-16G-264 primary 16.00 6.00 37.50 62.50 24 0
AIX rootvg sas-16G-264 secondary 16.00 6.00 37.50 62.50 24 0
AIX rootvg sas-16G-263 primary 16.00 7.00 43.75 56.25 28 0
AIX rootvg sas-16G-263 secondary 16.00 7.00 43.75 56.25 28 0
AIX rootvg sas-16G-1D2 primary 16.00 7.00 43.75 56.25 0 28
AIX rootvg sas-16G-1D2 secondary 16.00 7.00 43.75 56.25 28 0
AIX rootvg sas-16G-1B1 primary 16.00 5.50 34.38 65.62 0 22
AIX rootvg sas-16G-1B1 secondary 16.00 5.50 34.38 65.62 22 0
AIX rootvg sas-16G-14D primary 16.00 5.75 35.94 64.06 0 23
AIX rootvg sas-16G-14D secondary 16.00 5.75 35.94 64.06 23 0
AIX rootvg sas-32G-322 primary 32.00 8.50 26.56 73.44 34 0
AIX rootvg sas-32G-322 secondary 32.00 8.50 26.56 73.44 34 0
AIX rootvg flash-32G-1F3 primary 32.00 11.75 36.72 63.28 0 47
AIX rootvg flash-32G-1F3 secondary 32.00 11.75 36.72 63.28 47 0
AIX rootvg sas-16G-1F1 primary 16.00 7.50 46.88 53.12 0 30
AIX rootvg sas-16G-1F1 secondary 16.00 7.50 46.88 53.12 30 0
AIX rootvg sas-16G-15C primary 16.00 5.00 31.25 68.75 20 0
AIX rootvg sas-16G-15C secondary 16.00 5.00 31.25 68.75 20 0
AIX rootvg sas-32G-1F4 primary 32.00 8.25 25.78 74.22 33 0
AIX rootvg sas-32G-1F4 secondary 32.00 8.25 25.78 74.22 33 0
AIX rootvg sas-16G-267 primary 16.00 5.25 32.81 67.19 21 0
AIX rootvg sas-16G-267 secondary 16.00 5.25 32.81 67.19 21 0
AIX rootvg sas-16G-2F4 primary 16.00 5.50 34.38 65.62 22 0
AIX rootvg sas-16G-2F4 secondary 16.00 5.50 34.38 65.62 22 0
AIX rootvg sas-16G-2FB primary 16.00 8.75 54.69 45.31 35 0
AIX rootvg sas-16G-2FB secondary 16.00 8.75 54.69 45.31 35 0
AIX rootvg sas-16G-11F primary 16.00 7.00 43.75 56.25 28 0
AIX rootvg sas-16G-11F secondary 16.00 7.00 43.75 56.25 28 0
AIX rootvg sas-16G-265 primary 16.00 5.00 31.25 68.75 20 0
AIX rootvg sas-16G-265 secondary 16.00 5.00 31.25 68.75 20 0
AIX rootvg sas-16G-146 primary 16.00 6.25 39.06 60.94 25 0
AIX rootvg sas-16G-146 secondary 16.00 6.25 39.06 60.94 25 0
AIX rootvg sas-16G-28C primary 16.00 5.00 31.25 68.75 20 0
AIX rootvg sas-16G-28C secondary 16.00 5.00 31.25 68.75 20 0
AIX rootvg sas-16G-28E primary 16.00 9.75 60.94 39.06 39 0
AIX rootvg sas-16G-28E secondary 16.00 9.75 60.94 39.06 39 0
AIX rootvg sas-16G-205 primary 16.00 5.00 31.25 68.75 20 0
AIX rootvg sas-16G-205 secondary 16.00 5.00 31.25 68.75 20 0
AIX rootvg sas-16G-1BD primary 16.00 10.00 62.50 37.50 40 0
AIX rootvg sas-16G-1BD secondary 16.00 10.00 62.50 37.50 40 0
AIX rootvg sas-16G-28F primary 16.00 10.25 64.06 35.94 41 0
AIX rootvg sas-16G-28F secondary 16.00 10.25 64.06 35.94 41 0
AIX rootvg sas-16G-162 primary 16.00 6.75 42.19 57.81 27 0
AIX rootvg sas-16G-162 secondary 16.00 6.75 42.19 57.81 27 0
AIX rootvg sas-16G-2A9 primary 16.00 4.50 28.12 71.88 18 0
AIX rootvg sas-16G-2A9 secondary 16.00 4.50 28.12 71.88 18 0
AIX rootvg sas-16G-1B9 primary 16.00 6.75 42.19 57.81 27 0
AIX rootvg sas-16G-1B9 secondary 16.00 6.75 42.19 57.81 27 0
AIX rootvg sas-16G-1BA primary 16.00 6.75 42.19 57.81 27 0
AIX rootvg sas-16G-1BA secondary 16.00 6.75 42.19 57.81 27 0
AIX rootvg sas-16G-1BC primary 16.00 9.75 60.94 39.06 39 0
AIX rootvg sas-16G-1BC secondary 16.00 9.75 60.94 39.06 39 0
AIX rootvg sas-16G-1BB primary 16.00 11.50 71.88 28.12 46 0
AIX rootvg sas-16G-1BB secondary 16.00 11.50 71.88 28.12 46 0
AIX rootvg sas-16G-1A9 primary 16.00 3.50 21.88 78.12 14 0
AIX rootvg sas-16G-1A9 secondary 16.00 3.50 21.88 78.12 14 0
AIX rootvg sas-16G-2CE primary 16.00 4.75 29.69 70.31 19 0
AIX rootvg sas-16G-2CE secondary 16.00 4.75 29.69 70.31 19 0
AIX rootvg sas-16G-29B primary 16.00 5.00 31.25 68.75 20 0
AIX rootvg sas-16G-29B secondary 16.00 5.00 31.25 68.75 20 0
AIX rootvg sas-16G-1BF primary 16.00 8.25 51.56 48.44 33 0
AIX rootvg sas-16G-1BF secondary 16.00 8.25 51.56 48.44 33 0
AIX rootvg sas-16G-243 primary 16.00 5.00 31.25 68.75 20 0
AIX rootvg sas-16G-243 secondary 16.00 5.00 31.25 68.75 20 0
AIX rootvg sas-16G-2CF primary 16.00 5.00 31.25 68.75 20 0
AIX rootvg sas-16G-2CF secondary 16.00 5.00 31.25 68.75 20 0
AIX rootvg sas-16G-29C primary 16.00 5.00 31.25 68.75 20 0
AIX rootvg sas-16G-29C secondary 16.00 5.00 31.25 68.75 20 0
AIX rootvg sas-16G-242 primary 16.00 4.75 29.69 70.31 19 0
AIX rootvg sas-16G-242 secondary 16.00 4.50 28.12 71.88 18 0
AIX rootvg sas-16G-29E primary 16.00 4.75 29.69 70.31 19 0
AIX rootvg sas-16G-29E secondary 16.00 4.75 29.69 70.31 19 0
AIX rootvg sas-16G-2D0 primary 16.00 5.00 31.25 68.75 20 0
AIX rootvg sas-16G-2D0 secondary 16.00 5.00 31.25 68.75 20 0
AIX rootvg sas-16G-29D primary 16.00 5.00 31.25 68.75 20 0
AIX rootvg sas-16G-29D secondary 16.00 5.00 31.25 68.75 20 0
AIX rootvg sas-16G-1BE primary 16.00 8.25 51.56 48.44 33 0
AIX rootvg sas-16G-1BE secondary 16.00 8.25 51.56 48.44 33 0
AIX rootvg sas-16G-29F primary 16.00 4.75 29.69 70.31 19 0
AIX rootvg sas-16G-29F secondary 16.00 4.75 29.69 70.31 19 0
AIX rootvg sas-16G-261 primary 16.00 5.50 34.38 65.62 22 0
AIX rootvg sas-16G-261 secondary 16.00 5.50 34.38 65.62 22 0
AIX rootvg sas-8G-199 primary 8.00 1.25 15.62 84.38 5 0
AIX rootvg sas-8G-199 secondary 8.00 1.25 15.62 84.38 5 0
AIX rootvg sas-8G-240 primary 8.00 3.00 37.50 62.50 12 0
AIX rootvg sas-8G-240 secondary 8.00 3.00 37.50 62.50 12 0
AIX rootvg sas-16G-249 primary 16.00 4.50 28.12 71.88 18 0
AIX rootvg sas-16G-249 secondary 16.00 4.50 28.12 71.88 18 0
AIX rootvg sas-24G-15D primary 24.00 5.00 20.83 79.17 20 0
AIX rootvg sas-24G-15D secondary 24.00 5.00 20.83 79.17 20 0
AIX rootvg sas-16G-24B primary 16.00 4.25 26.56 73.44 17 0
AIX rootvg sas-16G-24B secondary 16.00 4.25 26.56 73.44 17 0
AIX rootvg sas-16G-24D primary 16.00 6.00 37.50 62.50 24 0
AIX rootvg sas-16G-24D secondary 16.00 6.00 37.50 62.50 24 0
AIX rootvg sas-16G-252 primary 16.00 5.25 32.81 67.19 21 0
AIX rootvg sas-16G-252 secondary 16.00 5.25 32.81 67.19 21 0
AIX rootvg sas-16G-278 primary 16.00 5.00 31.25 68.75 20 0
AIX rootvg sas-16G-278 secondary 16.00 5.00 31.25 68.75 20 0
AIX rootvg sas-16G-279 primary 16.00 4.75 29.69 70.31 19 0
AIX rootvg sas-16G-279 secondary 16.00 4.75 29.69 70.31 19 0
AIX rootvg sas-16G-270 primary 16.00 5.25 32.81 67.19 21 0
AIX rootvg sas-16G-270 secondary 16.00 5.25 32.81 67.19 21 0
AIX rootvg sas-16G-284 primary 16.00 4.75 29.69 70.31 19 0
AIX rootvg sas-16G-284 secondary 16.00 4.75 29.69 70.31 19 0
AIX rootvg sas-16G-285 primary 16.00 4.75 29.69 70.31 19 0
AIX rootvg sas-16G-285 secondary 16.00 4.75 29.69 70.31 19 0
AIX rootvg sas-16G-27A primary 16.00 4.75 29.69 70.31 19 0
AIX rootvg sas-16G-27A secondary 16.00 4.75 29.69 70.31 19 0
AIX rootvg sas-16G-2DC primary 16.00 6.25 39.06 60.94 25 0
AIX rootvg sas-16G-2DC secondary 16.00 6.25 39.06 60.94 25 0
AIX rootvg sas-16G-27B primary 16.00 4.75 29.69 70.31 19 0
AIX rootvg sas-16G-27B secondary 16.00 4.75 29.69 70.31 19 0
AIX rootvg sas-16G-310 primary 16.00 4.75 29.69 70.31 19 0
AIX rootvg sas-16G-310 secondary 16.00 4.75 29.69 70.31 19 0
AIX rootvg sas-16G-312 primary 16.00 10.00 62.50 37.50 40 0
AIX rootvg sas-16G-312 secondary 16.00 10.00 62.50 37.50 40 0
AIX rootvg sas-36G-22B primary 36.00 9.00 25.00 75.00 36 0
AIX rootvg sas-36G-22B secondary 36.00 9.00 25.00 75.00 36 0
AIX rootvg sas-16G-22D primary 16.00 4.50 28.12 71.88 18 0
AIX rootvg sas-16G-22D secondary 16.00 4.50 28.12 71.88 18 0
AIX rootvg sas-16G-308 primary 16.00 6.75 42.19 57.81 23 4
AIX rootvg sas-16G-308 secondary 16.00 6.75 42.19 57.81 27 0
AIX rootvg sas-16G-233 primary 16.00 8.75 54.69 45.31 35 0
AIX rootvg sas-16G-233 secondary 16.00 8.75 54.69 45.31 35 0
AIX rootvg sas-16G-30A primary 16.00 6.75 42.19 57.81 27 0
AIX rootvg sas-16G-30A secondary 16.00 6.75 42.19 57.81 27 0
AIX rootvg sas-16G-226 primary 16.00 6.00 37.50 62.50 24 0
AIX rootvg sas-16G-226 secondary 16.00 6.00 37.50 62.50 24 0
AIX rootvg sas-16G-0F1 primary 16.00 5.50 34.38 65.62 22 0
AIX rootvg sas-16G-0F1 secondary 16.00 5.50 34.38 65.62 22 0
AIX rootvg sas-24G-1A4 primary 24.00 7.50 31.25 68.75 30 0
AIX rootvg sas-24G-1A4 secondary 24.00 7.50 31.25 68.75 30 0
AIX rootvg sas-16G-1AE primary 16.00 4.50 28.12 71.88 17 1
AIX rootvg sas-16G-1AE secondary 16.00 4.50 28.12 71.88 18 0
AIX rootvg sas-24G-1A5 primary 24.00 9.75 40.62 59.38 39 0
AIX rootvg sas-24G-1A5 secondary 24.00 9.75 40.62 59.38 39 0
AIX rootvg sas-24G-1A6 primary 24.00 8.75 36.46 63.54 35 0
AIX rootvg sas-24G-1A6 secondary 24.00 8.75 36.46 63.54 35 0
AIX rootvg sas-16G-259 primary 16.00 3.25 20.31 79.69 13 0
AIX rootvg sas-16G-259 secondary 16.00 3.25 20.31 79.69 13 0
AIX rootvg sas-16G-19E primary 16.00 2.75 17.19 82.81 11 0
AIX rootvg sas-16G-19E secondary 16.00 2.75 17.19 82.81 11 0
AIX rootvg sas-24G-257 primary 24.00 4.50 18.75 81.25 18 0
AIX rootvg sas-24G-257 secondary 24.00 4.50 18.75 81.25 18 0
AIX rootvg sas-16G-343 primary 16.00 2.00 12.50 87.50 8 0
AIX rootvg sas-16G-343 secondary 16.00 2.00 12.50 87.50 8 0
AIX rootvg sas-16G-212 primary 16.00 5.00 31.25 68.75 20 0
AIX rootvg sas-16G-212 secondary 16.00 5.00 31.25 68.75 20 0
AIX rootvg sas-16G-214 primary 16.00 4.00 25.00 75.00 16 0
AIX rootvg sas-16G-214 secondary 16.00 4.00 25.00 75.00 16 0
AIX rootvg sas-16G-213 primary 16.00 4.50 28.12 71.88 18 0
AIX rootvg sas-16G-213 secondary 16.00 4.50 28.12 71.88 18 0
AIX rootvg sas-16G-1E7 primary 16.00 5.50 34.38 65.62 22 0
AIX rootvg sas-16G-1E7 secondary 16.00 5.50 34.38 65.62 22 0
AIX rootvg sas-24G-1E0 primary 24.00 3.75 15.62 84.38 15 0
AIX rootvg sas-24G-1E0 secondary 24.00 3.50 14.58 85.42 14 0
AIX rootvg sas-16G-1E2 primary 16.00 4.25 26.56 73.44 17 0
AIX rootvg sas-16G-1E2 secondary 16.00 4.25 26.56 73.44 17 0
AIX rootvg sas-24G-305 primary 24.00 7.00 29.17 70.83 21 7
AIX rootvg sas-24G-305 secondary 24.00 7.00 29.17 70.83 28 0
AIX rootvg sas-24G-306 primary 24.00 6.75 28.12 71.88 22 5
AIX rootvg sas-24G-306 secondary 24.00 6.75 28.12 71.88 27 0
AIX rootvg sas-16G-323 primary 16.00 4.50 28.12 71.88 18 0
AIX rootvg sas-16G-323 secondary 16.00 4.50 28.12 71.88 18 0
Apache & MySQL sas-16G-13A primary 16.00 7.75 48.44 51.56 24 7
Apache & MySQL sas-16G-13A secondary 16.00 7.75 48.44 51.56 31 0
Apache & MySQL sas-16G-18D primary 16.00 9.75 60.94 39.06 38 1
Apache & MySQL sas-16G-18D secondary 16.00 9.75 60.94 39.06 39 0
Apache & MySQL sas-16G-303 primary 16.00 11.00 68.75 31.25 44 0
Apache & MySQL sas-16G-303 secondary 16.00 11.00 68.75 31.25 44 0
Apache & MySQL sas-16G-2C3 primary 16.00 13.50 84.38 15.62 45 9
Apache & MySQL sas-16G-2C3 secondary 16.00 13.50 84.38 15.62 54 0
Apache & MySQL sas-32G-2C1 primary 32.00 17.50 54.69 45.31 33 37
Apache & MySQL sas-32G-2C1 secondary 32.00 17.50 54.69 45.31 70 0
Apache & MySQL sas-32G-2C2 primary 32.00 18.00 56.25 43.75 36 36
Apache & MySQL sas-32G-2C2 secondary 32.00 18.00 56.25 43.75 72 0
Apache & MySQL sas-16G-2D8 primary 16.00 2.75 17.19 82.81 8 3
Apache & MySQL sas-16G-2D8 secondary 16.00 2.75 17.19 82.81 11 0
Apache & MySQL sas-16G-2D9 primary 16.00 4.75 29.69 70.31 16 3
Apache & MySQL sas-16G-2D9 secondary 16.00 4.75 29.69 70.31 19 0
Apache & MySQL sas-16G-304 primary 16.00 10.25 64.06 35.94 33 8
Apache & MySQL sas-16G-304 secondary 16.00 10.25 64.06 35.94 41 0
Code Server sas-200G-17E primary 200.00 64.50 32.25 67.75 202 56
Code Server sas-200G-17E secondary 200.00 64.50 32.25 67.75 258 0
Fileserver sas-350G-1D5 primary 350.00 142.50 40.71 59.29 351 219
Fileserver sas-350G-1D5 secondary 350.00 142.75 40.79 59.21 571 0
Linux Package sas-250G-23C primary 250.00 152.75 61.10 38.90 468 143
Linux Package sas-250G-23C secondary 250.00 152.75 61.10 38.90 611 0
MS SQL flash-120G-10A primary 120.00 18.50 15.42 84.58 0 74
MS SQL flash-120G-10A secondary 120.00 18.50 15.42 84.58 74 0
Database sas-100G-1F8 primary 100.00 23.75 23.75 76.25 82 13
Database sas-100G-1F8 secondary 100.00 23.75 23.75 76.25 95 0
Database sas-100G-2CD primary 100.00 12.00 12.00 88.00 31 17
Database sas-100G-2CD secondary 100.00 12.00 12.00 88.00 48 0
Database sas-100G-2CB primary 100.00 14.50 14.50 85.50 45 13
Database sas-100G-2CB secondary 100.00 14.50 14.50 85.50 58 0
Database sas-100G-2CC primary 100.00 11.25 11.25 88.75 31 14
Database sas-100G-2CC secondary 100.00 11.25 11.25 88.75 45 0
Database flash-150G-23F primary 150.00 30.25 20.17 79.83 0 121
Database flash-150G-23F secondary 150.00 30.25 20.17 79.83 121 0
Database sas-150G-30E primary 150.00 88.75 59.17 40.83 297 58
Database sas-150G-30E secondary 150.00 88.75 59.17 40.83 355 0
Database sas-600G-30D primary 600.00 104.75 17.46 82.54 108 311
Database sas-600G-30D secondary 600.00 105.00 17.50 82.50 420 0
Database sas-150G-32D primary 150.00 19.00 12.67 87.33 45 31
Database sas-150G-32D secondary 150.00 19.00 12.67 87.33 76 0
Database sas-600G-32C primary 600.00 107.75 17.96 82.04 54 377
Database sas-600G-32C secondary 600.00 107.75 17.96 82.04 431 0
Database sas-120G-147 primary 120.00 49.25 41.04 58.96 167 30
Database sas-120G-147 secondary 120.00 49.25 41.04 58.96 197 0
Database sas-170G-28D primary 170.00 52.75 31.03 68.97 88 123
Database sas-170G-28D secondary 170.00 52.75 31.03 68.97 211 0
Database sas-300G-290 primary 300.00 97.00 32.33 67.67 315 73
Database sas-300G-290 secondary 300.00 97.00 32.33 67.67 388 0
Database sas-1550G-1C6 primary 1550.00 355.25 22.92 77.08 119 1302
Database sas-1550G-1C6 secondary 1550.00 355.25 22.92 77.08 1421 0
Database sas-150G-1C8 primary 150.00 31.25 20.83 79.17 45 80
Database sas-150G-1C8 secondary 150.00 31.25 20.83 79.17 125 0
Database sas-100G-291 primary 100.00 26.75 26.75 73.25 100 7
Database sas-100G-291 secondary 100.00 26.75 26.75 73.25 107 0
Database sas-900G-296 primary 900.00 309.75 34.42 65.58 123 1116
Database sas-900G-296 secondary 900.00 309.50 34.39 65.61 1238 0
Database sas-1000G-2AD primary 1000.00 73.25 7.32 92.67 283 10
Database sas-1000G-2AD secondary 1000.00 73.25 7.32 92.67 293 0
Database sas-1300G-1C2 primary 1300.00 299.50 23.04 76.96 185 1013
Database sas-1300G-1C2 secondary 1300.00 299.50 23.04 76.96 1198 0
Database sas-2150G-294 primary 2150.00 660.50 30.72 69.28 206 2436
Database sas-2150G-294 secondary 2150.00 660.75 30.73 69.27 2643 0
Database sas-150G-297 primary 150.00 44.50 29.67 70.33 73 105
Database sas-150G-297 secondary 150.00 44.50 29.67 70.33 178 0
Database sas-600G-1C5 primary 600.00 167.00 27.83 72.17 373 295
Database sas-600G-1C5 secondary 600.00 167.25 27.88 72.12 669 0
Database sas-200G-24A primary 200.00 52.00 26.00 74.00 120 88
Database sas-200G-24A secondary 200.00 52.00 26.00 74.00 208 0
Database flash-160G-24C primary 160.00 74.75 46.72 53.28 0 299
Database flash-160G-24C secondary 160.00 74.75 46.72 53.28 299 0
Database flash-260G-24E primary 260.00 74.25 28.56 71.44 0 297
Database flash-260G-24E secondary 260.00 74.25 28.56 71.44 297 0
Database sas-120G-253 primary 120.00 31.50 26.25 73.75 28 98
Database sas-120G-253 secondary 120.00 31.25 26.04 73.96 125 0
Database sas-250G-27C primary 250.00 53.00 21.20 78.80 157 55
Database sas-250G-27C secondary 250.00 53.00 21.20 78.80 212 0
Database flash-350G-27D primary 350.00 79.75 22.79 77.21 0 319
Database flash-350G-27D secondary 350.00 79.75 22.79 77.21 319 0
Database sas-180G-271 primary 180.00 51.75 28.75 71.25 98 109
Database sas-180G-271 secondary 180.00 52.00 28.89 71.11 208 0
Database sas-260G-286 primary 260.00 56.75 21.83 78.17 51 176
Database sas-260G-286 secondary 260.00 56.75 21.83 78.17 227 0
Database flash-150G-287 primary 150.00 34.25 22.83 77.17 0 137
Database flash-150G-287 secondary 150.00 34.25 22.83 77.17 137 0
Database sas-180G-27E primary 180.00 39.75 22.08 77.92 144 15
Database sas-180G-27E secondary 180.00 39.75 22.08 77.92 159 0
Database sas-180G-2DD primary 180.00 50.25 27.92 72.08 143 58
Database sas-180G-2DD secondary 180.00 50.25 27.92 72.08 201 0
Database flash-180G-27F primary 180.00 43.50 24.17 75.83 0 174
Database flash-180G-27F secondary 180.00 43.75 24.31 75.69 175 0
Database sas-120G-311 primary 120.00 36.50 30.42 69.58 85 61
Database sas-120G-311 secondary 120.00 36.50 30.42 69.58 146 0
Database flash-120G-313 primary 120.00 47.00 39.17 60.83 0 188
Database flash-120G-313 secondary 120.00 47.00 39.17 60.83 188 0
Database sas-140G-22A primary 140.00 49.50 35.36 64.64 80 118
Database sas-140G-22A secondary 140.00 49.75 35.54 64.46 199 0
Database sas-150G-22C primary 150.00 62.00 41.33 58.67 246 2
Database sas-150G-22C secondary 150.00 62.00 41.33 58.67 248 0
Database sas-80G-309 primary 80.00 17.75 22.19 77.81 47 24
Database sas-80G-309 secondary 80.00 17.75 22.19 77.81 71 0
Database sas-36G-30B primary 36.00 18.00 50.00 50.00 72 0
Database sas-36G-30B secondary 36.00 18.00 50.00 50.00 72 0
Database sas-200G-344 primary 200.00 10.75 5.38 94.62 43 0
Database sas-200G-344 secondary 200.00 10.75 5.38 94.62 43 0
ERP sas-250G-2C6 primary 250.00 76.50 30.60 69.40 110 196
ERP sas-250G-2C6 secondary 250.00 76.50 30.60 69.40 306 0
ERP sas-250G-10E primary 250.00 77.50 31.00 69.00 110 200
ERP sas-250G-10E secondary 250.00 77.50 31.00 69.00 310 0
ERP sas-2750G-345 primary 2750.00 803.50 29.22 70.78 3214 0
ERP flash-2750G-1B5 primary 2750.00 803.75 29.23 70.77 0 3215
ERP flash-2750G-1B5 secondary 2750.00 803.50 29.22 70.78 3214 0
ERP sas-150G-2D1 primary 150.00 41.25 27.50 72.50 126 39
ERP sas-150G-2D1 secondary 150.00 41.25 27.50 72.50 165 0
ERP sas-100G-2A0 primary 100.00 27.75 27.75 72.25 92 19
ERP sas-100G-2A0 secondary 100.00 27.75 27.75 72.25 111 0
ERP sas-130G-2A3 primary 130.00 53.00 40.77 59.23 77 135
ERP sas-130G-2A3 secondary 130.00 53.00 40.77 59.23 212 0
ERP sas-300G-2A6 primary 300.00 63.75 21.25 78.75 183 72
ERP sas-300G-2A6 secondary 300.00 63.75 21.25 78.75 255 0
ERP sas-150G-2D2 primary 150.00 38.50 25.67 74.33 98 56
ERP sas-150G-2D2 secondary 150.00 38.50 25.67 74.33 154 0
ERP sas-200G-2A1 primary 200.00 61.50 30.75 69.25 228 18
ERP sas-200G-2A1 secondary 200.00 61.25 30.63 69.38 245 0
ERP sas-250G-2A4 primary 250.00 108.00 43.20 56.80 60 372
ERP sas-250G-2A4 secondary 250.00 108.00 43.20 56.80 432 0
ERP sas-450G-2A7 primary 450.00 151.75 33.72 66.28 325 282
ERP sas-450G-2A7 secondary 450.00 151.75 33.72 66.28 607 0
ERP sas-700G-2D3 primary 700.00 228.00 32.57 67.43 61 851
ERP sas-700G-2D3 secondary 700.00 228.00 32.57 67.43 912 0
ERP sas-650G-2A2 primary 650.00 278.50 42.85 57.15 94 1020
ERP sas-650G-2A2 secondary 650.00 278.50 42.85 57.15 1114 0
ERP sas-320G-2A5 primary 320.00 153.75 48.05 51.95 69 546
ERP sas-320G-2A5 secondary 320.00 153.75 48.05 51.95 615 0
ERP sas-550G-2A8 primary 550.00 207.25 37.68 62.32 634 195
ERP sas-550G-2A8 secondary 550.00 207.50 37.73 62.27 830 0
ERP sas-340G-248 primary 340.00 87.00 25.59 74.41 340 8
ERP sas-340G-248 secondary 340.00 87.00 25.59 74.41 348 0
ERP sas-270G-2D4 primary 270.00 87.00 32.22 67.78 72 276
ERP sas-270G-2D4 secondary 270.00 86.75 32.13 67.87 347 0
ERP sas-340G-1AF primary 340.00 79.50 23.38 76.62 318 0
ERP sas-340G-1AF secondary 340.00 79.50 23.38 76.62 318 0
ERP sas-300G-2D5 primary 300.00 80.25 26.75 73.25 66 255
ERP sas-300G-2D5 secondary 300.00 80.25 26.75 73.25 321 0
ERP flash-370G-2D6 primary 370.00 118.50 32.03 67.97 0 474
ERP flash-370G-2D6 secondary 370.00 118.50 32.03 67.97 474 0
ERP sas-80G-101 primary 80.00 34.25 42.81 57.19 114 23
ERP sas-80G-101 secondary 80.00 34.25 42.81 57.19 137 0
ERP sas-260G-2E8 primary 260.00 90.00 34.62 65.38 310 50
ERP sas-260G-2E8 secondary 260.00 90.00 34.62 65.38 360 0
ERP sas-430G-11B primary 430.00 184.75 42.97 57.03 510 229
ERP sas-430G-11B secondary 430.00 184.75 42.97 57.03 739 0
ERP sas-460G-1D4 primary 460.00 179.75 39.08 60.92 669 50
ERP sas-460G-1D4 secondary 460.00 179.75 39.08 60.92 719 0
ERP sas-520G-236 primary 520.00 199.50 38.37 61.63 331 467
ERP sas-520G-236 secondary 520.00 199.50 38.37 61.63 798 0
ERP sas-170G-180 primary 170.00 62.00 36.47 63.53 204 44
ERP sas-170G-180 secondary 170.00 62.00 36.47 63.53 248 0
ERP sas-100G-14A primary 100.00 35.50 35.50 64.50 139 3
ERP sas-100G-14A secondary 100.00 35.50 35.50 64.50 142 0
ERP sas-210G-25B primary 210.00 84.75 40.36 59.64 157 182
ERP sas-210G-25B secondary 210.00 84.75 40.36 59.64 339 0
ERP sas-170G-22E primary 170.00 65.00 38.24 61.76 133 127
ERP sas-170G-22E secondary 170.00 65.00 38.24 61.76 260 0
TSM OpCenter sas-26G-301 primary 26.00 9.25 35.58 64.42 37 0
TSM OpCenter sas-26G-301 secondary 26.00 9.25 35.58 64.42 37 0
VMware ESX sas-1024G-1A7 primary 1024.00 290.25 28.34 71.66 1161 0
VMware ESX sas-1024G-1A7 secondary 1024.00 290.25 28.34 71.66 1161 0
VMware ESX sas-2000G-172 primary 2000.00 1030.75 51.54 48.46 2268 1855
VMware ESX sas-2000G-172 secondary 2000.00 1030.75 51.54 48.46 4123 0
VMware ESX sas-2000G-222 primary 2000.00 1074.50 53.73 46.27 2940 1358
VMware ESX sas-2000G-222 secondary 2000.00 1074.50 53.73 46.27 4298 0
VMware ESX sas-2000G-2B1 primary 2000.00 800.00 40.00 60.00 2632 568
VMware ESX sas-2000G-2B1 secondary 2000.00 799.75 39.99 60.01 3199 0
Windows Package sas-300G-1B8 primary 300.00 185.25 61.75 38.25 552 189
Windows Package sas-300G-1B8 secondary 300.00 185.00 61.67 38.33 740 0
Xen Server sas-512G-1AC primary 512.00 244.50 47.75 52.25 975 3
Xen Server sas-512G-1AC secondary 512.00 238.50 46.58 53.42 954 0
Xen Server sas-512G-1AD primary 512.00 212.25 41.46 58.54 750 99
Xen Server sas-512G-1AD secondary 512.00 206.75 40.38 59.62 827 0
Xen Server sas-512G-26D primary 512.00 175.50 34.28 65.72 661 41
Xen Server sas-512G-26D secondary 512.00 170.50 33.30 66.70 682 0
Xen Server sas-512G-283 primary 512.00 242.25 47.31 52.69 848 121
Xen Server sas-512G-283 secondary 512.00 238.75 46.63 53.37 955 0
Xen Server sas-512G-2B2 primary 512.00 147.75 28.86 71.14 12 579
Xen Server sas-512G-2B2 secondary 512.00 141.50 27.64 72.36 566 0
Xen Server sas-512G-2D7 primary 512.00 221.00 43.16 56.84 35 849
Xen Server sas-512G-2D7 secondary 512.00 219.50 42.87 57.13 878 0
Xen Server sas-512G-2E9 primary 512.00 151.25 29.54 70.46 600 5
Xen Server sas-512G-2E9 secondary 512.00 146.50 28.61 71.39 586 0
Xen Server sas-512G-332 primary 512.00 61.75 12.06 87.94 245 2
Xen Server sas-512G-332 secondary 512.00 60.75 11.87 88.13 243 0
Xen Server sas-512G-341 primary 512.00 225.50 44.04 55.96 854 48
Xen Server sas-512G-341 secondary 512.00 219.00 42.77 57.23 876 0

// Nagios Monitoring - Infortrend EonStor (Update)

After gaining some operational experience with the previously introduced Nagios plugin for Infortrend EonStor and EonStor DS storage arrays, some issues became apparent which needed to be addressed in an update. The updated version of the Nagios plugin check_infortrend.sh fixes the following issues:

  1. Newer array firmware versions use different severity strings for event log entries. The Nagios plugin has been adapted to be able to cope with these.

  2. Due to a limitation in the array firmware, event log entries available via SNMP are not cleared when the corresponding event log entries are cleared via RAIDWatch or SANWatch. They are only cleared during a controller reboot. A support case with Infortrend confirmed this and it is currently under investigation whether this feature could be added for future releases of the array firmware.

    In the meantime a workaround to address this behaviour has been added to the Nagios plugin. In order to not constantly get alarms about already addressed events, the date of the event will now – along with the already used severity of the event – be taken into consideration. By default only events within the past 60 minutes will be evaluated. The extent of time to look into the past can be overridden from the default with the new “-t <minutes>” command line option of the Nagios plugin. E.g. “-t 120” will evaluate events within the past 2 hours. You might need to adjust the definition of the check_infortrend_events command to suite your environment, e.g.:

    # check Infortrend ESDS cache status
    define command {
        command_name    check_infortrend_events
        command_line    $USER1$/check_infortrend.sh -H $HOSTNAME$ -C events -t <minutes>
    }

    There are several pitfalls here though:

    • Make sure the timeframe aligns with your Nagios configuration options max_check_attempts, normal_check_interval and retry_check_interval to actually allow non-normal events to trigger an alarm. Generally speaking, the cumulated timeframe of the three Nagios configuration options of your Check_IFT_Events service check must be smaller than the timeframe given in the definition of the check_infortrend_events command.

    • Make sure you set the date and time on the array to the correct values or preferably use a SNTP server. Also, make sure the Nagios server and the array use the same timezone, preferably UTC in both cases.

  3. Not exactly an issue with the Nagios plugin per se, but related to the monitoring of Infortrend storage arrays in general, is an adapted SNMPTT configuration. Since all SNMP traps generated from events of Infortrend arrays are indiscriminately reported with the same OID, a bit more extensive parsing of the SNMP traps needs to occur. In order to achieve this, the following entries should be used in the snmptt.conf.infortrend SNMPTT configuration file:

    /opt/snmptt/conf/snmptt.conf.infortrend
    EVENT iftEventText .1.3.6.1.4.1.1714.0.1 "Status Events" Critical
    FORMAT The description of the event $*
    MATCH $*: ( \[Alert Condition\])
    MATCH $*: ( \[Critical\])
    MATCH $*: ( \[Critical Error\])
    MATCH $*: ( \[Error\])
    SDESC
    The description of the event
    Variables:
    EDESC
     
    EVENT iftEventText .1.3.6.1.4.1.1714.0.1 "Status Events" Warning
    FORMAT The description of the event $*
    MATCH $*: ( \[Warning Condition\])
    MATCH $*: ( \[Warning\])
    SDESC
    The description of the event
    Variables:
    EDESC
     
    EVENT iftEventText .1.3.6.1.4.1.1714.0.1 "Status Events" Normal
    FORMAT The description of the event $*
    MATCH $*: ( \[Information\])
    MATCH $*: ( \[Notification\])
    SDESC
    The description of the event
    Variables:
    EDESC

    and the SNMPTT daemon should be restarted.

If you happen to find any additional issues with monitoring your Infortrend systems with this Nagios plugin, please feel free to leave a comment or drop me a note via email.

// AIX and VIOS Performance with 10 Gigabit Ethernet (Update)

Error: Class "lessc" not found

Error: Class "lessc" not found

An unforeseen error has occured. This is most likely a bug somewhere. It might be a problem in the fontcolor plugin.

More info has been written to the DokuWiki error log.