Doing it manually
Since I can’t use the tool provided by Seagate, the workaround is:
- find the firmware in the ISO
- apply it manually to both disks
Haystack, needle…
Mount the key (or the ISO):
> sudo mount -o loop ./Downloads/BarracudaLP-ALL-CC35.iso /home/fabien/plop/
Look up all those files, there’s this one which seems interesting:
-r-xr-xr-x 1 root root 52 févr. 10 2010 Autorun.inf
dr-xr-xr-x 1 root root 2048 févr. 11 2010 BCDW
-r-xr-xr-x 1 root root 77312 avril 30 2009 drivedetect.exe
dr-xr-xr-x 1 root root 2048 févr. 11 2010 FreeDOS
-r-xr-xr-x 1 root root 5898240 févr. 18 2010 HE-CC35.ima
-r-xr-xr-x 1 root root 18739 févr. 10 2010 README.txt
-r-xr-xr-x 1 root root 3638 nov. 7 2002 seglogo.ico
This HE-CC35.ima looks interesting, let’s see:
> file HE-CC35.ima
HE-CC35.ima: DOS/MBR boot sector, code offset 0x4c+2, OEM-ID "FreeDOS ", sectors/cluster 4, root entries 240, sectors 11520 (volumes <=32 MB), sectors/FAT 9, sectors/track 36, heads 4, serial number 0x0, label: " ", FAT (12 bit), followed by FAT
Great, assuming this is again a disk image, let’s mount:
> mkdir seagate_firmware
> sudo mount -o loop plop/HE-CC35.ima seagate_firmware/
> l seagate_firmware/
total 2650
-rwxr-xr-x 1 root root 66090 mai 3 2007 COMMAND.COM
-rwxr-xr-x 1 root root 2103 févr. 10 2010 FDAUTO.BAT
-rwxr-xr-x 1 root root 327 févr. 10 2010 FDCONFIG.SYS
-rwxr-xr-x 1 root root 14036 mars 23 2005 FINDTDSK.EXE
-rwxr-xr-x 1 root root 7736 juil. 7 2005 HIMEM.EXE
-rwxr-xr-x 1 root root 45565 mai 3 2007 KERNEL.SYS
-rwxr-xr-x 1 root root 2143428 févr. 17 2010 LOD.zip
-rwxr-xr-x 1 root root 4933 mai 26 2007 NANSI.SYS
-rwxr-xr-x 1 root root 374043 févr. 11 2010 SFLASH.ZIP
-rwxr-xr-x 1 root root 13740 janv. 31 1993 TDSK.EXE
-rwxr-xr-x 1 root root 30226 mai 26 2004 UNZIP.EXE
Looking up on internet, it seems that Seagate firmware are LOD, so I unzip the LOD.zip file.
Archive: LOD.zip
inflating: HECC352H.LOD
inflating: HECC354H.LOD
inflating: HECC358H.LOD
inflating: flash-m.bat
inflating: he-cc35.cfs
inflating: model.lst
So now we have 3 LOD.
Risks and bricks
Big fat warning: don’t do this if you don’t know what you’re doing. Most probably you will brick your disk, and this is your fault. What follows can lead to catastrophic failure, your disk may not be recoverable (not talking about the data on the disk, but the disk itself).
My disk is a ST31500541AS, there is no obvious clue to find which LOD is the proper one. Let’s grep:
> grep ST31500541AS *.LOD
No result. Go for the coarse-grain grep:
> grep ST31 *.LOD
Binary file HECC358H.LOD matches
OK, but how do we make sure this is the proper one ?
Using vi, with the magical command :%!xxd to read the hexa, and looking for the ST31 string:
000f8f60: 2020 2020 2020 2020 2020 2020 2020 2020
000f8f70: 2020 5354 335f 494e 5641 4c49 445f 5046 ST3_INVALID_PF
000f8f80: 4d53 5433 3830 3331 3443 5353 5433 3235 MST380314CSST325
000f8f90: 3033 3132 4353 5354 3332 3530 3431 3243 0312CSST3250412C
000f8fa0: 5353 5433 3235 3035 3132 4353 5354 3335 SST3250512CSST35
000f8fb0: 3030 3331 3243 5353 5433 3530 3034 3133 00312CSST3500413
000f8fc0: 4353 5354 3335 3030 3531 3343 5353 5433 CSST3500513CSST3
000f8fd0: 3735 3033 3232 4353 5354 3337 3530 3432 750322CSST375042
000f8fe0: 3343 5353 5433 3735 3035 3233 4353 5354 3CSST3750523CSST
000f8ff0: 3331 3030 3033 3232 4353 5354 3331 3030 31000322CSST3100
000f9000: 3034 3232 4353 5354 3331 3030 3035 3233 0422CSST31000523
000f9010: 4353 5354 3331 3530 3035 5858 5858 5354 CSST315005XXXXST
000f9020: 3332 3030 3035 5858 5858 5354 3338 3033 320005XXXXST3803
000f9030: 3134 4353 5354 3332 3530 3331 3243 5353 14CSST3250312CSS
000f9040: 5433 3235 3034 3132 4353 5354 3332 3530 T3250412CSST3250
000f9050: 3531 3243 5353 5433 3530 3033 3132 4353 512CSST3500312CS
000f9060: 5354 3335 3030 3431 3343 5353 5433 3530 ST3500413CSST350
000f9070: 3035 3133 4353 5354 3337 3530 3332 3243 0513CSST3750322C
000f9080: 5353 5433 3735 3034 3233 4353 5354 3337 SST3750423CSST37
000f9090: 3530 3532 3343 5353 5433 3130 3030 3332 50523CSST3100032
000f90a0: 3243 5353 5433 3130 3030 3432 3243 5353 2CSST31000422CSS
000f90b0: 5433 3130 3030 3532 3343 5353 5433 3135 T31000523CSST315
000f90c0: 3030 3558 5858 5853 5433 3230 3030 3558 005XXXXST320005X
000f90d0: 5858 5800 d296 0b06 0c20 0100 c696 0b06 XXX...... ......
OK, we can read ST315005XXXX so assuming a X can be replaced by any character it matches my model number. I check the other LOD files, no such string, no such model description. I also check all the other files (hoping to find an explicit readme), but nothing. So let’s do it.
> sudo hdparm --yes-i-know-what-i-am-doing --please-destroy-my-drive --fwdownload HECC358H.LOD /dev/sda
Done. Firmware updated. And the disk is still working.
Results
Now reporting an up to date firmware (from 2010 …):
> smartctl -i /dev/sda
smartctl 6.6 2017-11-05 r4594 [x86_64-linux-4.18.0-193.28.1.el8_2.x86_64] (local build)
Copyright (C) 2002-17, Bruce Allen, Christian Franke, www.smartmontools.org
=== START OF INFORMATION SECTION ===
Model Family: Seagate Barracuda LP
Device Model: ST31500541AS
Serial Number: XXXXXXXX
LU WWN Device Id: 5 000c50 01b98d6f4
Firmware Version: CC35
User Capacity: 1,500,301,910,016 bytes [1.50 TB]
Sector Size: 512 bytes logical/physical
Rotation Rate: 5900 rpm
Device is: In smartctl database [for details use: -P show]
ATA Version is: ATA8-ACS T13/1699-D revision 4
SATA Version is: SATA 2.6, 3.0 Gb/s
Local Time is: Mon Nov 9 21:03:14 2020 CET
SMART support is: Available - device has SMART capability.
SMART support is: Enabled
Source: https://idolum.gitlab.io/technical/services/linux_harddrive_firmware/#doing-it-manually