如何:远程刷 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 展开,可以得到下面这些文件:
|
|
这里,model.lst
是给人看的,而 GR-CC4H.CFS
则是一份加密的对照表,有人已经将其 解密。查表得到,这块硬盘(ST1000DM003-9YN162
)对应的固件应该是 GRCC4H2H.LOD
。
接下来是将固件刷写到硬盘上,首先:
camcontrol fwdownload ada0 -f GRCC4H2H.LOD -s
这一步是模拟操作,如果没问题,去掉 -s
就可以写入了。
这块硬盘的刷写过程总共用了36秒。刷写会导致磁盘下线,接下来 CAM 子系统会重新发现这块磁盘(此时可以看到固件版本已经变成了新的)。graid 会自动在后台进行重建(由于卷的一块磁盘下线,graid会重建整个磁盘)。
一些注意事项
- 务必确认固件是对的。
camcontrol fwdownload
并不检查固件的正确性。 - 刷写固件会导致磁盘下线,因此,如果准备刷写的磁盘是系统中不能缺失的磁盘(例如,如果是
UFS
,/
所在的单一磁盘),这个操作会导致崩溃(但操作本身会成功)。 - 固件刷写之后不需要重启系统,但为了确认系统能够启动,还是应该重启确认一下。