Firmware update of Seagate harddisk using Linux - jandelgado/general GitHub Wiki

Problem

Seagate firmware tool dl_sea_fw does not work with CentOS 7 (and probably most modern distros). This article describes how to do a firmware update of a Seagate harddisk using Linux.

Successfully tested with an with 2TB Seagate Barracuda 7200.14 (AF) ST2000DM001-1CH164 disk.


Important: following the steps described here can easily brick your harddisk and/or lead to other serious problems with your computer. Make sure your fully understand every step. Especially the extraction of the firmware may differ. Do a backup of all your data before you start. Double check your backup. I am not responsible for any damage occuring by following this description.


Steps to perform

Ok, you have been warned. I successfully updated my firmware as follows:

  • make backup of all your data
  • unmount disk
  • obtain firmware update from Seagate website (in my case: SeagateFirmwareUpdate.Barracuda-GrenadaBP-CC29-CC49.sg-SFX)
  • extract firmware LOD files (see combination of awk and tail command below)
  • update disk with linux hdparm tool

Update Process

Extracting firmware LOD files from the SFX-Archive

The firmware is stored in a self-extracting archive. To untar it, we need the offset of the gzipped tar file inside the SFX-File:

    $ awk '/^__ARCHIVE_BELOW__/ {print NR + 1; exit 0;}' SeagateFirmwareUpdate.Barracuda-GrenadaBP-CC29-CC49.sg-SFX
    82

Using this offset (82), we can now extract the LOD-files cotaining the actual firmware:

    $ tail -n+82 SeagateFirmwareUpdate.Barracuda-GrenadaBP-CC29-CC49.sg-SFX |tar xvfz -
    $ ls *.LOD
    GBP1TBCC49.LOD  GBP2TBCC29.LOD  GBP3TBCC29.LOD

Having the 2TB variant of the disk, I proceed with the GBP2TBCC29.LOD file.

Updating the firmware

The firmware is updated using the hdparm tool:

    $ sudo hdparm --yes-i-know-what-i-am-doing --please-destroy-my-drive --fwdownload GBP2TBCC29.LOD /dev/sdf
    ........ Done.

Detail transcript of sample update session

$ sudo smartctl -i /dev/sdf
smartctl 6.2 2013-07-26 r3841 [x86_64-linux-4.3.0usbcon.jd.x86_64] (local build)
Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org  
    
=== START OF INFORMATION SECTION ===
Model Family:     Seagate Barracuda 7200.14 (AF)
Device Model:     ST2000DM001-1CH164
Serial Number:    XXXXXXXX
LU WWN Device Id: X XXXXXX XXXXXXXX
Firmware Version: CC26
User Capacity:    2,000,398,934,016 bytes [2.00 TB]
Sector Sizes:     512 bytes logical, 4096 bytes physical
Rotation Rate:    7200 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 3.0, 6.0 Gb/s (current: 6.0 Gb/s)
Local Time is:    Sat Dec  5 19:39:35 2015 CET
    
==> WARNING: A firmware update for this drive may be available,
see the following Seagate web pages:
http://knowledge.seagate.com/articles/en_US/FAQ/207931en
http://knowledge.seagate.com/articles/en_US/FAQ/223651en

SMART support is: Available - device has SMART capability.
SMART support is: Enabled
$ awk '/^__ARCHIVE_BELOW__/ {print NR + 1; exit 0;}' SeagateFirmwareUpdate.Barracuda-GrenadaBP-CC29-CC49.sg-SFX
82
$ tail -n+82 SeagateFirmwareUpdate.Barracuda-GrenadaBP-CC29-CC49.sg-SFX |tar xvfz -
$ ls *.LOD
GBP1TBCC49.LOD  GBP2TBCC29.LOD  GBP3TBCC29.LOD
$ sudo hdparm --yes-i-know-what-i-am-doing --please-destroy-my-drive --fwdownload GBP2TBCC29.LOD /dev/sdf
........ Done.
$ sudo smartctl -i /dev/sdf
...
Firmware Version: CC29
User Capacity:    2,000,398,934,016 bytes [2.00 TB]
Sector Sizes:     512 bytes logical, 4096 bytes physical
Rotation Rate:    7200 rpm
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   ACS-2, ACS-3 T13/2161-D revision 3b
SATA Version is:  SATA 3.1, 6.0 Gb/s (current: 6.0 Gb/s)
Local Time is:    Sat Dec  5 20:01:07 2015 CET
...

As you can see, the Firmware version changed from "CC26" to "CC29".