delphij's Chaos

选择chaos这个词是因为~~实在很难找到一个更合适的词来形容这儿了……

19 Aug 2013

如何:远程刷 Seagate 硬盘固件

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

上回 说到 谷奥 的一块硬盘坏了,但是忘记说实际上两块硬盘的固件都有已知问题(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 展开,可以得到下面这些文件:


-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,/所在的单一磁盘),这个操作会导致崩溃(但操作本身会成功)。
  • 固件刷写之后不需要重启系统,但为了确认系统能够启动,还是应该重启确认一下。