How to extract Dell HDD Firmware from *.fwh files

Notice: Page may contain affiliate links for which we may earn a small commission through services like Amazon Affiliates or Skimlinks.

BackupProphet

Well-Known Member
Jul 2, 2014
1,434
1,082
113
Stavanger, Norway
intellistream.ai
I just did this for a Dell ST10000NM0598.
Downloaded the firmware here: Seagate RSL5 for model number(s) ST10000NM0598, ST12000NM0158 and ST14000NM0168. | Driver Details | Dell US
Extracted it
Code:
./SAS-Drive_Firmware_VTX9C_LN64_RSL5_A00.BIN --extract=./extracted_firmware
Extract the LOD (actual firmware by stripping dell headers in the beginning)
Code:
cd extracted_firmware/payload
dd if=RSL5.fwh of=RSL5.lod ibs=208 skip=1
Finally update the disk firmware with:
Code:
sudo ./openSeaChest-v25.05.3-linux-i686-portable/openSeaChest_Firmware --downloadFW RSL5.lod /dev/sgX

==========================================================================================
 openSeaChest_Firmware - openSeaChest drive utilities - NVMe Enabled
 Copyright (c) 2014-2025 Seagate Technology LLC and/or its Affiliates, All Rights Reserved
 openSeaChest_Firmware Version: 4.3.3 X86
 Build Date: Oct  9 2025
 Today: 20251218T184327    User: root
==========================================================================================

/dev/sg8 - ST14000NM0168 - ZHZ63BAJ - RSL3 - SCSI
......
Firmware Download successful
Firmware Download time (s): 2.73
Average time/segment  (ms): 12.70
Activate Time          (s): 1.04
New firmware version is RSL5
Or you can use sg_write_buffer

This process should work for many more devices.
 
  • Like
Reactions: ano and nexox

kryten

Active Member
Apr 10, 2023
123
25
28
So is "dd if=RSL5.fwh of=RSL5.lod ibs=208 skip=1" stripping the headers? Or....
 

kryten

Active Member
Apr 10, 2023
123
25
28
I was wondering if that worked for Seagate only and the other brands had a slightly different header.
 

mostlycorn

Member
Jan 27, 2026
53
23
8
Thanks for this post! It was just what I needed. Though for my firmware (WDC SS200), I need to skip the first 592 bytes. Why 592?

My K968.fwh consists of
  • 64 byte header
    • the last byte of which (file offset 0x3f) is the number of supported drive models, 0xb in my case
  • an array of 11 (0xb) records, one per drive model, 0x30 bytes each
  • the content that goes into the .bin file
So for mine, 64 + 11 * 48 = 592