HP Enterprise SSD - Critical firmware update

I was trying to write something that was more universal outside of this particular use case, but that is an interesting point about this case.

I also have a fairly small sample space here, most of the Linux machines I’m dealing with are VMs, but I do have a few other unique results here:

VMWare - Virtual disk - 1.0
ATA - TOSHIBA DT01ACA1 - A7C0
Generic - SD/MMC CRW - 1.00
HPE - LOGICAL VOLUME - 1.34

So it looks like the HPE RAID is hiding the real disk models here as well.

1 Like

I haven’t found a path to retrieve the physical drive details from an HPE RAID on Linux yet; we may need to run a probe.

1 Like

The root/HPQ wmi query is definitely an easier way to retrieve the firmware and drive information.

I was able to find some affected devices and was able to use that call to verify firmware version:

( concatenations ", " of ( (it as trimmed string) of (following text of first " " of it | it) of (string value of property "ElementName" of it | ""); string value of property "VersionString" of it | "") of it ) of select objects "ElementName,VersionString from HPSA_DiskDriveFirmware" of wmis "root/HPQ"

EG1800JFHMH, HPD5
EG1800JEMDB, HPD3
EG1800JEMDB, HPD3
EG1800JEMDB, HPD3
MO0400JFFCF, HPD4
MO0400JFFCF, HPD4
EH000300JWCPK, HPD3
EH000300JWCPK, HPD3

I had originally been trying to parse the SSA Cli output to find that information, but it was quite an expensive call (and i probably wasn’t pulling the correct line anyways)

if (exists file "C:\Temp\hpsumdrives.txt" and exists lines whose (it contains "MO0400JFFCF") of file "C:\Temp\hpsumdrives.txt") then ((it as trimmed string) of following text of first "Firmware Revision:" of lines whose (line number of it = maximum of (it as integer - 3) of line numbers of lines whose (it contains "MO0400JFFCF") of file "C:\Temp\hpsumdrives.txt") of file "C:\Temp\hpsumdrives.txt") else ("Not applicable")

if (exists file "C:\Temp\hpsumdrives.txt" and exists lines whose (it contains "MO0400JFFCF") of file "C:\Temp\hpsumdrives.txt") then ((it as trimmed string) of following text of first "Firmware Revision:" of lines whose (line number of it = maximum of (it as integer - 3) of line numbers of lines whose (it contains "MO0400JFFCF") of file "C:\Temp\hpsumdrives.txt") of file "C:\Temp\hpsumdrives.txt") does not contain "HPD8" else false

1 Like

Of course, not everything had the WBEM Providers, so:

(exists file "msiexec.exe" of system folder) AND (disjunction of (NOT exists keys whose ( value "DisplayName" of it as string contains "HPE Insight Management WBEM Providers" as string) of keys "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" of ( x32 registry; (if exists x64 registry then x64 registry else nothing) )))

(string value of select "Manufacturer from Win32_ComputerSystem" of wmi contains "HP") OR (string value of select "Manufacturer from Win32_ComputerSystem" of wmi contains "Hewlett-Packard")

msiexec.exe /passive /norestart /i "hpwbemproviders_x64.msi" /qn
2 Likes

Question - this going to make its way into the product?

I wouldn’t expect it - we don’t usually cover hardware-specific content. More likely we (or you) will post something on https://bigfix.me when we have it all worked out.

1 Like

There are 2 parts, the first is figuring out the best way to detect the issue, then the 2nd is to actually fix it.

The detection is easier to publish than the fixes, since we can’t easily validate the fixes ourselves, so this isn’t something we would publish as bigfix content typically, and we don’t have a good obvious place to put it since it doesn’t fit in with the normal patch content. We will try to address it here and create relevance and/or fixlets on a best effort basis, and publish them here, and/or BigFix.Me , and/or GitHub. It is only after that point if the community can validate the content and confirm it works well that we would consider publishing it to something that would show up automatically in BigFix, but we would have to figure out a good way to do that.

We are really trying to make this easier for you to address with custom content, but we really need as much help as possible to move forward. We can help a lot with things like relevance and process, but we can’t do nearly as much with validation of this.

1 Like

This command gives the full detail about firmware / power on time.

hpssacli ctrl all show config detail


physicaldrive 1I:1:23
Port: 1I
Box: 1
Bay: 23
Status: OK
Drive Type: Data Drive
Interface Type: Solid State SAS
Size: 800 GB
Drive exposed to OS: False
Native Block Size: 4096
Firmware Revision: HPD2
Serial Number: 66J0A027TIIA1624
Model: HP VK0800JEABE
Current Temperature ©: 35
Maximum Temperature ©: 45
Usage remaining: 100.00%
Power On Hours: 22514
SSD Smart Trip Wearout: False
PHY Count: 2
PHY Transfer Rate: 12.0Gbps, Unknown
Drive Authentication Status: OK
Carrier Application Version: 11
Carrier Bootloader Version: 6
Sanitize Erase Supported: False

1 Like

Thanks, what OS and version is that from? Is hpssautil at /usr/sbin or somewhere else?

1 Like

Running count of the possible HP Utilities on Linux:

  • /usr/sbin/hpacucli (found on RHEL 6.5 )
    – hpacucli ctrl all show config detail

  • /sbin/ssacli ( found on RHEL 7.4)
    – syntax unknown

  • /opt/hp/hpssacli/bin/hpssacli
    – hpssacli ctrl all show config detail

This is what I am going to do to pull the disk info. hpacucli and hpssacli syntax is same. The rel5 will be hpacculi , and rel6/7 will be hpsascli. I am going to fire the script via bigfix.

hpssacli=`which hpssacli`
curl=`which curl`
chmod=`which chmod`
log=/var/tmp/`hostname`.txt
#hpssacli=`which hpacucli`

if [ ! -f $hpssacli  -o ! -f $curl ]
then
  echo "hpssacli or curl don't exist. Check the path or hp binary"
  echo "hpssacli or curl don't exist. Check the path or hp binary"> $log
  exit 1
fi

echo "PD,SAS,FirmRev,Serial,Model,Size,PowerOnDays,Status"> $log
for disk in `$hpssacli ctrl all show config|grep physicaldrive|awk ' {print $2}'`
do
sas=`$hpssacli ctrl slot=0 pd $disk  show detail|grep 'Interface Type'|awk -F: ' {print $2}'|xargs|sed 's/ //g'`
firmware_rev=`$hpssacli ctrl slot=0 pd $disk  show detail|grep 'Firmware Revision'|awk -F: ' {print $2}'|xargs|sed 's/ //g'`
serial=`$hpssacli ctrl slot=0 pd $disk  show detail|grep 'Serial Number'|awk -F: ' {print $2}'|xargs|sed 's/ //g'`
model=`$hpssacli ctrl slot=0 pd $disk  show detail|grep 'Model'|awk -F: ' {print $2}'|xargs|sed 's/ //g'`
size=`$hpssacli ctrl slot=0 pd $disk  show detail|grep 'Size:'|grep -v Native|awk -F: ' {print $2}'|xargs|sed 's/ //g'`
poweron=`$hpssacli ctrl slot=0 pd $disk  show detail|grep 'Power On Hours'|awk -F: ' {print $2}'|xargs|sed 's/ //g'`
status=`$hpssacli ctrl slot=0 pd $disk  show detail|grep Status|grep -v Drive|awk -F: ' {print $2}'|xargs|sed 's/ //g'`

echo "$disk,$sas,$firmware_rev,$serial,$model,$size,$poweron,$status" >> $log
done

$curl -T $log http://xyz/reports/hp_disk/ 2>/dev/null
$chmod 644 $log
1 Like