Seagate Disk Firmware Update

Simple script to do bulk firmware updates to Seagate SAS disks in a JBOD on Illumos/Solaris.

Background: Seagate disks will only accept a firmware image that is sent on the primary SAS channel. When in a JBOD with multiple SAS paths, Illumos will round robin all communication down all paths. This will not work. This script disables all but one path before sending the firmware. If it fails it tries another path until it succeeds or has tried all paths.

Requires: sg_buffer_write from sg3_utils - http://sg.danny.cz/sg/sg3_utils.html 'sg_buffer_write' must be in the execution search path

Optional: GNU Parallel https://www.gnu.org/software/parallel/ 'parallel' must be in the execution search path

Update a single disk example:

update-seagate-firmware.sh -d c0t5000C500629AD01Fd0 -f MakaraPlusEntCapSAS-STD-5xxE-E004.LOD

Update multiple disks utilizing GNU Parallel: Create a file listing all the names of the disks to be updated with one disk per line. Such as:

c0t5000C500629AD01Fd0    
c0t5000C500629A4FFBd0    
c0t5000C500629A516Fd0    
c0t5000C500629A5947d0

Execute:

parallel-update.sh -d {disk_list_file} -f {firmware}

The successes and failures are listed in /tmp/firmware/success-disks and /tmp/firmware/failed-disk along with output from each SAS path tried.