How to update firmware of Dell ST4000NM0035

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

dando

New Member
Nov 3, 2024
4
2
3
Hi and thank you for the great community!

I have a 4TB SATA HDD, Dell-branded, model ST4000NM0035, manufactured by Seagate.

I would like to update its firmware, but am having a tough time.


Below I will describe what I have tried so far.


The HDD came in a Lenovo P330 SFF gen 2. In this workstation, there are no other components manufactured by Dell.


I noticed some strange noise and looked it up online. It seems that this is a common issue with these drives, which is fixed with a firmware update:
https://www.reddit.com/r/homelab/comments/siyu6j
Seagate does offer some updates for HDDs with this model number, despite finding none in the initial search:

However, this update is to firmware revision TN05 (Seagate), while my drive has a firmware revision DA03 (Dell) and an exact Model Number ST4000NM0035-1V4107.
Seagate explicitly mention that their firmware update (.LOD file) is not suitable as this drive has Dell-specific firmware.

I found two newer firmware updates on Dell's webpage: DA05 and DA06.

I would like to flash the latter, but their download links contain only EXE files for Windows, or a BIN file for Red Hat Enterprise Linux:

I downloaded the the BIN file, and tried to run it on RHEL (Dell Support Live Image v. 3.0), but it failed:
Bash:
root@maxwell ~/s/s/D/DA06# ./Serial-ATA_Firmware_R100W_LN_DA06_A00.BIN

Collecting inventory...
....Can't open IPMI device
.......
Running validation...

This Update Package is not compatible with your system configuration.
The same happened when running on current stable Proxmox VE (Debian).

I next tried with Dell Nautilus Firmware Update Utility A22. It did detect a firmware update for the drive, but it also failed with some unclear error code:
Code:
Error Code: 2000-0151
Validation Code: 86636

Hard Drive 0 - S/N xxxxxxx incorrect status = 8000000000000007
I then looked again at the BIN update binary, and managed extracted the firmware file using:
Code:
./Serial-ATA_Firmware_R100W_LN_DA06_A00.BIN --extract firmware_update
I now have the .FWH file under
Code:
firmware_update/payload/Seagate_MakaraBP_DA06.fwh
Nevertheless, it is not compatible with Seagate's openSeaChest_Firmware and SeaChest_Firmware.

As explained by user fzabkar on HDDguru,
The FWH file is a Seagate LOD file with a Dell header.

So, I think there are a few more options which shall be tried:
1. Try to boot Windows on the machine, and try with the EXE update utilities.
2. It seems that the .LOD file can be extracted from the .FWH file. If I can make this right, I can use the resulting .LOD file in openSeaChest_Firmware and update the HDD's firmware.


Any guidelines on how to proceed with minimal probability of a bricked drive?
Why did the BIN file update not work - because I have nothing else made by Dell in this machine?

Many thanks in advance!

Kind regards,
dando
 

pimposh

hardware pimp
Nov 19, 2022
434
270
63
I do think Dell's FW have some extra payload added at the beggining of the file followed by regular firmware file, which is used by Dell's FW updmgr.
If you (DiffNow) compare FWH with generic DA06 LOD firmware (you'll find MakaraBP FW here) you will easily find what's added on top.

Trim it and most likely you're ready to go.
The same case goes on for other drive brands and firmware provided from Dell.
 
Last edited:

dando

New Member
Nov 3, 2024
4
2
3
Many thanks for your fast response, @pimposh!

In the meantime, I made some investigations following your guidelines.

I compared the DA06 FWH file (DELL, Seagate_MakaraBP_DA06.fwh) to the TN05 LOD file (Seagate, MakaraBPEntCapSATA-STD-512N-TN05.LOD). It seems that the common part starts after 208 bytes, i.e., this should be the length of the DELL header:
DA06-TN05.png

If desired, I can also attach the firmware files.
However, they can be downloaded:
1. Dell DA06: Seagate DA06 for model number(s) ST4000NM0035-1V4107, ST2000NM0055-1V4104 and ST1000NM0055-1V410C. | Driver Details | Dell US
2. Seagate TN05: https://www.seagate.com/content/dam...karaBP/EntCap-MakaraBP-STD-SATA-512N-TN05.zip

I am planning to just trim the leading 208 Bytes and try the upload.
What is the chance to brick the HDD this way?

Many thanks in advance!
 

mr44er

Active Member
Feb 22, 2020
168
51
28
I am planning to just trim the leading 208 Bytes and try the upload.
What is the chance to brick the HDD this way?
Should work and that is the correct way, have done this with (DELL)HGSTs in the past.
 

pimposh

hardware pimp
Nov 19, 2022
434
270
63
I am planning to just trim the leading 208 Bytes and try the upload.
What is the chance to brick the HDD this way?

Many thanks in advance!
Drive won't accept broken firmware (if not trimmed correctly). Chances near to zero, although you do it always on your risk.
 

dando

New Member
Nov 3, 2024
4
2
3
@pimposh, @mr44er, many thanks for all your invaluable contributions to the discussion!

I had reached out to the experts in the HDDguru Forums for guidance and verification that my observations and intentions are indeed correct.

The signed firmware posted by user SWM in the topic there was flashed successfully!

As a conclusion:
The leading 208 bytes from the DA06 FWH file (DELL, Seagate_MakaraBP_DA06.fwh) correspond to the the DELL header. After stripping them, the firmware is signed and valid for the update.

This can be achieved with the following command in Linux:
Code:
dd if=Seagate_MakaraBP_DA06.fwh of=Seagate_MakaraBP_DA06.lod ibs=208 skip=1
Afterwards, openSeaChest_Firmware can be used for flashing.

Once again, many thanks! :)

All the best,
dando
 
  • Like
Reactions: mr44er and pimposh

jabuzzard

Member
Mar 22, 2021
93
44
18
Just a note: the Dell header isn't always 208 bytes, though it's the most common size. To work out its size, note that the firmware is always a multiple of 512 bytes (at least in my experience), so the header size is the remainder when you divide the file size by 512.