最近、Seagate HDDのファームウェア不具合が世間をお騒がせしています。
Seagateのページには
「故障回収品を解析した結果、今回の問題が故障を引き起こすリスクが低いので現状のままでも使用しても問題ない。しかし、顧客満足度向上の一環として、新しいファームウェアを用意しました。」
と書かれています。

Seagateとしては、ファームウェアアップデートは失敗する危険性を伴いますので、できればやって欲しくないのかもしれません。
(あくまで自己責任ということなのかもしれません。)
不安な方も多いでしょうから、まず我々が人柱となるべく、ファームウェアのアップデートをやってみました。

Seagate社の推奨手順では、ダウンロードしたイメージをCD-Rに書き込み、そのメディアから起動してファームウェアを更新します。 そのままでもいいのですが、利便性を考え、今回は、USBメモリにCD-R内のツールをコピーして、ファームアップデートを実行しました。

また、対象HDDのみを確実にアップデートするために、コンパクトで持ち運びが容易なAtomPC(D945GCLF2)にHDDをつないで、ファームウェアアップデートを行いました。

以下、手順を説明します。

Image

A) DOSブートするUSBメモリーの作成

まず、LinuxがインストールされたPC上で、DOSブートするUSBメモリーを作成します。 今回は、Debian上で作業を行いました。
Boot Disk Create USB に詳細な作業手順が記載してありますので、それに従います。

1) makebootfatのインストール

DOSブートするUSBメモリーを作成するために、 makebootfatをダウンロード、Linux PCにインストールします。

$ mkdir somewhere
$ cd somewhere
$ gzip -dc makebootfat-1.4.tar.gz | tar xvf -
$ cd makebootfat-1.4
$ ./configure
$ make

2) FreeDOSのダウンロード

fdbasews.isoをダウンロードし、ループバックマウントします。(類似のファイル名が沢山ありますのでご注意下さい。fdbasecd.iso (8MB)ではなくfdbasews.iso (49MB)が必要です。)

# mount -o loop fdbasews.iso /mnt
# ls /mnt

3) 一時ディレクトリにツールをコピー

作業用ディレクトリーを作成し、そこに必要なファイルを一時的に格納します。

# mkdir /tmp/fs-root
# cp /mnt/freedos/setup/odin/command.com /tmp/fs-root/
# cp /mnt/freedos/setup/odin/kernel.sys /tmp/fs-root/
# cd /tmp
# unzip /mnt/freedos/packages/src_base/kernels.zip
# cp source/ukernel/boot/fat12.bin .
# cp source/ukernel/boot/fat16.bin .
# cp source/ukernel/boot/fat32lba.bin .
# cp /usr/lib/syslinux/mbr.bin .

4) syslinuxのインストール

# apt-get install syslinux

5) FreeDOSをUSBに書き込む

USBメモリーを挿入し、デバイス名を確認します。 試したPCでは、以下のように/dev/sdbでした。

# dmesg
usb-storage: device found at 6
usb-storage: waiting for device to settle before scanning
scsi 9:0:0:0: Direct-Access     Kingmax  USB2.0 FlashDisk 1.00 PQ: 0 ANSI: 2
sd 9:0:0:0: [sdb] 2017280 512-byte hardware sectors (1033 MB)
sd 9:0:0:0: [sdb] Write Protect is off
sd 9:0:0:0: [sdb] Mode Sense: 23 00 00 00
sd 9:0:0:0: [sdb] Assuming drive cache: write through
sd 9:0:0:0: [sdb] 2017280 512-byte hardware sectors (1033 MB)
sd 9:0:0:0: [sdb] Write Protect is off
sd 9:0:0:0: [sdb] Mode Sense: 23 00 00 00
sd 9:0:0:0: [sdb] Assuming drive cache: write through

もし、自動的にマウントされてしまっていたら、 アンマウントします。

# mount
/dev/sdb1 on /media/usbdisk type vfat \
(rw,noexec,nosuid,nodev,quiet,shortname=mixed, uid=1000, gid=1000, umask=077, iocharset=utf8)
# umount /media/usbdisk

今回は/dev/sdbでしたが、PCの構成によってデバイス名が変わりますのでご注意下さい。これを間違えると、HDDの全ての内容が失われてしまう可能性もあります。

USBメモリーへ書き込みます。

# somewhere/makebootfat -o /dev/sdb -E 255 -1 fat12.bin \
  -2 fat16.bin -3 fat32lba.bin -m mbr.bin /tmp/fs-root

以上で、DOSブートするUSBメモリーの完成です。

B) ファームウェア更新用CDイメージのダウンロード

Seagate HDDのファームウェアは、型番によってダウンロードすべきファイルが異なります。 今回試してみたのはHDDは以下の製品です。

Barracuda 7200.11 750GB ST3750330AS Firmware SD15

このドライブ用のファームウェアは、このページからダウンロードできます。

本来ならダウンロードしたISOファイルをループバックマウントして中身を取り出したいのですが、このISOファイルはループバックマウントしても中身が見えないように細工がしてあるようです。仕方が無いので、いったんCDに焼き、CDからDOSをブートして中身をUSBにコピーすることにします。 (もっといい方法がありましたら、ご連絡頂けると助かります。)

ISOイメージをCD-Rに焼く手順は省略します。

C) CD-Rの内容をUSBメモリーへコピー

Image

AtomPC、D945GCLF2上でCD-Rの内容をUSBメモリーへコピします。 作成したUSBメモリーと、ファームウェア更新プログラムを書き込んだCD-RをセットしたUSB接続の光学ドライブを接続します。 「USB光学ドライブ」からブートした時に、 USBメモリーがDOS上からドライブとして認識するような設定を行ないます。

具体的に D945GCLF2 では、BIOSメニューの Boot から以下の設定を行ないました。

Boot Device Priority	      <CD/DVD ROM Drive> 高
			      <Hard Disk Drive> 低

USB Boot		      <Enable>
Boot USB Devices First	      <Disable>
USB Mass Strage Emulation Type <All Fixed Disc>

準備したUSBメモリーを装着して、USB光学ドライブから起動します。アクセスランプの点灯状態などから「どこから立ち上がっているか?」を
確認すると良いでしょう。

そうすると、次の様な画面が表示されます。

Image

F10を押してドキュメント表示を終了させて、CTRL-Cを押して FLASH.EXEプログラムを終了させると、DOSプロンプトが表示されます。

今回の構成、設定ではドライブレターは以下のようになりました。

A: 光学ドライブ(CD-R)
B: A: の交換用
C: USBメモリー
D: RAMDISK(A:から動的に生成、展開)

D:ドライブ上に展開されたファイルをUSBメモリにコピーするためにコマンドプロンプトから以下を実行します。

D:\> copy *.* c:

以上で、Seagateのファームアップデートツールが入ったUSBメモリの完成です。

D) USBメモリーからのブート

確認のためUSBメモリーから再起動してみます。現在の日時の入力を求められますので、Enterを押して先に進みます。 DOSプロンプトが表示されれば成功です。USBメモリーがC:ドライブとして認識されるはずです。

いったん電源を切ります。

E) ファームウェア更新作業の開始

Image

HDDを接続し、電源を入れます。BIOS設定が、HDDからではなく、USBメモリーから起動するようになっていることを確認の上、D945GCLF2を再起動します。

C:\> dir

DIRコマンドを実行するとFLASH.EXEが存在するはずです。

C:\> FLASH

FLASHコマンドを実行すると次の様な画面が表示されます。

Image

対象HDDの型番に応じて、a,b,cのいずれかのキーを押すことで、ファームウェアが更新されます。終了すると自動的に電源が切れます。(hit any keyの後)

sキーを押すと、アップデートツールが対象としているHDDが存在しているかどうかを確認することができます。

sキーで対象HDDを確認した後、a,b,cのいずれかのキーでアップデートを実行すると良いでしょう。

まとめ

Seagte HDDのファームアップデートを試みました。

今回の我々の方法は普通のやり方に比べ次のような特徴があります。

  1. SeagateのCDイメージから、USBメモリにアップデートツールをコピーして使用しています。
  2. 対象をHDDを取り外し、コンパクトで持ち運びが容易なAtomPC(D945GCLF2)につないで、アップデートを行っています。

1. の方法を用いることにより、アップデート時間が短縮され、作業自体がお手軽になります。
2. は、ファームウェアアップデートを行いたいHDDのみを確実にアップデートするためです。
Seagateのツールでは、物理的に接続されている全てのHDDのファームウェアが更新されてしまいますし、RAIDカードなどを経由した更新はできませんので、その場合は、HDDの配線先を一時的にマザーボードのSATAコネクタに変更しなければなりません。

たくさんのサーバがある場合等は、いちいち配線換えを行うよりも、いっそのことコンパクトなPCを現地に持ち込んだほうが安全かつ簡単であろうとの判断からAtomPCを用いることにしたのです。

弊社取り扱いのSupermicro製のサーバーシャーシーの場合、HDDトレイ方式で一切のネジを外さずに交換が可能です。
サクッと外してサクッと元に戻せるので時間が節約できます。

ご参考になれば幸いです。