](/media/headers/dir.jpg)
Updating HP enterprise SSD firmware on Debian
I recently bought two used HP enterprise SSDs for VM storage on Proxmox. These are rebranded Intel drives, the specific ones I bought are designed for read intensive workloads because that’s what was available second hand.

SMART attributes - before
When they arrived I wanted to check basic SMART attributes. Unfortunately, the output of smartctl
was not particularly helpful. Many attributes were missing, and others such as Program_Fail_Count_Chip
had raw values that made little sense.
SMART Attributes Data Structure revision number: 1
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
1 Raw_Read_Error_Rate 0x000f 130 130 039 Pre-fail Always - 98040626
5 Reallocated_Sector_Ct 0x0033 100 100 001 Pre-fail Always - 0
9 Power_On_Hours 0x0032 100 100 000 Old_age Always - 5419
173 Unknown_Attribute 0x0033 100 100 001 Pre-fail Always - 0
175 Program_Fail_Count_Chip 0x0033 100 100 010 Pre-fail Always - 188978498111
180 Unused_Rsvd_Blk_Cnt_Tot 0x003b 130 130 039 Pre-fail Always - 98040659
194 Temperature_Celsius 0x0022 100 100 000 Old_age Always - 21
196 Reallocated_Event_Count 0x0033 100 100 010 Pre-fail Always - 0
Flashing new firmware
Fortunately, HP provides firmware updates for these drives, and a newer version notes that SMART attributes are fixed:
HPG6 introduces bug fixes, reliability enhancement and modification in SMART Attributes.
Unfortunately, updates are provided for Red Hat in RPM format. The specific file I used was firmware-hdd-c566d63ca0-HPG7-4.1.x86_64.rpm
, which can be extracted using the rpm2cpio
utility as described in this Stack Overflow post.
Assuming the RPM is in /tmp
, the following steps will extract the flash utilities:
$ sudo apt install rpm2cpio
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Suggested packages:
rpm-i18n
The following NEW packages will be installed:
rpm2cpio
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 1,547 kB of archives.
After this operation, 1,586 kB of additional disk space will be used.
Get:1 http://ftp.uk.debian.org/debian bookworm/main amd64 rpm2cpio amd64 4.18.0+dfsg-1+deb12u1 [1,547 kB]
Fetched 1,547 kB in 0s (8,393 kB/s)
Selecting previously unselected package rpm2cpio.
(Reading database ... 67605 files and directories currently installed.)
Preparing to unpack .../rpm2cpio_4.18.0+dfsg-1+deb12u1_amd64.deb ...
Unpacking rpm2cpio (4.18.0+dfsg-1+deb12u1) ...
Setting up rpm2cpio (4.18.0+dfsg-1+deb12u1) ...
Processing triggers for man-db (2.11.2-2) ...
$ rpm2cpio firmware-hdd-c566d63ca0-HPG7-4.1.x86_64.rpm | cpio -idmv
./usr/lib/x86_64-linux-gnu/firmware-hdd-c566d63ca0-HPG7-4.1
./usr/lib/x86_64-linux-gnu/firmware-hdd-c566d63ca0-HPG7-4.1/.cpq_package.inc
./usr/lib/x86_64-linux-gnu/firmware-hdd-c566d63ca0-HPG7-4.1/.setup
./usr/lib/x86_64-linux-gnu/firmware-hdd-c566d63ca0-HPG7-4.1/4IYRHPG7.bin
./usr/lib/x86_64-linux-gnu/firmware-hdd-c566d63ca0-HPG7-4.1/CP063860.xml
./usr/lib/x86_64-linux-gnu/firmware-hdd-c566d63ca0-HPG7-4.1/hpsetup
./usr/lib/x86_64-linux-gnu/firmware-hdd-c566d63ca0-HPG7-4.1/libsetup.so
./usr/lib/x86_64-linux-gnu/firmware-hdd-c566d63ca0-HPG7-4.1/mnv_cli
./usr/lib/x86_64-linux-gnu/firmware-hdd-c566d63ca0-HPG7-4.1/payload.json
./usr/lib/x86_64-linux-gnu/firmware-hdd-c566d63ca0-HPG7-4.1/setup
./usr/lib/x86_64-linux-gnu/hp-scexe-compat
./usr/lib/x86_64-linux-gnu/hp-scexe-compat/CP063860.scexe
./usr/lib/x86_64-linux-gnu/scexe-compat
./usr/lib/x86_64-linux-gnu/scexe-compat/CP063860.scexe
32127 blocks
# Files are now in /tmp/usr/lib/x86_64-linux-gnu/firmware-hdd-c566d63ca0-HPG7-4.1
Drive updating can now be achieved by running the ./setup
script, which interactively prompts for the drive(s) to flash:
$ ./setup
Online HDD/SSD Flash Component for Linux (x64) - VK000240GWTSV, VK000480GWTTA, VK000960GWTTB, VK001920GWTTC, VK003840GWTTD, MK000480GWTTH, MK000960GWTTK, MK001920GWTTL and MK003840GWTTN Drives (HPG7), searching...
1) VK000480GWTTA Drive PHYF0040004E480BGN (Generic HBA 8 Series/C220 Series Chipset Family 6-port SATA Controller 1 [AHCI mode] in Slot ATTR_VALUE_SLOT_UNKNOWN) (HPG7)
2) VK000480GWTTA Drive PHYF004001W9480BGN (Generic HBA 8 Series/C220 Series Chipset Family 6-port SATA Controller 1 [AHCI mode] in Slot ATTR_VALUE_SLOT_UNKNOWN) (HPG7)
Select which devices to flash [#,#-#,(A)ll,(N)one]>
This worked fine on Debian Bookwork, despite the executables mnv_cli
and libsetup.so
being dynamically linked for Red Hat.
SMART attributes - after
This provided additional SMART data from smartctl
, but a number of attributes are still unknown or have unusual raw values.
SMART Attributes Data Structure revision number: 1
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
5 Reallocated_Sector_Ct 0x0032 100 100 000 Old_age Always - 0
9 Power_On_Hours 0x0032 100 100 000 Old_age Always - 7500
12 Power_Cycle_Count 0x0032 100 100 000 Old_age Always - 34
170 Unknown_Attribute 0x0033 100 100 010 Pre-fail Always - 0
171 Unknown_Attribute 0x0032 100 100 000 Old_age Always - 0
172 Unknown_Attribute 0x0032 100 100 000 Old_age Always - 0
174 Unknown_Attribute 0x0032 100 100 000 Old_age Always - 30
175 Program_Fail_Count_Chip 0x0033 100 100 010 Pre-fail Always - 150323792381
183 Runtime_Bad_Block 0x0032 100 100 000 Old_age Always - 0
184 End-to-End_Error 0x0033 100 100 090 Pre-fail Always - 0
187 Reported_Uncorrect 0x0032 100 100 000 Old_age Always - 0
190 Airflow_Temperature_Cel 0x0022 079 079 000 Old_age Always - 21 (Min/Max 20/22)
192 Power-Off_Retract_Count 0x0032 100 100 000 Old_age Always - 30
194 Temperature_Celsius 0x0022 100 100 000 Old_age Always - 21
197 Current_Pending_Sector 0x0012 100 100 000 Old_age Always - 0
199 UDMA_CRC_Error_Count 0x003e 100 100 000 Old_age Always - 0
225 Unknown_SSD_Attribute 0x0032 100 100 000 Old_age Always - 30272
226 Unknown_SSD_Attribute 0x0032 100 100 000 Old_age Always - 153
227 Unknown_SSD_Attribute 0x0032 100 100 000 Old_age Always - 86
228 Power-off_Retract_Count 0x0032 100 100 000 Old_age Always - 449624
232 Available_Reservd_Space 0x0033 100 100 010 Pre-fail Always - 0
233 Media_Wearout_Indicator 0x0032 100 100 000 Old_age Always - 0
234 Unknown_Attribute 0x0032 100 100 000 Old_age Always - 0
235 Unknown_Attribute 0x0033 100 100 010 Pre-fail Always - 150323792381
241 Total_LBAs_Written 0x0032 100 100 000 Old_age Always - 30272
242 Total_LBAs_Read 0x0032 100 100 000 Old_age Always - 215961
243 Unknown_Attribute 0x0032 100 100 000 Old_age Always - 97537
Astute readers will notice from Power_On_Hours
that I mixed up drives here, it did not take 2,081 hours to flash! One of the used SSDs I bought had slightly higher usage than the other, but both had been powered on for less than a year.
Note that some reputable hardware companies will recertify drives and reset these values, and other unscrupulous sellers will reset them without recertifying. Buyer beware for second hand storage.
SMART attributes - fixed
Fortunately it was trivial to make smartctl
recognise the drive as an Intel SSDSC2KB480G8P, which is the part that HP rebranded. A quick patch to the drive database is below, and has been submitted to smartmontools bug tracker.
--- /var/lib/smartmontools/drivedb/drivedb.h 2025-02-03 16:40:07.826619214 +0000
+++ /var/lib/smartmontools/drivedb/drivedb.h 2025-02-03 16:43:12.087840636 +0000
@@ -1741,7 +1741,8 @@
// INTEL SSDSC2KB038T7/SCV10121, INTEL SSDSC2KG240G7/SCV10100,
// INTEL SSDSC2KB480GZ/7CV10100, INTEL SSDSC2KB076T8/XCV10132,
// SOLIDIGM SSDSC2KB960GZ/7CV10130
- "(INTEL|SOLIDIGM) SSDSC(2K|KK)(B|G)(240G|480G|960G|019T|038T|076T)[78Z].?",
+ "(INTEL|SOLIDIGM) SSDSC(2K|KK)(B|G)(240G|480G|960G|019T|038T|076T)[78Z].?|"
+ "VK000(240G|480G|960G|019T|038T|076T)WTTA", // HP OEM Certified Intel drive
"", "",
//"-v 5,raw16(raw16),Reallocated_Sector_Ct "
//"-v 9,raw24(raw8),Power_On_Hours "
Full SMART attributes are now correctly decoded:
SMART Attributes Data Structure revision number: 1
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
5 Reallocated_Sector_Ct 0x0032 100 100 000 Old_age Always - 0
9 Power_On_Hours 0x0032 100 100 000 Old_age Always - 7500
12 Power_Cycle_Count 0x0032 100 100 000 Old_age Always - 34
170 Available_Reservd_Space 0x0033 100 100 010 Pre-fail Always - 0
171 Program_Fail_Count 0x0032 100 100 000 Old_age Always - 0
172 Erase_Fail_Count 0x0032 100 100 000 Old_age Always - 0
174 Unsafe_Shutdown_Count 0x0032 100 100 000 Old_age Always - 30
175 Power_Loss_Cap_Test 0x0033 100 100 010 Pre-fail Always - 2557 (34 65535)
183 SATA_Downshift_Count 0x0032 100 100 000 Old_age Always - 0
184 End-to-End_Error_Count 0x0033 100 100 090 Pre-fail Always - 0
187 Uncorrectable_Error_Cnt 0x0032 100 100 000 Old_age Always - 0
190 Drive_Temperature 0x0022 079 079 000 Old_age Always - 21 (Min/Max 20/22)
192 Unsafe_Shutdown_Count 0x0032 100 100 000 Old_age Always - 30
194 Temperature_Celsius 0x0022 100 100 000 Old_age Always - 21
197 Pending_Sector_Count 0x0012 100 100 000 Old_age Always - 0
199 CRC_Error_Count 0x003e 100 100 000 Old_age Always - 0
225 Host_Writes_32MiB 0x0032 100 100 000 Old_age Always - 30272
226 Workld_Media_Wear_Indic 0x0032 100 100 000 Old_age Always - 153
227 Workld_Host_Reads_Perc 0x0032 100 100 000 Old_age Always - 86
228 Workload_Minutes 0x0032 100 100 000 Old_age Always - 449624
232 Available_Reservd_Space 0x0033 100 100 010 Pre-fail Always - 0
233 Media_Wearout_Indicator 0x0032 100 100 000 Old_age Always - 0
234 Thermal_Throttle_Status 0x0032 100 100 000 Old_age Always - 0/0
235 Power_Loss_Cap_Test 0x0033 100 100 010 Pre-fail Always - 2557 (34 65535)
241 Host_Writes_32MiB 0x0032 100 100 000 Old_age Always - 30272
242 Host_Reads_32MiB 0x0032 100 100 000 Old_age Always - 215961
243 NAND_Writes_32MiB 0x0032 100 100 000 Old_age Always - 97537
This shows that 968GiB has been written to the drive (32MiB * 30,272), or just under 1TiB. NAND writes are higher but still only 3TiB, a tiny amount in the lifetime of an enterprise drive.
Proxmox is now chugging away with 480GB of mirrored storage on these two drives using ZFS, which should provide plenty of warning if one starts to fail.