I have recently purchased several models of HGST HDD and SSD media and decided to synchronize their firmware versions, sharing the achieved results. I hope my following findings will save some time for the fellas attempting the same noble quest.
I wasn't able to find firmware upgrades on the HGST website, so the quest to find the recent version became more interesting. Having some of the drives with newer firmware helped to further narrow the search, and eventually, I was able to find a source that had not only HGST firmware but some other brands as well.
The whole process was done on SuperMicro servers running CentOS 7.5 x86_64. In my case, I had two servers, one with the BPN-SAS2-826A backplane connected to LSI 9201-16i HBA (SAS2116), and the other with the BPN-SAS3-216A backplane connected to 3 LSI 9300-8i (SAS3008) HBAs.
You will need the sg3_utils package:
Identify the drives installed by running the lsscsi command:
HGST has specific names for the firmware files, and the larger chunk of the time was spent on finding the corresponding names for the models I own:
I was able to find these by googling the firmware revision versions I had on my drives and stumbled across a file named Drive_Firmware_1.13.tgz, apparently from a three letter brand and that file had lots of other models, with the model-firmware.bin pairs listed inside the fwupdate.ini file. Hint: search for "Drive Firmware Package Version 1.13 Release Notes" then browse around the pdf.
Next step: checking the official drive documentation for firmware update mechanisms:
https://www.hgst.com/sites/default/files/resources/Ultrastar_7K4000_SAS_Spec_V1.8.pdf
https://www.hgst.com/sites/default/files/resources/Ultrastar_SSD400S_SAS_V2.0.pdf
https://www.hgst.com/sites/default/files/resources/US_SSD800MH.B_1600MM_1600MR_ProdManual.pdf
I was able to confirm that the above models support SCSI firmware update operations, so the rest was easy:
Make sure to address the drive by its /dev/sg?? name, not /dev/sd??, otherwise the operation will fail.
After the command completes, you can confirm the successful update by using the smartctl command, in my case:
Note that the new firmware is not active until you reboot the server.
I also had some vendor-locked drives (HITACHI HUS72404CLAR4000, the branded version of the HGST HUS724040ALS640), and unfortunately, the same procedure failed for them:
I wasn't able to find firmware upgrades on the HGST website, so the quest to find the recent version became more interesting. Having some of the drives with newer firmware helped to further narrow the search, and eventually, I was able to find a source that had not only HGST firmware but some other brands as well.
The whole process was done on SuperMicro servers running CentOS 7.5 x86_64. In my case, I had two servers, one with the BPN-SAS2-826A backplane connected to LSI 9201-16i HBA (SAS2116), and the other with the BPN-SAS3-216A backplane connected to 3 LSI 9300-8i (SAS3008) HBAs.
You will need the sg3_utils package:
Code:
yum install sg3_utils
Code:
lsscsi -sig
Code:
HUS724040ALS640 MPGNA3A0.bin
HUSSL4010ASS600 A0GNA182.bin
HUSSL4010BSS600 SRGNA1D0.bin
HUSMM1680ASS200 SPGNA204.bin
Next step: checking the official drive documentation for firmware update mechanisms:
https://www.hgst.com/sites/default/files/resources/Ultrastar_7K4000_SAS_Spec_V1.8.pdf
https://www.hgst.com/sites/default/files/resources/Ultrastar_SSD400S_SAS_V2.0.pdf
https://www.hgst.com/sites/default/files/resources/US_SSD800MH.B_1600MM_1600MR_ProdManual.pdf
I was able to confirm that the above models support SCSI firmware update operations, so the rest was easy:
Code:
# sg_write_buffer -vvvvv -m 5 --in SRGNA1D0.bin /dev/sg15
found bsg_major=248
open /dev/sg15 with flags=0x802
tried to read 8388608 bytes from SRGNA1D0.bin, got 1114112 bytes
will write 1114112 bytes
Write buffer cmd: 3b 05 00 00 00 00 11 00 00 00
Write buffer parameter list (first 256 bytes):
11 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
48 69 74 61 63 68 69 20 47 6c 6f 62 61 6c 20 53
74 6f 72 61 67 65 20 54 65 63 68 6e 6f 6c 6f 67
79 20 49 43 33 35 4c 78 78 78 55 78 44 33 32 31
30 2d 30 20 4d 69 63 72 6f 63 6f 64 65 20 28 43
29 20 43 6f 70 79 72 69 67 68 74 20 48 69 74 61
63 68 69 20 43 6f 72 70 2e 20 32 30 30 33 2c 20
32 30 30 34 2e 20 41 6c 6c 20 72 69 67 68 74 73
20 72 65 73 65 72 76 65 64 2e 20 20 55 53 20 47
6f 76 65 72 6e 6d 65 6e 74 20 55 73 65 72 73 20
52 65 73 74 72 69 63 74 65 64 20 52 69 67 68 74
73 20 2d 20 55 73 65 20 64 75 70 6c 69 63 61 74
69 6f 6e 20 66 6f 72 20 64 69 73 63 6c 6f 73 75
72 65 20 72 65 73 74 72 69 63 74 65 64 20 62 79
20 47 43 41 20 41 44 50 20 53 63 68 65 64 75 6c
duration=6747 ms
After the command completes, you can confirm the successful update by using the smartctl command, in my case:
Code:
smartctl -i /dev/sgXX | grep Revision
I also had some vendor-locked drives (HITACHI HUS72404CLAR4000, the branded version of the HGST HUS724040ALS640), and unfortunately, the same procedure failed for them:
Code:
# sg_write_buffer -vvvvvv -m 5 --in=MPGNA3A0.bin /dev/sg4
found bsg_major=248
open /dev/sg4 with flags=0x802
tried to read 8388608 bytes from MPGNA3A0.bin, got 1179648 bytes
will write 1179648 bytes
Write buffer cmd: 3b 05 00 00 00 00 12 00 00 00
Write buffer parameter list (first 256 bytes):
12 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff
48 47 53 54 2c 20 61 20 57 65 73 74 65 72 6e 20
44 69 67 69 74 61 6c 20 43 6f 6d 70 61 6e 79 20
49 43 33 35 4c 78 78 78 55 78 44 33 32 31 30 2d
30 20 4d 69 63 72 6f 63 6f 64 65 20 28 43 29 20
43 6f 70 79 72 69 67 68 74 20 57 65 73 74 65 72
6e 20 44 69 67 69 74 61 6c 20 43 6f 72 70 2e 20
32 30 31 32 2c 20 32 30 31 32 2d 32 30 31 33 2e
20 41 6c 6c 20 72 69 67 68 74 73 20 72 65 73 65
72 76 65 64 2e 20 20 55 53 20 47 6f 76 65 72 6e
6d 65 6e 74 20 55 73 65 72 73 20 52 65 73 74 72
69 63 74 65 64 20 52 69 67 68 74 73 20 2d 20 55
73 65 20 64 75 70 6c 69 63 61 74 69 6f 6e 20 66
6f 72 20 64 69 73 63 6c 6f 73 75 72 65 20 72 65
73 74 72 69 63 74 65 64 20 62 79 20 47 43 41 20
duration=71 ms
write buffer: Descriptor format, current; Sense key: Illegal Request
<<<Sense data overflow>>>
Additional sense: Parameter value invalid
Descriptor type: Information
>> descriptor too short
00 00 00 00 00 00 00 00 00 00
Descriptor type: Sense key specific: Field pointer
Error in Data byte 0
Descriptor type: Field replaceable unit
code=0x0
Descriptor type: Block commands
Incorrect Length Indicator (ILI) clear
Descriptor type: Vendor specific [0x80]
f1 30
Descriptor tybad field in Write buffer cdb
Last edited: