「Write.img」まで解凍されずに再起動して、ファームウェア更新が失敗する原因について教えてください。

ファームウェア更新が失敗する理由はメモリ不足です。
/tmp ディレクトリは tmpfs ファイルシステムになっているため/tmp ディレクトリ以下にファイルを作成すると、「作成したファイルサイズ+α」のメモリを消費します。

また, お客様が作成されたアプリケーションや追加インストールしたアプリケーションが POSIX セマフォや POSIX メッセージ・キュー、POSIX 共有メモリを使用している場合、当該アプリケーションが終了時にそれらを明示的に削除していなければ、それらの分だけメモリが消費されたままになります。

System V セマフォ/System V メッセージ・キュー、 System V 共有メモリについても同様です。

GX のファームウェア更新の手順の概要は下記のようになります。
/tmp 以下に write.img ファイルを展開しますが、このとき write.img を保存できるだけの空きメモリがないと、その時点でファームウェア更新が異常終了します。

1. firm コマンドでファームウェア更新を実行する
2. firm コマンドがシステムの停止処理を開始し, 順次システム・サービスを停止する
→ 順次システム・サービスを停止することで, メモリの空き容量を確保する
3. システムの停止スクリプト内でファームウェアファイルを展開し,
フラッシュメモリの所定の位置に所定のバイナリ・ファイルを書き込む

「手順 2.」の段階でお客様が作成/追加インストールしたアプリケーションが

(1) 終了しなかった
(2) /tmp ディレクトリ以下に作成したファイルを削除しなかった
(3) 作成した POSIX セマフォや POSIX メッセージ・キュー、POSIX 共有メモリ
を削除しなかった
(4) 作成した System V セマフォや System V メッセージ・キュー、System V 共有メモリ
を削除しなかった

のケースが起きた場合, 十分な空きメモリが確保できずに /tmp 以下への write.img ファイルの展開に失敗し、ファームウエア更新が異常終了します。

「2. firm コマンドがシステムの停止処理を開始し, 順次システム・サービスを停止する」には、下記のサービスの停止も含まれます。

* syslog サービス
* ssh サービス

そのため、firmコマンドの失敗の確認にはシステム・ログは使用できません。
また、SSH ログインを行って, firm コマンドによるファームウェア更新を開始した場合、「3. ファームウェアファイルを展開し, フラッシュメモリの所定の位置に所定のバイナリ・ファイルを書き込む」前に SSH 接続が解除されます。

firmコマンドが成功したかどうかを判断するには、お客様独自のファームウェア・ファイルの作成時に
お客様独自のバージョン番号を設定いただき、システムの再起動後にそのバージョン番号が更新されたか否かで判断していただく必要があります。