Switch to full style
In-depth technology research: finding new ways to recover data, accessing firmware, writing programs, reading bits off the platter, recovering data from dust.

Forum rules

Please do not post questions about data recovery cases here (use this forum instead). This forum is for topics on finding new ways to recover data. Accessing firmware, writing programs, reading bits off the platter, recovering data from dust...
Post a reply

Extract .LOD file (Seagate) from .FWH file (Dell)

February 24th, 2025, 20:00

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.
Some notes:

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/commen ... g_strange/

Seagate does offer some updates, despite finding none in the initial search:
https://www.seagate.com/content/dam/sea ... N-TN05.zip

However, my drive has a firmware revision DA03 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:
https://www.dell.com/support/home/en-us ... erId=R100W

I downloaded the latter, and tried to run it on RHEL (Dell Support Live Image v. 3.0), but it failed.
The same happened when running on current stable Debian.

Dell Nautilus Firmware Update Utility A22 detected a firmware update, but it also failed with some unclear error code:
https://www.dell.com/support/home/en-us ... erId=9RP29

I 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 fzabkar,
The FWH file is a Seagate LOD file with a Dell header.

https://forum.hddguru.com/viewtopic.php ... wh#p295472

So it seems that the .LOD file can be extracted from the .FWH file.
How to do this, such that I can use it in openSeaChest_Firmware and update the HDD's firmware successfully?

I am thinking of something like:
Code:
dd if=firmware_update/payload/Seagate_MakaraBP_DA06.fwh of=firmware_extracted.lod bs=512 skip=1


This was suggested by chatGPT and it does seem to remove just the header, but is it correct?

Many thanks in advance!

Kind regards,
dando

Re: Extract .LOD file (Seagate) from .FWH file (Dell)

February 25th, 2025, 13:29

It's very easy to brick HDD with the wrong update...
Attachments
Seagate_MakaraBP_DA06.7z
(1008.03 KiB) Downloaded 826 times

Re: Extract .LOD file (Seagate) from .FWH file (Dell)

February 28th, 2025, 15:43

Many thanks for your fast response, SWM!

What is the chance to brick the HDD with the firmware file you kindly attached?

In the meantime, I made some investigations.

First, 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


Next, I compared the .LOD file you provided to the .FWH file by DELL.
It seems to have the leading 272 Bytes removed instead:
DA06_LOD-DA06_FWH.png


If desired, I can also attach the firmware files.
However, they can be downloaded:
1. Dell DA06: https://www.dell.com/support/home/en-us ... erid=r100w
2. Seagate TN05: https://www.seagate.com/content/dam/sea ... N-TN05.zip

Many thanks in advance!

Re: Extract .LOD file (Seagate) from .FWH file (Dell)

March 1st, 2025, 3:28

I cut out for you a piece that HDD understands on command 92H "Download microcode".
I did not study the update headers from different manufacturers.
If the loader does not fit, HDD will not accept it. But often HDD is damaged by an update when the process is interrupted (power outage, reset), or when HDD has a faulty recording in service area.

Re: Extract .LOD file (Seagate) from .FWH file (Dell)

March 1st, 2025, 3:42

@SWM, I see what you've done, and your edited Dell LOD file does match Seagate's earlier retail versions. However, I notice that the latest Seagate retail LOD version (TN05) has an extra 64-byte header. That's what is confusing the OP, and it confuses me, too.

Re: Extract .LOD file (Seagate) from .FWH file (Dell)

March 1st, 2025, 13:51

fzabkar, It's very possible that I'm wrong. I have nothing to test it on. Sorry.
The whole question here is, for whom are these 64 bytes. For HDD or for the new update program...

Re: Extract .LOD file (Seagate) from .FWH file (Dell)

March 1st, 2025, 15:07

the extra 64 bytes are needed in signed LODs.

Re: Extract .LOD file (Seagate) from .FWH file (Dell)

March 1st, 2025, 15:42

pepe, Thanks, we'll know.

Re: Extract .LOD file (Seagate) from .FWH file (Dell)

March 1st, 2025, 17:44

Thank you very much for the discussion!

I tried to update the firmware with the provided LOD file by SWM.
This was not successful, unfortunately:
Code:
# ./openSeaChest_Firmware -d /dev/sg0 --downloadFW /root/Seagate_MakaraBP_DA06.lod
==========================================================================================
openSeaChest_Firmware - openSeaChest drive utilities - NVMe Enabled
Copyright (c) 2014-2024 Seagate Technology LLC and/or its Affiliates, All Rights Reserved
openSeaChest_Firmware Version: 4.2.0-8_0_1 X86_64
Build Date: Sep 25 2024
Today: 20250301T233712 User: root
==========================================================================================

/dev/sg0 - ST4000NM0035-1V4107 - ZCxxxxxA - DA03 - ATA
.
Automatic deferred download failed. Either the drive does not support this mode
or this is an invalid firmware image for this device.
Retrying the download with segmented download mode to verify.
.
Firmware Download not supported


This was when using the latest openSeaChest_Firmware from github:
https://github.com/Seagate/openSeaChest

I also tried with an older version of SeaChest_Firmware, the one included in the Seagate update package:
Code:
./SeaChest_Firmware_254_1183_64 --downloadFW /root/Seagate_MakaraBP_DA06.lod --device /dev/sda
==========================================================================================
SeaChest_Firmware - Seagate drive utilities - NVMe Enabled
Copyright (c) 2014-2018 Seagate Technology LLC and/or its Affiliates, All Rights Reserved
SeaChest_Firmware Version: 2.5.4-1_18_3 X86_64
Build Date: Oct 18 2018
Today: Sat Mar  1 23:38:44 2025
==========================================================================================

/dev/sg0 - ST4000NM0035-1V4107 - ZCxxxxxA - ATA
Firmware Download failed


In the meantime, I tried updating from within Windows with the official packages by Dell.
This did not work, with the same error message as when using the Linux package.
What is interesting is that this was on a Dell machine, albeit the SATA HDD was directly attached to the motherboard with no HBA or other cards in between.

Kind regards,
dando

Re: Extract .LOD file (Seagate) from .FWH file (Dell)

March 2nd, 2025, 15:44

dando
Attachments
Seagate_MakaraBP_DA06_Sign.zip
(1.12 MiB) Downloaded 766 times

Re: Extract .LOD file (Seagate) from .FWH file (Dell)

March 3rd, 2025, 14:15

Header of signed LOD

Code:
Offset(h) 00       04       08       0C

00000000  E71A0E59 01000200 00000000 00001900
00000010  00000000 00000000 00000000 00000000
00000020  00000000 00B01D00 00000000 00000000
                   ^^^^^^^^
                   size of signed LOD = 0x1DB000

00000030  00000000 00000000 00000000 0000D2DB
                                         ^^^^
                                         checksum

Header of unsigned LOD

Code:
Offset(h) 00       04       08       0C

00000040  00000000 00000000 00000000 00000700
00000050  40010000 00000000 00000000 00000000
00000060  00000000 00AE1D00 00000000 00000000
                   ^^^^^^^^
                   size of unsigned LOD = 0x1DAE00

00000070  00000000 00000000 00000000 00009C50
                                         ^^^^
                                         checksum

Signature at end of LOD

Code:
Offset(h) 00       04       08       0C

001DAE40  052994A6 01000001 00000000 00001A00
001DAE50  80010000 00000000 00000000 00000000
001DAE60  00000000 00000000 00000000 00000000
001DAE70  00000000 00000000 00000000 0000CC2D
001DAE80  559C17FC 785FC951 46430D6E 556D5458
001DAE90  C73C979F 206EDA10 5F13A530 2717DA21
001DAEA0  3DA8A9B5 43FC239B F1DC1FFF 57B4C2C8
001DAEB0  472C1E8E 47847A67 3552113C 4C837EED
001DAEC0  0EF858F7 D30DD0A2 BCC8C20E 7797CC5D
001DAED0  D4E68493 B3BA2AC1 1122BC39 81ADC7CD
001DAEE0  B7AD5355 D4AE692D D92A8BDD C625ADE3
001DAEF0  031DCC43 3B3AE0B8 BCE4B3CD 1200DF05
001DAF00  1998EBD8 EE23B06B B3D00882 4C89A755
001DAF10  28E52068 9BDC800D BDEA5348 CB20842E
001DAF20  F0447976 AAC8A418 35792AAB BA1A902B
001DAF30  F91EBD91 60B25A1E 6AD21D85 D7A4F55F
001DAF40  922AA51B 37FAF9EF 50D9126B 30EF10B2
001DAF50  6361757F 6DFF02C6 685373C3 FC251CA7
001DAF60  D2960891 FBDEC1A6 34CE1397 33176C2D
001DAF70  1C750BF7 1E1FFB0C D17ACD5B 5BC8070C
001DAF80  00000000 00000000 00000000 00000000
001DAF90  00000000 00000000 00000000 00000000
001DAFA0  00000000 00000000 00000000 00000000
001DAFB0  00000000 00000000 015B1BB2 6E3E312E  .........[.²n>1.
001DAFC0  332E362E 312E342E 312E3335 38312E38  3.6.1.4.1.3581.8
001DAFD0  2E312E34 30000000 00000000 0000312E  .1.40.........1.
001DAFE0  332E362E 312E342E 312E3335 38312E38  3.6.1.4.1.3581.8
001DAFF0  2E322E31 2E313300 00000000 000001F8  .2.1.13........ø

Could the unsigned LOD have been rejected because it was too long (because of the signature)?

Re: Extract .LOD file (Seagate) from .FWH file (Dell)

March 3rd, 2025, 18:05

size does not matter, at least not in this way. But missing critical objects from the LOD does.

Re: Extract .LOD file (Seagate) from .FWH file (Dell)

March 5th, 2025, 17:04

The signed firmware posted by SWM was flashed successfully!

SWM, fzabkar, pepe, many thanks for all your invaluable contributions to the discussion!

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

Re: Extract .LOD file (Seagate) from .FWH file (Dell)

April 17th, 2025, 18:32

Error that I am getting while issuing command
--fwdownload in Hdparm may be of interest here.
It is Samsung SSD 850 PRO in safe mode by connecting two separated pins on the board.
"dparm --yes-i-know-what-i-am-doing --please-destroy-my-drive --fwdownload-mode7 /media/sdb1 RI_PM863_GA38 /dev/sda

/dev/sda:
RI_PM863_GA38.fwh: file size (1049024) not a multiple of 512"


RI_PM863_GA38.fwh File is taken from Dell update package for this model Samsung 850 pro 512Gb
It wont recognize it in Samasung Fw utility nor execute secure erase command.
It is signed as Samsung SSD 0000 model.
I am also receiving errors with samsung.py script for decoding original fw package.
Is someone would help me here I would be thankful.

Re: Extract .LOD file (Seagate) from .FWH file (Dell)

April 17th, 2025, 20:24

Strip off Dell's header.

Re: Extract .LOD file (Seagate) from .FWH file (Dell)

April 17th, 2025, 20:53

fzabkar wrote:Strip off Dell's header.


"dd if=Seagate_MakaraBP_DA06.fwh of=Seagate_MakaraBP_DA06.lod ibs=208 skip=1"

So I can use same command in the Gparted with the name of dell fw but how I will know how how many "ibs" to cut?
Is it there some other program to open it and see it like on thef images on the previous posts?
Thanks.
"failed to open ri..(Dell file)"
Stuck again.

Re: Extract .LOD file (Seagate) from .FWH file (Dell)

April 17th, 2025, 21:10

I don't know the size of the header in your case. It's not always the same. You need to make an intelligent assessment, preferably by comparison with standard Samsung firmware payloads.

Re: Extract .LOD file (Seagate) from .FWH file (Dell)

April 17th, 2025, 21:21

I see it somewhere before and I can calculate with multiplier of 512 from error message but it will be simple if you can upload origin decoded file from Samsung fw like on the github site od samsung py script because "dd" command wont open Dell fw file. :|
https://github.com/chrivers/samsung-firmware-magic

Re: Extract .LOD file (Seagate) from .FWH file (Dell)

April 18th, 2025, 4:46

Could you please just upload EXM04B6Q_10170217.enc > EXM04B6Q_10170217.bin

It is simple because I am receiving errors both with opening Dell fw file and encoding Samsung origin fw file.
What is Linu distro that will work here and may be I can use size of your uploaded file for later model of Samsung SSD from this topic:

EXT0DB6Q.enc.decoded.7z [306.01 KiB]

Re: Extract .LOD file (Seagate) from .FWH file (Dell)

April 18th, 2025, 12:19

svetoklik,
Attachments
RI_PM863_GA38.zip
(421.58 KiB) Downloaded 754 times
Post a reply