Fujitsu ServerView RAID Manager 6.4.11 for Ubuntu

I have updated ServerView RAID Manager on my Ubuntu 16.04.1 servers to 6.4.11 (serverview-raid-manager_6.4-11_amd64.deb) that I ported.
I can't distribute the package. If you need it, please ask your regional Fujitsu support. They may have an official version for Ubuntu.

Fujitsu PRIMERGY: Configuring RAID via iRMC REST API

Fujitsu published iRMC S4 REST API. With the latest firmware (version 8.4x), you can configure RAID via API. That means you don't need to bring up the RAID configuration utility to create logical drives on a new machine, or you can manage the RAID card and logical drives even though ServerView RAID does not support the OS you are using. This feature is good to have so you can replicate the same configuration to multiple servers at the same time.

I will explain how to create/delete logical drive(s) via iRMC REST API. As a prerequisite, iRMC firmware must be at 8.4x or later.
In the following example, I will use iRMC user ID: admin, iRMC user password: admin, and iRMC IP address: 192.168.10.80.

  1. Check if the RAID profile is already there.
  2. $ curl -u admin:admin -H"Accept: application/json" -X GET -i http://192.168.10.80/rest/v1/Oem/eLCM/ProfileManagement/
    HTTP/1.1 200 OK
    Date: Fri, 28 Oct 2016 23:15:29 GMT
    Server: iRMC S4 Webserver
    Expires: Thu, 27 Oct 2016 23:15:29 GMT
    Content-Length: 145
    Content-Type: application/json; charset=UTF-8
    
    {
      "Links":{
        "profileStore":[
          {
            "@odata.id":"rest\/v1\/Oem\/eLCM\/ProfileManagement\/HWConfigurationIrmc"
          }
        ]
      }
    }
    
    If the profile is not created yet, run the following to create it:
    $ curl -u admin:admin -H"Accept: application/json" -X POST -i http://192.168.10.80/rest/v1/Oem/eLCM/ProfileManagement/get?PARAM_PATH=Server/HWConfigurationIrmc
    HTTP/1.1 202 Accepted
    Date: Fri, 28 Oct 2016 22:57:05 GMT
    Server: iRMC S4 Webserver
    Expires: Thu, 27 Oct 2016 22:57:05 GMT
    Content-Length: 154
    Content-Type: application/json; charset=UTF-8
    Location: rest/v1/Oem/eLCM/ProfileManagement/HWConfigurationIrmc
    
    {
      "Session":{
        "Id":16,
        "Tag":"",
        "WorkSequence":"obtainProfileParameters",
        "Start":"",
        "Duration":0,
        "Status":"activated"
      }
    }
    
    
  3. Review the current configuration. The following example shows that there is one RAID card, and six physical SATA hard drives in slot 0, 1, 2, 4, 5, and 6 which are all 465GB drives. There is no logical drive configured.
  4. $ curl -u admin:admin -H"Accept: application/json" -X GET -i http://192.168.10.80/rest/v1/Oem/eLCM/ProfileManagement/HWConfigurationIrmc
    HTTP/1.1 200 OK
    Date: Fri, 28 Oct 2016 23:00:40 GMT
    Server: iRMC S4 Webserver
    Expires: Thu, 27 Oct 2016 23:00:40 GMT
    Content-Length: 3881
    Content-Type: application/json; charset=UTF-8
    Content-disposition: attachment; filename="rest/v1/Oem/eLCM/ProfileManagement/HWConfigurationIrmc";
    
    {
      "Server":{
        "HWConfigurationIrmc":{
          "Adapters":{
            "RAIDAdapter":[
              {
                "@AdapterId":"RAIDAdapter0",
                "@ConfigurationType":"Addressing",
                "PCIId":{
                  "Vendor":"1000",
                  "Device":"005B",
                  "ControllerIndex":0
                },
                "Features":{
                  "RaidLevel":"0,1,5,6,10,50,60",
                  "Stripe":{
                    "@Unit":"KB",
                    "#text":"8,16,32,64,128,256,512,1024"
                  },
                  "InitMode":"no,fast,slow",
                  "WriteMode":"WriteBack,WriteThrough,AlwaysWriteBack",
                  "ReadMode":"NoReadAhead,ReadAhead",
                  "CacheMode":"Direct,Cached",
                  "DiskCacheMode":"Enabled,Disabled,Unchanged"
                },
                "BGIRate":30,
                "MDCRate":30,
                "RebuildRate":30,
                "EnableCopyback":"Enabled",
                "EnableCopybackOnSMART":"Enabled",
                "EnableCopybackOnSSDSMART":"Enabled",
                "AutoRebuild":"Enabled",
                "PhysicalDisks":{
                  "PhysicalDisk":[
                    {
                      "@Number":"0",
                      "@Action":"None",
                      "Slot":0,
                      "PDStatus":"Available",
                      "Interface":"SATA",
                      "Type":"HDD",
                      "Vendor":"ATA",
                      "Product":"WDC WD5003ABYX-",
                      "Size":{
                        "@Unit":"GB",
                        "#text":465
                      }
                    },
                    {
                      "@Number":"1",
                      "@Action":"None",
                      "Slot":1,
                      "PDStatus":"Available",
                      "Interface":"SATA",
                      "Type":"HDD",
                      "Vendor":"ATA",
                      "Product":"WDC WD5003ABYX-",
                      "Size":{
                        "@Unit":"GB",
                        "#text":465
                      }
                    },
                    {
                      "@Number":"2",
                      "@Action":"None",
                      "Slot":2,
                      "PDStatus":"Available",
                      "Interface":"SATA",
                      "Type":"HDD",
                      "Vendor":"ATA",
                      "Product":"WDC WD5003ABYX-",
                      "Size":{
                        "@Unit":"GB",
                        "#text":465
                      }
                    },
                    {
                      "@Number":"4",
                      "@Action":"None",
                      "Slot":4,
                      "PDStatus":"Available",
                      "Interface":"SATA",
                      "Type":"HDD",
                      "Vendor":"ATA",
                      "Product":"WDC WD5003ABYX-",
                      "Size":{
                        "@Unit":"GB",
                        "#text":465
                      }
                    },
                    {
                      "@Number":"5",
                      "@Action":"None",
                      "Slot":5,
                      "PDStatus":"Available",
                      "Interface":"SATA",
                      "Type":"HDD",
                      "Vendor":"ATA",
                      "Product":"WDC WD5003ABYX-",
                      "Size":{
                        "@Unit":"GB",
                        "#text":465
                      }
                    },
                    {
                      "@Number":"6",
                      "@Action":"None",
                      "Slot":6,
                      "PDStatus":"Available",
                      "Interface":"SATA",
                      "Type":"HDD",
                      "Vendor":"ATA",
                      "Product":"WDC WD5003ABYX-",
                      "Size":{
                        "@Unit":"GB",
                        "#text":465
                      }
                    }
                  ]
                },
                "Arrays":null,
                "LogicalDrives":null
              }
            ]
          }
        }
      }
    }
    
  5. Create logical drive(s). I will create one RAID1 volume with two HDDs, and one RAID5 volume with the remaining four HDDs. To do this, you need to create a configuration file to send to iRMC. Then send a request to iRMC to create volumes.
    If you want to specify drive slots for each logical volume, you can do that. Read the API manual for details.
  6. $ cat create_logical_drives.json
    {
      "Server":{
        "HWConfigurationIrmc":{
          "@Processing":"execute",
          "Adapters":{
            "RAIDAdapter":[
              {
                "@AdapterId":"RAIDAdapter0",
                "@ConfigurationType":"Addressing",
                "LogicalDrives":{
                  "LogicalDrive":[
                    {
                      "@Number":0,
                      "@Action":"Create",
                      "RaidLevel":"1"
                    },
                    {
                      "@Number":1,
                      "@Action":"Create",
                      "RaidLevel":"5"
                    }
                  ]
                },
              }
            ]
          },
          "@Version":"1.00"
        },
        "@Version":"1.01"
      }
    }
    
    $ curl -u admin:admin -H"Accept: application/json" -X POST -i http://192.168.10.80/rest/v1/Oem/eLCM/ProfileManagement/set --data @create_logical_drives.json
    HTTP/1.1 202 Accepted
    Date: Fri, 28 Oct 2016 23:29:20 GMT
    Server: iRMC S4 Webserver
    Expires: Thu, 27 Oct 2016 23:29:20 GMT
    Content-Length: 143
    Content-Type: application/json; charset=UTF-8
    
    {
      "Session":{
        "Id":17,
        "Tag":"",
        "WorkSequence":"applyProfile",
        "Start":"",
        "Duration":0,
        "Status":"activated"
      }
    }
    
  7. Wait for the request to be completed.
  8. Check the current session status.
    $ curl -u admin:admin -H"Accept: application/json" -X GET -i http://192.168.10.80/sessionInformation/17/status
    HTTP/1.1 200 OK
    Date: Fri, 28 Oct 2016 23:36:16 GMT
    Server: iRMC S4 Webserver
    Expires: Thu, 27 Oct 2016 23:36:16 GMT
    Content-Length: 177
    Content-Type: application/json; charset=UTF-8
    
    {
      "Session":{
        "Id":17,
        "Tag":"",
        "WorkSequence":"applyProfile",
        "Start":"2016\/10\/28 16:30:00",
        "Duration":145,
        "Status":"terminated regularly"
      }
    }
    
    Check the current log.
    $ curl -u admin:admin -H"Accept: application/json" -X GET -i http://192.168.10.80/sessionInformation/17/log
    HTTP/1.1 200 OK
    Date: Fri, 28 Oct 2016 23:36:20 GMT
    Server: iRMC S4 Webserver
    Expires: Thu, 27 Oct 2016 23:36:20 GMT
    Content-Length: 2510
    Content-Type: application/json; charset=UTF-8
    Content-disposition: attachment; filename="sessionInformation/17/log";
    
    {
      "SessionLog":{
        "Id":17,
        "Tag":"",
        "WorkSequence":"applyProfile",
        "Entries":{
          "Entry":[
            {
              "@date":"2016\/10\/28 16:29:20",
              "#text":"CreateSession: Session 'applyProfile' created with id 17"
            },
            {
              "@date":"2016\/10\/28 16:29:20",
              "#text":"AttachWorkSequence: Attached work sequence 'applyProfile' to session 17"
            },
            {
              "@date":"2016\/10\/28 16:30:00",
              "#text":"LCMScheduler: Launch ApplyProfileParameters"
            },
            {
              "@date":"2016\/10\/28 16:30:00",
              "#text":"ValidateProfile: Profile successfully validated"
            },
            {
              "@date":"2016\/10\/28 16:30:00",
              "#text":"ApplyProfileParameters: Sub profile 'BiosConfig' not found"
            },
            {
              "@date":"2016\/10\/28 16:30:00",
              "#text":"ApplyProfileParameters: Sub profile 'IrmcConfig' not found"
            },
            {
              "@date":"2016\/10\/28 16:30:00",
              "#text":"ApplyProfileParameters: Sub profile 'AdapterConfigIrmc' not found"
            },
            {
              "@date":"2016\/10\/28 16:30:00",
              "#text":"ApplyProfileParameters: Sub profile 'OSInstallation' not found"
            },
            {
              "@date":"2016\/10\/28 16:30:00",
              "#text":"ApplyProfileParameters: Sub profile 'HWConfiguration' not found"
            },
            {
              "@date":"2016\/10\/28 16:30:00",
              "#text":"FindSubProfile: Sub profile 'HWConfigurationIrmc' found"
            },
            {
              "@date":"2016\/10\/28 16:30:00",
              "#text":"LOG-1-HWConfigurationIrmc: Start processing of Sub profile 'HWConfigurationIrmc'"
            },
            {
              "@date":"2016\/10\/28 16:32:14",
              "#text":"createLogicalDrive: drv[0] Create Drive [RAID Level = 1]"
            },
            {
              "@date":"2016\/10\/28 16:32:22",
              "#text":"createLogicalDrive: drv[1] Create Drive [RAID Level = 5]"
            },
            {
              "@date":"2016\/10\/28 16:32:25",
              "#text":"LOG-2-HWConfigurationIrmc-Success: Finished processing of Sub profile 'HWConfigurationIrmc' with status 'Success'"
            },
            {
              "@date":"2016\/10\/28 16:32:25",
              "#text":"LCMScheduler: LCM object is being destroyed as automatic termination was configured"
            },
            {
              "@date":"2016\/10\/28 16:32:25",
              "#text":"TerminateSession: 'applyProfile' is being terminated"
            }
          ]
        }
      }
    }
    
  9. Check if the logical drives are configured. You can see the status on iRMC Web GUI, or rescan the profile.
  10. Delete the current profile.
    $ curl -u admin:admin -H"Accept: application/json" -X DELETE -i http://192.168.10.80/rest/v1/Oem/eLCM/ProfileManagement/HWConfigurationIrmc
    
    Rescan the configuration.
    $ curl -u admin:admin -H"Accept: application/json" -X POST -i http://192.168.10.80/rest/v1/Oem/eLCM/ProfileManagement/get?PARAM_PATH=Server/HWConfigurationIrmc
    
    View the latest profile. As you can see, logical drive 0 (RAID 1) and logical drive 1 (RAID 5) are newly created.
    $ curl -u admin:admin -H"Accept: application/json" -X GET -i http://192.168.10.80/rest/v1/Oem/eLCM/ProfileManagement/HWConfigurationIrmc
    HTTP/1.1 200 OK
    Date: Fri, 28 Oct 2016 23:51:08 GMT
    Server: iRMC S4 Webserver
    Expires: Thu, 27 Oct 2016 23:51:08 GMT
    Content-Length: 6625
    Content-Type: application/json; charset=UTF-8
    Content-disposition: attachment; filename="rest/v1/Oem/eLCM/ProfileManagement/HWConfigurationIrmc";
    
    {
      "Server":{
        "HWConfigurationIrmc":{
          "Adapters":{
            "RAIDAdapter":[
              {
                "@AdapterId":"RAIDAdapter0",
                "@ConfigurationType":"Addressing",
                "PCIId":{
                  "Vendor":"1000",
                  "Device":"005B",
                  "ControllerIndex":0
                },
                "Features":{
                  "RaidLevel":"0,1,5,6,10,50,60",
                  "Stripe":{
                    "@Unit":"KB",
                    "#text":"8,16,32,64,128,256,512,1024"
                  },
                  "InitMode":"no,fast,slow",
                  "WriteMode":"WriteBack,WriteThrough,AlwaysWriteBack",
                  "ReadMode":"NoReadAhead,ReadAhead",
                  "CacheMode":"Direct,Cached",
                  "DiskCacheMode":"Enabled,Disabled,Unchanged"
                },
                "BGIRate":30,
                "MDCRate":30,
                "RebuildRate":30,
                "EnableCopyback":"Enabled",
                "EnableCopybackOnSMART":"Enabled",
                "EnableCopybackOnSSDSMART":"Enabled",
                "AutoRebuild":"Enabled",
                "Arrays":{
                  "Array":[
                    {
                      "@Number":0,
                      "@ConfigurationType":"Addressing",
                      "PhysicalDiskRefs":{
                        "PhysicalDiskRef":[
                          {
                            "@Number":"0"
                          },
                          {
                            "@Number":"1"
                          }
                        ]
                      }
                    },
                    {
                      "@Number":1,
                      "@ConfigurationType":"Addressing",
                      "PhysicalDiskRefs":{
                        "PhysicalDiskRef":[
                          {
                            "@Number":"2"
                          },
                          {
                            "@Number":"4"
                          },
                          {
                            "@Number":"5"
                          }
                        ]
                      }
                    }
                  ]
                },
                "LogicalDrives":{
                  "LogicalDrive":[
                    {
                      "@Number":0,
                      "@Action":"None",
                      "RaidLevel":"1",
                      "ArrayRefs":{
                        "ArrayRef":[
                          {
                            "@Number":0
                          }
                        ]
                      },
                      "WriteMode":"WriteThrough",
                      "ReadMode":"ReadAhead",
                      "CacheMode":"Direct",
                      "DiskCacheMode":"Disabled",
                      "Stripe":{
                        "@Unit":"KB",
                        "#text":64
                      },
                      "InitMode":"no",
                      "LDStatus":"Operational",
                      "Name":"LogicalDrive_0",
                      "Size":{
                        "@Unit":"GB",
                        "#text":465
                      }
                    },
                    {
                      "@Number":1,
                      "@Action":"None",
                      "RaidLevel":"5",
                      "ArrayRefs":{
                        "ArrayRef":[
                          {
                            "@Number":1
                          }
                        ]
                      },
                      "WriteMode":"WriteThrough",
                      "ReadMode":"ReadAhead",
                      "CacheMode":"Direct",
                      "DiskCacheMode":"Disabled",
                      "Stripe":{
                        "@Unit":"KB",
                        "#text":64
                      },
                      "InitMode":"no",
                      "LDStatus":"Operational",
                      "Name":"LogicalDrive_1",
                      "Size":{
                        "@Unit":"GB",
                        "#text":930
                      }
                    }
                  ]
                },
                "PhysicalDisks":{
                  "PhysicalDisk":[
                    {
                      "@Number":"0",
                      "@Action":"None",
                      "Slot":0,
                      "PDStatus":"Operational",
                      "Interface":"SATA",
                      "Type":"HDD",
                      "Vendor":"ATA",
                      "Product":"WDC WD5003ABYX-",
                      "Size":{
                        "@Unit":"GB",
                        "#text":465
                      }
                    },
                    {
                      "@Number":"1",
                      "@Action":"None",
                      "Slot":1,
                      "PDStatus":"Operational",
                      "Interface":"SATA",
                      "Type":"HDD",
                      "Vendor":"ATA",
                      "Product":"WDC WD5003ABYX-",
                      "Size":{
                        "@Unit":"GB",
                        "#text":465
                      }
                    },
                    {
                      "@Number":"2",
                      "@Action":"None",
                      "Slot":2,
                      "PDStatus":"Operational",
                      "Interface":"SATA",
                      "Type":"HDD",
                      "Vendor":"ATA",
                      "Product":"WDC WD5003ABYX-",
                      "Size":{
                        "@Unit":"GB",
                        "#text":465
                      }
                    },
                    {
                      "@Number":"4",
                      "@Action":"None",
                      "Slot":4,
                      "PDStatus":"Operational",
                      "Interface":"SATA",
                      "Type":"HDD",
                      "Vendor":"ATA",
                      "Product":"WDC WD5003ABYX-",
                      "Size":{
                        "@Unit":"GB",
                        "#text":465
                      }
                    },
                    {
                      "@Number":"5",
                      "@Action":"None",
                      "Slot":5,
                      "PDStatus":"Operational",
                      "Interface":"SATA",
                      "Type":"HDD",
                      "Vendor":"ATA",
                      "Product":"WDC WD5003ABYX-",
                      "Size":{
                        "@Unit":"GB",
                        "#text":465
                      }
                    },
                    {
                      "@Number":"6",
                      "@Action":"None",
                      "Slot":6,
                      "PDStatus":"Available",
                      "Interface":"SATA",
                      "Type":"HDD",
                      "Vendor":"ATA",
                      "Product":"WDC WD5003ABYX-",
                      "Size":{
                        "@Unit":"GB",
                        "#text":465
                      }
                    }
                  ]
                }
              }
            ]
          }
        }
      }
    }
    

Enabling the serial console for ESXi on Fujitsu PRIMERGY

If you can't boot ESXi for some reason, or have some firmware/driver issues when booting ESXi, you can enable the serial line output via iRMC on Fujitsu PRIMERGY servers.

Here is how to enable the serial output through iRMC, and capture ESXi boot logs.

  1. Enable BIOS Console Redirection under Console Redirection.
  2. You can do this in the BIOS setup menu (hit the F2 key during BIOS POST), or on the iRMC Web GUI.

    Here is the example of iRMC. Check the Console Redirection Enabled option, and change the Serial 1 Multiplexer option from System to iRMC.
  3. Enable IPMI over LAN under Network Settings if it is not enabled.
  4. Activate Serial-Over-LAN through iRMC.
  5. In this example, I use the ipmitool command, but you can use ipmiutil or other IPMI utilities which support SOL.
    $ ipmitool -I lanplus -H <iRMC IP address> -U <iRMC User> -P <iRMC Password> sol activate
    Example)
    $ ipmitool -I lanplus -H 192.168.10.77 -U admin -P admin sol activate
  6. Boot the ESXi with the console options enabled.
  7. You can see how to enable the console options for ESXi on VMware KB 1033888. In the following screenshot, I added the options to the boot options during startup (SHIFT+O).

    Now you can see the ESXi boot log on your IPMI SOL session.

Fujitsu PRIMERGY: How to update BIOS and iRMC firmware remotely

There is a HTTP interface in iRMC for system BIOS and iRMC firmware updates. That means you can send firmware images to iRMC remotely to flash BIOS and iRMC. What you need is just to do a HTTP POST to /irmcupdate or /biosupdate with an update image.

Here are some examples using curl or PowerShell. In the examples, I used PRIMERGY BX2580 M1 BIOS and iRMC images for my PRIMERGY BX2580 M1 server. You can download BIOS and iRMC firmware files from Fujitsu download site

  • BIOS update using curl
  • $ curl -k --digest -u <iRMC username>:<iRMC password> -F "file=@<BIOS file>" http://<iRMC IP address>/biosupdate
    example)
    $ curl -k --digest -u admin:admin -F "file=@D3321-A1.UPC" http://192.168.10.21/biosupdate

    The above command stages the BIOS file to iRMC. If the server is powered off, then iRMC powers it on and starts BIOS flash. If it is not powered off, BIOS flash will be started after you shut down the OS.

    To check the update status, you can do a HTTP GET to /biosprogress. It will return the status in XML.

    example)
    $ curl -k --digest -u admin:admin http://192.168.10.21/biosprogress
    <?xml version="1.0" encoding="UTF-8"?>
    <Status>
    <Value>8</Value>
    <Severity>Information</Severity>
    <Message>FLASH programming in progress 33 Percent</Message>
    </Status>
    
  • iRMC firmware update using PowerShell
  • PS> $username="<iRMC username>"
    PS> $password=ConvertTo-SecureString "<iRMC password>" -AsPlainText -Force 
    PS> $credential = New-Object System.Management.Automation.PSCredential $username, $password
    PS> Invoke-WebRequest -Uri "http://<iRMC IP address>/irmcupdate?flashSelect=255" -Method Post -Credential $credential -InFile "<iRMC firmware image>" -Verbose
    
    example)
    PS> $username="admin"
    PS> $password=ConvertTo-SecureString "admin" -AsPlainText -Force 
    PS> $credential = New-Object System.Management.Automation.PSCredential $username, $password
    PS> Invoke-WebRequest -Uri "http://192.168.10.21/irmcupdate?flashSelect=255" -Method Post -Credential $credential -InFile "C:\FW\BX2580M1_0824F.BIN" -Verbose
    

    An iRMC firmware update does not require a system reboot. It will be updated while the OS is running.

    To check the update status, send a HTTP GET request to /irmcprogress. It will return the status in XML.

    example)
    PS> $username="admin"
    PS> $password=ConvertTo-SecureString "admin" -AsPlainText -Force 
    PS> $credential = New-Object System.Management.Automation.PSCredential $username, $password
    PS> [xml]$response = Invoke-WebRequest -Uri "http://192.168.10.21/irmcprogress" -Method Get -Credential $credential -Verbose
    PS> $response.status |fl
    
    Value    : 8
    Severity : Information
    Message  : FLASH programming in progress 48 Percent
    
    

Fujitsu PRIMERGY: How to change BIOS settings remotely

If you have multiple servers and you need to change BIOS settings, it is not wise to bring up BIOS setup screen on each server and change the values. It's time consuming. Also you easily make a mistake like forget to change a value on one of the servers.

To avoid this, we normally automate a process with a tool or a script to replicate the changes on all target servers, but is there an interface to do this on Fujitsu PRIMERGY servers? Yes, there is. You can change BIOS settings through iRMC (integraded Remote Management Controller) which is similar to DELL iDRAC or HP iLO. iRMC accepts an XML file as a BIOS configuration file, and it will enable the changes after a reboot.

Here is an example. I will change the CPU Hyper-Threading setting from "Enable" to "Disable" through iRMC on PRIMERGY BX2580 M2.

  1. Create a BIOS configuration change XML file. To disable Hyper-Threading, create a file like this:
  2. $ cat input.xml
    <?xml version="1.0" encoding="utf-8"?>
    <config>
      <sysId>BX2580M2</sysId>
      <configuration>
        <token api="BSPBR"></token>
        <supportedSetting>
          <id>HyperThreading</id>
          <name>Hyper-Threading</name>
          <setupItemID>0x0057</setupItemID>
          <value>Disabled</value>
        </supportedSetting>
      </configuration>
    </config>
    
  3. Send the XML file to the iRMC BIOS restore interface. I use the curl command to do an HTTP POST to iRMC.
  4. $ curl --basic -u <iRMC username>:<iRMC password> --data @<XML file> http://<iRMC IP address>/biosrestore
    example)
    $ curl --basic -u admin:admin --data @input.xml http://192.168.10.21/biosrestore
  5. Reboot the server. You can see the value is changed to Disabled in BIOS after the reboot.

If you need to change multiple settings, you just need to add "<supportedSetting>(BIOS setting you want to change)</supportedSetting>" to the XML file like the following (change both "HT" and "Hardware Prefetcher" to "Disabled":

$ cat input.xml
<?xml version="1.0" encoding="utf-8"?>
<config>
  <sysId>BX2580M2</sysId>
  <configuration>
    <token api="BSPBR"></token>
    <supportedSetting>
      <id>HyperThreading</id>
      <name>Hyper-Threading</name>
      <setupItemID>0x0057</setupItemID>
      <value>Disabled</value>
    </supportedSetting>
    <supportedSetting>
      <id>HardwarePrefetcher</id>
      <name>Hardware Prefetcher</name>
      <setupItemID>0x012E</setupItemID>
      <value>Disabled</value>
    </supportedSetting>
  </configuration>
</config>

If you need to change multiple servers, you can create a script to send the same XML file to iRMC.

Fujitsu BX900: How to save MMB System Event Log remotely

I know MMB SEL can be saved using Web GUI, or log in to MMB via SSH and follow the menu. These methods require several mouse clicks or keyboard interactions. It would be nice to automate this process using a script or one-liner commands, wouldn't it?

Here are some examples.

  • CIM (This method requires WS-MAN enabled in MMB)
  • $ wbemcli ei 'http://<mmb user name>:<password>@<mmb IP address>:5988/root/cimv2:Linux_MgmtBladeLog' |awk -F[,\"] '{print sprintf("%04d", $30), $27,$24}'
    Example)
    $ wbemcli ei 'http://admin:admin@192.168.10.10:5988/root/cimv2:Linux_MgmtBladeLog' | awk -F[,\"] '{print sprintf("%04d", $30), $27,$24}'
    0001 2016-07-19 10:44:44 The IPv4 NTP server 2 is recovered.
    0002 2016-07-19 10:19:09 The IPv4 NTP server 2 is inaccessible.
    0003 2016-06-09 15:07:27 The IPv4 NTP server 2 is recovered.
    0004 2016-06-09 15:01:57 The IPv4 NTP server 2 is inaccessible.
    0005 2016-06-06 15:08:17 Server Blade-10 was removed.
    0006 2016-06-06 15:06:55 Server Blade-10 power on.
    0007 2016-06-06 15:06:04 Server Blade-10 power off.
    0008 2016-06-06 15:01:49 Server Blade-10 power on.
    0009 2016-06-06 15:01:01 Server Blade-10 power on.
    0010 2016-06-06 15:00:53 Server Blade-10 was added.
    ...
    
  • SSH
    1. Create a file containing the following:
    2. 7
      2
      0
      0
      5
      
      Or just run
      $ echo -e "7\n2\n0\n0\n5" > input_file
    3. Execute SSH using the file created as input. plink can be downloaded from PuTTY download page.
    4. $ ssh -T <mmb user name>@<mmb IP address> < input_file
      or
      $ plink -ssh -T -l <mmb user name> -pw <password> <mmb IP address> < input_file
      Example)
      $ plink -ssh -T -l admin -pw admin 192.168.10.10 < input_file
      ...
      SEL entry number:511, Free space of SEL entry:0
      2016-07-19 10:44:44 Info/Normal The IPv4 NTP server 2 is recovered.
      2016-07-19 10:19:09  Minor      The IPv4 NTP server 2 is inaccessible.
      2016-06-09 15:07:27 Info/Normal The IPv4 NTP server 2 is recovered.
      2016-06-09 15:01:57  Minor      The IPv4 NTP server 2 is inaccessible.
      2016-06-06 15:08:17 Info/Normal Server Blade-10 was removed.
      2016-06-06 15:06:55 Info/Normal Server Blade-10 power on.
      2016-06-06 15:06:04 Info/Normal Server Blade-10 power off.
      ...
      
    5. If needed, you can redirect the output to a file to save the contents.

Also you can use the above SSH method to save MMB System Information Dump remotely.The difference is that the input file needs to contain the following:

7
5
0
0
5
Or just run
$ echo -e "7\n5\n0\n0\n5" > input_file

Then execute ssh or plink against MMB.

Example)
$ plink -ssh -T -l admin -pw admin 192.168.10.10 < input_file
...
+----------------------------------------------+
+             System Control Information
+----------------------------------------------+
System Name        : BX900-2
Housing Type       : BX900S1
System Location    : Data Center
System Contact     : dc-admin@example.com
Chassis Part Number: A3C40119934


+----------------------------------------------+
+             MMB
+----------------------------------------------+
Management Blade Run Mode             : master
Management Blade Status               : ok
Management Blade Manufacture          : FUJITSU
Management Blade Manufacture Date     : 04/02/2010 10:17:00
...

EFI Shell on Fujitsu PRIMERGY servers

Fujitsu removed the EFI shell access from their BIOS images some time ago for PRIMERGY servers (I believe Ivy Bridge generation or later models), so you cannot bring up EFI Shell in UEFI mode. In normal cases, this is not a problem. However in some cases, EFI shell makes your life easier.
For example, if the OS boot entry is somehow lost, without EFI Shell, you probably need to boot off of a Linux live CD or something to recreate a boot entry. If EFI shell is available, you don't need to do that. You just simple bring up the shell, and mount the EFI partition to execute the OS boot image.
Another example is that if you want to update PCIe card firmware image such as RAID card firmware before installing an OS, you have to use Fujitsu's Update Manager Express to do the update. It will take long time as it will update the whole system (BIOS, iRMC FW, PCIe FW, etc.). If you have EFI Shell, you can run EFI utilities to update firmware, and it will take less time.
Although Fujitsu disabled EFI Shell, there is still a way to use EFI shell on PRIMERGY servers.

Here are the instructions.
  1. Download the EFI shell binary from tianocore.
  2. Format your USB flash drive in FAT32.
  3. Create the \efi\boot folder.
  4. Copy the downloaded binary to \efi\boot, and rename the file to bootx64.efi.
  5. Boot the PRIMERGY server off of the USB device in UEFI mode.

You can extract the USB EFI shell environment as a HDD image, and mount it via iRMC Remote Storage. It's handy.

I put EFI utilities like LSI's storcli, Intel's bootutil, etc. to this, and created a HDD image as "efitools.img", so I can flash Fujitsu RAID firmware (ROM file), or change the boot mode (PXE or iSCSI) for Intel-based network cards on any PRIMERGY servers.

Good Bye, Folks!

As you may have heard, Fujitsu has completely discontinued Data Center Products and Solutions business in North America on April 1st, 2021. ...