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".