如何:远程刷 Seagate 硬盘固件

• 本文约 974 字,阅读大致需要 2 分钟 | Hardware | #Seagate | #Firmware | #hard drive | #FreeBSD | #remote management

🚨 警告

刷写硬盘固件时的不当操作可能会导致硬盘无法使用。本人不承担由于使用本文中介绍的内容所导致的任何后果的责任。

📜 历史文件已不具备现实意义

本文章提到的硬件已过时。

上回 说到 谷奥 的一块硬盘坏了,但是忘记说实际上两块硬盘的固件都有已知问题(ST1000DM003-9YN162固件版本CC4D,目前的最新版本是CC4H)。虽然在ticket里提到了这件事,但是remote hand没做升级,想想之后决定还是自己把它远程刷掉好了。

由于刷写不当会导致硬盘无法使用(实际上还是有办法恢复的,但是比较麻烦而且没法在远程做),因此为了以防万一,在执行任何操作之前应备份硬盘上全部数据。由于使用的是graid的镜像模式,因此事实上我们有一份完整备份,故跳过这一步。

接下来要从Seagate网站下载固件。考虑到刷新固件操作的危险性,不知道怎么找这个固件的人可以看到这为止了。

我具体下载的是那张FreeDOS的iso(不是exe格式的那个)。这张ISO是可以引导系统的,用bsdtar将其展开,在其中可以找到一个叫GR-CC4H.ima的文件,这是一个FAT格式的磁盘映像。用下面的命令将其挂到 /cdrom上:

mdconfig -a -t vnode -o readonly -f GR-CC4H.ima
md0
mount -o ro -t msdosfs /dev/md0 /cdrom

我们接下来可以在 /cdrom中找到实际的payload,文件名是lod.zip。还是用bsdtar展开,可以得到下面这些文件:

1
2
3
4
5
6
-rwxr-xr-x  1 delphij  wheel     5654 May 23  2012 GR-CC4H.CFS
-rwxr-xr-x  1 delphij  wheel  1806848 May 23  2012 GRCC4H2H.LOD
-rwxr-xr-x  1 delphij  wheel  1806848 May 23  2012 GRCC4H4H.LOD
-rwxr-xr-x  1 delphij  wheel  1806848 May 23  2012 GRCC4H6H.LOD
-rwxr-xr-x  1 delphij  wheel     2806 May 23  2012 flash-m.bat
-rwxr-xr-x  1 delphij  wheel      363 May 23  2012 model.lst

这里,model.lst是给人看的,而 GR-CC4H.CFS 则是一份加密的对照表,有人已经将其 解密。查表得到,这块硬盘(ST1000DM003-9YN162)对应的固件应该是 GRCC4H2H.LOD

接下来是将固件刷写到硬盘上,首先:

camcontrol fwdownload ada0 -f GRCC4H2H.LOD -s

这一步是模拟操作,如果没问题,去掉 -s 就可以写入了。

这块硬盘的刷写过程总共用了36秒。刷写会导致磁盘下线,接下来CAM子系统会重新发现这块磁盘(此时可以看到固件版本已经变成了新的)。graid会自动在后台进行重建(由于卷的一块磁盘下线,graid会重建整个磁盘)。

一些注意事项

  • 务必确认固件是对的。camcontrol fwdownload并不检查固件的正确性。
  • 刷写固件会导致磁盘下线,因此,如果准备刷写的磁盘是系统中不能缺失的磁盘(例如,如果是UFS/所在的单一磁盘),这个操作会导致崩溃(但操作本身会成功)。
  • 固件刷写之后不需要重启系统,但为了确认系统能够启动,还是应该重启确认一下。