LINUXOR.SK ... open source notes ...

Linux Storage - mppUtil commands

category: solutionz · date: 2010-09-30 · updated: 2026-10-03 · author: LALA

Linux Storage Solution · Config document · referenced from RDAC installation and operation

noteThe array and LUN WWNs (600a0b80…) are made-up values of the right shape. mppUtil -g 0 reports AVTEnabled: Y although the vendor documentation quoted in the notes says AVT must be disabled for RDAC; the notes do not comment on it.

mppUtil is the RDAC (MPP) driver's control tool: it lists the arrays the driver knows, shows its internal state per array, reports the controller and path states, and reads and sets the driver variables at run time. This document holds the usage list from my notes and the examples that were run with output on mppsrv01 on 7 September 2010.

ItemValue
Command/usr/sbin/mppUtil
Run asroot on mppsrv01
HostRed Hat Enterprise Linux AS 4, kernel 2.6.9-89.0.9.ELsmp, two QLogic HBAs host0 and host1, virtual MPP adapter host2
ArraysDS5300-SITEA (ID 0, main), DS5300-SITEB (ID 1, standby), two LUNs each, controller firmware 7.60.28.xx
Driver versionRDAC 09.03.0B05.0331
RelatedmppUpdate after a SaveSettings change, see mppUpdate and lsvdev

The commands

The usage list as the notes keep it, one line per task; the table after it gives the task of each line. The notes keep no output for them:

bash
$ mppUtil -d 0x80200008
$ mppUtil -d 0x0
$ mppUtil -e 4
$ mppUtil -g 1
$ mppUtil -s failback
$ mppUtil -a
$ mppUtil -a "array_name"
$ mppUtil -o
$ mppUtil -o "ErrorLevel=0x2"
$ mppUtil -S
CommandTask, as the notes word it
mppUtil -d 0x80200008show every debug message for synchronous I/O activity, logging to the console
mppUtil -d 0x0turn all debug messages off
mppUtil -e 4show controller failover and fatal errors
mppUtil -g 1show the RDAC driver's internal information for the target with ID 1
mppUtil -s failbackfind the failed controller that has come back online
mppUtil -alist every disk array this server can see
mppUtil -a "array_name"show the driver's internal information for the array with that name
mppUtil -oshow every available special option (feature options)
mppUtil -o "ErrorLevel=0x2"set the special option ErrorLevel to 0x2
mppUtil -Sshow the run-time information of the controllers and of the paths to the server

The examples with output

Every disk array this machine can see:

bash
$ mppUtil -a
output 12 lines
Hostname    = mppsrv01
Domainname  = (none)
Time        = GMT 09/07/2010 08:54:48

---------------------------------------------------------------
Info of Array Module's seen by this Host.
---------------------------------------------------------------
ID              WWN                      Type     Name
---------------------------------------------------------------
 0      600a0b800012345600000000aabbcc01 FC     DS5300-SITEA
 1      600a0b800012345700000000aabbcc02 FC     DS5300-SITEB
---------------------------------------------------------------

Every special option, with its current, default, minimum and maximum value:

bash
$ mppUtil -o
output 13 lines
                                          Current     Default     Minimum     Maximum
Variable Options                          Value       Value       Value       Value
----------------------------------------  ----------  ----------  ----------  ----------
DebugLevel                                0x0         0x0         0x0         0xffffffff
ErrorLevel                                0x3         0x3         0x0         0x5
DisableLUNRebalance                       0x0         0x0         0x0         0x4
LoadBalancePolicy                         0x1         0x1         0x0         0x2
ClassicModeFailover                       0x0         0x0         0x0         0x1
BusResetTimeout                           0x96        0x0         0x0         0x12c

Action Options
---------------------------------------
No actions defined

Setting the variable ErrorLevel to 0x2 in memory only: the change is not lasting, and after a restart the value is back to what it was. The notes keep no output:

bash
$ mppUtil -o ErrorLevel=0x2

Setting the same variable and saving it (SaveSettings), which makes the change lasting; mppUpdate then rebuilds the initrd with the new value. Again no output is kept:

bash
$ mppUtil -o ErrorLevel=0x2,SaveSettings
$ mppUpdate

The driver's internal information for one array, named by its ID from mppUtil -a. The usage list says -g 1 shows "the target with ID 1"; the example runs -g 0, the main array:

bash
$ mppUtil -g 0
output 123 lines
Hostname    = mppsrv01
Domainname  = (none)
Time        = GMT 09/07/2010 08:58:08

MPP Information:
----------------
      ModuleName: DS5300-SITEA                             SingleController: N
 VirtualTargetID: 0x000                                       ScanTriggered: N
     ObjectCount: 0x000                                          AVTEnabled: Y
             WWN: 600a0b800012345600000000aabbcc01               RestoreCfg: N
    ModuleHandle: none                                        Page2CSubPage: Y
 FirmwareVersion: 7.60.28.xx                                 FailoverMethod: C
   ScanTaskState: 0x00000000
        LBPolicy: LeastQueueDepth

Controller 'A' Status:
-----------------------
ControllerHandle: none                                    ControllerPresent: Y
    UTMLunExists: N                                                  Failed: N
   NumberOfPaths: 2                                          FailoverInProg: N
                                                                ServiceMode: N

    Path #1
    ---------
 DirectoryVertex: present                                           Present: Y
       PathState: OPTIMAL
          PathId: 77000000 (hostId: 0, channelId: 0, targetId: 0)

    Path #2
    ---------
 DirectoryVertex: present                                           Present: Y
       PathState: OPTIMAL
          PathId: 77010000 (hostId: 1, channelId: 0, targetId: 0)

Controller 'B' Status:
-----------------------
ControllerHandle: none                                    ControllerPresent: Y
    UTMLunExists: N                                                  Failed: N
   NumberOfPaths: 2                                          FailoverInProg: N
                                                                ServiceMode: N

    Path #1
    ---------
 DirectoryVertex: present                                           Present: Y
       PathState: OPTIMAL
          PathId: 77000001 (hostId: 0, channelId: 0, targetId: 1)

    Path #2
    ---------
 DirectoryVertex: present                                           Present: Y
       PathState: OPTIMAL
          PathId: 77010001 (hostId: 1, channelId: 0, targetId: 1)

Lun Information
---------------

    Lun #1 - WWN: 600a0b80001234560000ab00ddeeff01
    ----------------
       LunObject: present                                 CurrentOwningPath: B
  RemoveEligible: N                                          BootOwningPath: B
   NotConfigured: N                                           PreferredPath: B
        DevState: OPTIMAL                                   ReportedPresent: Y
                                                            ReportedMissing: N
                                                      NeedsReservationCheck: N
                                                                  TASBitSet: N
                                                                   NotReady: N
                                                                       Busy: N
                                                                  Quiescent: N
                                        VD_Ownership_Transfer_Attempt_Count: 0

    Controller 'A' Path
    --------------------
   NumLunObjects: 2                                         RoundRobinIndex: 0
         Path #1: LunPathDevice: present
                       DevState: OPTIMAL
                    RemoveState: 0x0  StartState: 0x1  PowerState: 0x0
         Path #2: LunPathDevice: present
                       DevState: OPTIMAL
                    RemoveState: 0x0  StartState: 0x1  PowerState: 0x0

    Controller 'B' Path
    --------------------
   NumLunObjects: 2                                         RoundRobinIndex: 0
         Path #1: LunPathDevice: present
                       DevState: OPTIMAL
                    RemoveState: 0x0  StartState: 0x1  PowerState: 0x0
         Path #2: LunPathDevice: present
                       DevState: OPTIMAL
                    RemoveState: 0x0  StartState: 0x1  PowerState: 0x0

    Lun #2 - WWN: 600a0b80001234570000ae00ddeeff02
    ----------------
       LunObject: present                                 CurrentOwningPath: A
  RemoveEligible: N                                          BootOwningPath: A
   NotConfigured: N                                           PreferredPath: A
        DevState: OPTIMAL                                   ReportedPresent: Y
                                                            ReportedMissing: N
                                                      NeedsReservationCheck: N
                                                                  TASBitSet: N
                                                                   NotReady: N
                                                                       Busy: N
                                                                  Quiescent: N
                                        VD_Ownership_Transfer_Attempt_Count: 0

    Controller 'A' Path
    --------------------
   NumLunObjects: 2                                         RoundRobinIndex: 0
         Path #1: LunPathDevice: present
                       DevState: OPTIMAL
                    RemoveState: 0x0  StartState: 0x1  PowerState: 0x0
         Path #2: LunPathDevice: present
                       DevState: OPTIMAL
                    RemoveState: 0x0  StartState: 0x1  PowerState: 0x0

    Controller 'B' Path
    --------------------
   NumLunObjects: 2                                         RoundRobinIndex: 0
         Path #1: LunPathDevice: present
                       DevState: OPTIMAL
                    RemoveState: 0x0  StartState: 0x1  PowerState: 0x0
         Path #2: LunPathDevice: present
                       DevState: OPTIMAL
                    RemoveState: 0x0  StartState: 0x1  PowerState: 0x0

The live report of the controller and path states for each LUN. The notes place this report before the mppBusRescan that found the standby array, and it shows the main array alone; the mppUtil -a above, time-stamped GMT 09/07/2010 08:54:48, already lists both arrays, so the examples were not kept in the order they were run:

bash
$ mppUtil -S
output 8 lines
H2C0T0       Active                     Active           DS5300-SITEA
             H0C0T0L001  Up             H0C0T1L001  Up
             H1C0T0L001  Up             H1C0T1L001  Up
             H0C0T0L002  Up             H0C0T1L002  Up
             H1C0T0L002  Up             H1C0T1L002  Up

   Missing Arrays
 There are no missing arrays

The notes then show the mppBusRescan that found the standby array; its output is in mppBusRescan commands. The same report with both arrays known:

bash
$ mppUtil -S
output 13 lines
H2C0T0       Active                     Active           DS5300-SITEA
             H0C0T0L001  Up             H0C0T1L001  Up
             H1C0T0L001  Up             H1C0T1L001  Up
             H0C0T0L002  Up             H0C0T1L002  Up
             H1C0T0L002  Up             H1C0T1L002  Up
H2C0T1       Active                     Active           DS5300-SITEB
             H1C0T2L001  Up             H1C0T3L001  Up
             H0C0T3L001  Up             H0C0T2L001  Up
             H1C0T2L002  Up             H1C0T3L002  Up
             H0C0T3L002  Up             H0C0T2L002  Up

   Missing Arrays
 There are no missing arrays

Reading the outputs

OutputLineReading
-aID, WWN, Type, Namethe driver's number for the array (the argument of -g, the first field of /var/mpp/devicemapping), the array WWN (the name of its .wwn file), the transport, the array name
-othe six variablesthe subset of /etc/mpp.conf that can be changed at run time; BusResetTimeout is the only one whose current value (0x96, 150) is not its default (0x0), and it matches BusResetTimeout=150 in the file
-g 0MPP Informationthe array as a module: name, virtual target ID 0x000 (target 0 on host2), WWN, controller firmware 7.60.28.xx, FailoverMethod: C, AVTEnabled: Y, load-balancing policy LeastQueueDepth (LoadBalancePolicy=1 in the file)
-g 0Controller 'A' Status, Controller 'B' Statusper controller: present, not failed, two paths each, no failover in progress; each path OPTIMAL with a PathId whose decoding the output prints itself, 77000000 (hostId: 0, channelId: 0, targetId: 0). The last byte is the target, the second byte the host; what the leading 77 stands for the notes do not say
-g 0Lun Informationper LUN: its WWN, CurrentOwningPath, BootOwningPath and PreferredPath (controller B owns LUN 1, controller A owns LUN 2), DevState: OPTIMAL, and under each controller the two LUN path objects with their states
-SH2C0T0 Active Active DS5300-SITEAthe array's address on the virtual adapter, the two controller states, the name: the same first line as in the array's .wwn file
-SH0C0T0L001 Upone physical path to one LUN and its state: host 0, channel 0, target 0, LUN 1. The left column lists the paths to one controller, the right column those to the other

The second -S report shows the standby array with the crossed target numbers that its .wwn file also has (H1C0T2 with H0C0T3, H1C0T3 with H0C0T2); see /var/mpp files. The LUN ownership in -g 0 (LUN 1 on controller B, LUN 2 on controller A) is, as I understand it, the array's own preferred-controller setting, which the driver follows; with LBPolicy: LeastQueueDepth the two paths to the owning controller share the I/O. Both readings are mine from the names; the notes do not describe the policy.

Checked against NetApp SANtricity 12.10 and multipath-tools 0.15.1

As builtToday
mppUtil as the driver's control and reporting toolRDAC and its tools were discontinued with SANtricity OS 11.25; the readme of this build lists man pages for RDAC, mppUtil, mppBusRescan and mppUpdate, which the notes did not keep. In the replacement layer, DM-Multipath, the path state comes from multipath -ll, which the Red Hat and SUSE storage guides use
AVTEnabled: Y in mppUtil -g 0, against the quoted requirement to disable AVTThe readme of the previous build (09.03.0B05.0233) explains the requirement: AVT is "automatically enabled in the Linux storage partitioning host type" and "causes contention when an RDAC is installed", to be disabled with a script or by using the LNXCL host type; IBM's Storage Manager readme says LNXCL "must be used". The notes do not show the array side, so whether this host's arrays really had AVT on cannot be settled here. In 2015 the Linux host type with AVT on was renamed LNXAVT and a new Linux type with AVT off replaced it; today's type is "Linux DM-MP (Kernel 3.10 or later)"
LBPolicy: LeastQueueDepth, failover by the drivermultipath-tools' built-in table for vendor IBM, product ^1818: group_by_prio, prio rdac, path_checker rdac, features "2 pg_init_retries 50", failback immediate, no_path_retry 30; the kernel attaches the handler scsi_dh_rdac by itself. NetApp: leave /etc/multipath.conf blank
controller firmware 7.60.28.xx on a DS5300DS5300 end of support 31 January 2018
← solutionz