SunのNVRAMが干上がった (Original Date: 2000年または2001年)

2014年追加

2014年5月5日

実家の物置からビニール袋に包まれたSPARCstation 20が発掘されました。 詳しい仕様は覚えていませんが、CPUボードが2枚、HDDが2台、メモリも7枚 ささっていました。当時所属の研究室で博士論文の執筆や実験に使っていた私物です。 自家用車に積み込んで500kmほど離れた現在勤務中の大学に移動させて動作確認 したとことろ、10年ぶりの電源投入にもかかわらず、一応は起動しました。 が、やはりNVRAMのバッテリが切れていました。

復活手順をこれから追記していきます。(でも新しくページを作るかもなぁ...)

また巻き込まれた

某学会から帰った翌日、いつものように(^^;;重役出勤すると、 「I東先生が探してました」 とか「伊T研の院生の人が探してました」とかいわれます。 そう言えばPHSにT橋君とM野君から着信があったな〜と思いつつ伊東研に行くと、 夏休みの間電源を切ってあった実験室のSunが立ち上がらないと言います。 今回も問答無用で巻き込まれてました(;_;)

実験室に行ってみると、1台はHDDがスピンアップしないSS20 (HDDを外して軽く振ったらスピンアップするようになりました(^^; そろそろやばそう)、もう一台はNVRAMの電池切れのSS IPCでした。

ど〜しよう?

NMRAMの電池が切れるとSunは自分が何者であるか、全て忘れてしまいます。 今回はブートデバイスの設定もおかしくなっていたらしく、全く立ち上がりません。 とりあえず、「 SunSPARCの干からびたNVRAMを復活させよう計画」 を見ながらNVRAMの設定をデフォルトに戻して、 host idとethernet addressを書き込みました。host idもethernet address もわからないので適当な値です。ブートして見るとちゃんと立ち上がります。 NVRAMの電池切れを理由に廃棄したい程古いマシンですが、 学生実験の倍速化端末*1としては十分です。 電源を入れるたびにhost idとethernet addressを設定するのは嫌なので、 NVRAMを交換する事にしました。

*1 倍速化端末: 最近の若いモン(と言っても3年しか離れてないけど)は WindozeのせいでUNIXに慣れていないのか、作業が遅くて時間内に実験が終らないため、 並列的に作業させるための端末。とりあえずエディタが動けばなんでも十分。 数年前までDECのVT220を使っていた。

アキバへGo!

Sunのサポートに干からびたNMRAMを送ると、干からびたNVRAMのバーコードから host id等を読み取って新品のNVRAMにデータを書き込んで送ってくれると言う 話を聞きますが、結構お金がかかりそうです。 NVRAMの交換からデータの書き込みまでを全部自分でやると、 NVRAM代の6000円程度で済みます。

Sunに使われているNVRAMはSTMicroelectronics のTIMEKEEPER RAMです。SunのアーキテクチャによってNVRAMの種類が違います。 sun4cに使われているM48T02は内蔵しているリチウム電池の容量が小さいらしく、 Sunの電源を切っている時間が長いと割と早く電池が切れてしいます。 M48T08はリチウム電池の容量が大きくなって、 10年程度は電源を切ったままにできるみたいです。 (2014年5月, SPARCstation 20の情報を追記)

sun4cM48T02
sun4dM48T08
sun4mM48T08
sun4m (SPARCstation 20)M48T18
sun4uM48T59Y

データシートを見ると、Ultra用のM48T59YはM48T59と微妙に違います。 M48T59Yを探しましょう。M48T08とM48T18はほとんど同じ仕様ですが、 許容する動作電圧の範囲と書き込みプロテクションが作動する電圧が若干違います。 M48T02とM48T08は秋葉原では 若松通商が扱っています。 M48T59Yを置いてあるかどうかは知りません。私がM48T08を買った時は税抜き 5800円でした。互換品がDallas Semiconductor から発売されていますが、残念ながらM48T02の互換品は、製造中止のようです。 M48T08の写真を示します。 (2014年追記: 今どきはRSOnlineあたりで買えます)

M48T08 (1) M48T08 (2)
若松通商で買ったM48T08 その1若松通商で買ったM48T08 その2

今回NVRAMが干上がったのはIPCなのでアーキテクチャはsun4cです。 M48T02をちょうど秋葉原へ行く棚H君に買って来てもらう事にしました。

NVRAMの交換

棚H君がNVRAMを買って来ました。M48T02も若松通商で5800円でした。 まず、Sunの電源を切って、ケーブル類を抜いて、Sunの箱を開けます。NVRAMですが、 下の写真のバーコードが印刷された山吹色のシールが張ってあるチップです。 下の写真はSPARCstation 20の例ですが、どのSunでもこのチップがあるはずです。

SS20の中 SS20のNVRAM
SPARCstatin 20全体NVRAM
SS20のNVRAM 引き抜いたNVRAM
物置で10年寝ていたSS20のNVRAM。BootPROMが怪しげなんだが??? 引き抜いたNVRAM。基板のICソケットに別のソケットをさして、 そのソケットにNVRAMが挿さっているという構造。STのM48T18

(2014年5月追記)
10年間物置で放置されたSPARCstation 20の交換用NVRAMが届きました。 RSOnlineで注文して、イギリスから取り寄せ、6日で届きました。 今どきはこんなに早いんですね。 上が古いNVRAM、下が新しく届いたものです。パッケージの大きさなどが ちょっと変わっています。古いものは引き抜きを考えたのか、 基板のICソケットに引き手が付いている別のソケットをさして、そこに NVRAMが挿さっていました。

マイナスドライバなどで電池が切れたNVRAMを取り外します。 この時、基板や周りの部品を傷付けないように注意します。 NVRAMには向きがあります。NVRAMの向きを覚えておきましょう。 NVRAMのパッケージのプラスチックに切り欠きか目印の穴がある側が1番ピンです。 この文書の写真に写っているNVRAMは全て左側に切り欠きと目印の穴があります。 また、NVRAMが挿さっているソケットにも同様の切り欠きがあり、 切り欠きがある側が1番ピンです。 NVRAMをソケットに挿す時には、両方の切り欠きが同じ側に来るようにして挿します。

向きを間違えないように注意して、新品のNVRAMをソケットに挿します。 向きを間違えると、NVRAMは確実に死にます。Sunごと死ぬかも知れません。 電源をいれても煙が出ないかを確認するため、 とりあえず箱を閉めないで電源をいれるといいでしょう。

データ書き込み

okプロンプトで、set-defaultsと入力してNVRAMの 値を初期化します。boot-deviceを設定する必要がある場合は 設定します。続いてhost idとethernet addressを設定します。host idと ethernet addressは以下のコマンドで設定します。

値 位置 mkp

値は1バイトの16進数、位置は以下の表のオフセットです。 これらの値を書き込むべき場所は、然るべきメモリアドレスにマップされていますが、 機種/アーキテクチャによって違うので、直接書き込まずにmkpを使います。

書き込んだ値を表示するには、

位置 idprom@ .

とします。全部表示するには、

.idprom

とします。

host idとethernet addressを書き込む位置と意味
位置意味
00常に01。フォーマットを表す。
01host idの1バイト目。機種によって違う。
02ethernet addressの1バイト目。
03ethernet addressの2バイト目。
04ethernet addressの3バイト目。
05ethernet addressの4バイト目。
06ethernet addressの5バイト目。
07ethernet addressの6バイト目。
08製造日の1バイト目。
09製造日の2バイト目。
0a製造日の3バイト目。
0b製造日の4バイト目。
0chost idの2バイト目。
0dhost idの3バイト目。
0ehost idの4バイト目。
0fチェックサム。位置00から0eまでのXOR。

ethernet addressはわからないなら適当でいいでしょう。 他のマシンと重ならないように選んでください。Sunは00:00:7d、00:01:5d、00:03:ba、 00:07:82、00:10:4f、00:10:e0、00:14:4f、00:20:f2、08:00:20のいずれかで 始まります。(2014年5月追記: SPARCstation 20の時代は08:00:20だったようです)

host idの1バイト目は機種によって異なります。 下の表から正しい値を選んでください。 host idの1バイト目以降はわからないなら適当でいいでしょう。 ただし、host idを見てライセンスをチェックしているソフトウェアもあります。 この場合はライセンスファイルなどにhost idが書いてあることがあります。 (2014年5月追記: host idとethernet addressの下位3バイトは同じ値を 使っているようです。また、NVRAMに貼ってある山吹色のラベルに印字されている 16進数6桁がhost idとethernet addressのうちのホスト固有の3バイトです)

製造日は適当でいいらしいです。手元のSunでもちゃんと値が設定されているものと、 0が書き込んであるだけのものがあります。ちゃんと値が設定されているものでも、 フォーマットが判らないのであまり意味が無いです。 (2014年5月追記: 保存されていたSPARCstation 20のidpromの値によると、 製造日は0で埋まっていました)

host idの1バイト目と機種
機種1バイト目の値
SPARCstation 151
SPARCstation IPC52
SPARCstation 1+53
SPARCstation SLC54
SPARCstation 255
SPARCstation ELC56
SPARCstation IPX57
SPARCstation 10, 2072
SPARCstation classic, LX 4, 5, Voyager, Ultra1, Ultra5 80
SunBlade 10083

上の2つの表を見ながらhost idとethernet addressを入力します。 今回はhost idもethernet addressもわからなくなってしまったので、 すぐ隣にあった同時購入のIPXのhost id、ethernet addressに1を足した値にしました。

ok 01 00 mkp
ok 52 01 mkp
ok 08 02 mkp
ok 00 03 mkp
ok 20 04 mkp
ok 1a 05 mkp
ok 18 06 mkp
ok a6 07 mkp
ok 20 0c mkp
ok 99 0d mkp
ok c2 0e mkp

チェックサムは00から0eまでの各バイトのXORです。手で計算してもいいのですが、 面倒なので以下の呪文で自動で計算して書き込みます。

ok 0 f 0 do i idprom@ xor loop f mkp

書き込みが終ったらbootして、日付を設定します。最初これを忘れていました。

NMRAMが干上がる前の対策

NMRAMの電池切れはある日突然やって来ます。今回のようにhost idやethernet address がわからなくなる前にバックアップをとっておきましょう。 Sunの電源をいれた時のメッセージをメモしておいてもいいですが、 面倒なので以下のように入力します。

の出力をファイルなどに保存しておきます。万一Sunが立ち上がらなくなっても 読めるように、別のアーキテクチャのマシンに保存したり、印刷したりして おきましょう。

リンク

同じような事をしている人がいっぱいいます。

お断り

この文書に登場する人物は全て仮名です。本名が推測できる場合でも、 仮名は仮名です(^^;;

この文書の中でNVRAMを交換しているのはSPARCstation IPCですが、 交換する時に写真を撮れなかったので、写真は都合により別の物を使っています。 そのうち、IPCで写真を撮り直すかも知れません。

また、この文書の内容の正しさについては、正確を期していますが無保証です。 この文書の通りに作業した結果生じた損害、作業中の事故その他については、 作者は責任を負いません。作者はこの文書の手順で作業を行いましたが、 自己責任で作業して下さい。