SL-C3100のHDD復旧手順

後日、SL-C3100の完全復旧手順をまとめてみた。
OpenBSDを入れ損なった際にHDDまるごと削除して、起動時はOpenBSDブートローダが立ち上がるようになってしまった。HDDは空っぽなんだから本体フラッシュが書き換えられてるんだろうってことで、復旧すりゃいいと思ったらNANDバックアップ取ってなかった(汗)
仕方ないのでSL-C3100の本体ソフトウェアROMアップデート(1.02JP)で本体フラッシュを復旧してみた。OpenBSDブートローダは立ち上がらなくなったものの、起動時にHDD1 Error!!が出て立ち上がらない。HDDが空っぽだからか。
てな訳で、DとBを押しながら電池ぶた内のリセットボタンを押した後に電源を入れてメンテナンスカーネルを立ち上げる。rootでログインして「fdisk /dev/hda」でパーティションを正しく切り直す。pコマンドで現在のパーティション状態を確認。dコマンドでパーティションを全て削除。nコマンドでプライマリパーティション1〜3を作成(n,p,1,,20,n,p,2,,40,n,p,3,,,の順に操作)。tコマンドでパーティション3をWin95 FAT32 (LBA)に変更(t,3,cの順に操作)。最後にwコマンドで書き込んでfdiskを終了。ちなみにSL-C3100パーティション構成は以下の通り。

Disk /dev/hda: 16 heads, 63 sectors, 7936 cylinders
Units = cylinders of 1008 * 512 bytes

   Device Boot    Start       End    Blocks   Id System
/dev/hda1             1        20     10048+  83 Linux
/dev/hda2            21        40     10080   83 Linux
/dev/hda3            41      7936   3979584    c Win95 FAT32 (LBA)

あとは「mkfs.ext2 -j /dev/hda1」、「mkfs.ext2 -j /dev/hda2」でパーティション1と2をext3で初期化。「mkfs.vfat -F 32 /dev/hda3」でパーティション3をFAT32で初期化。これで完全消去の廃棄を行えばちゃんと起動するものの再起動の際に別のエラーが出て立ち上がらないので各パーティションに最低限必要なファイルやディレクトリを作ってやる。
2008/05/16追記:別に作らなくてもSL-C3100の本体ソフトウェアROMアップデート(1.02JP)に含まれている hdimage1.tgz を / で展開してやれば復元できることが判明(汗)

mount -t ext3 -o noatime /dev/hda1 /hdd1
mount -t ext3 -o noatime /dev/hda2 /hdd2
mount -t vfat -o noatime,quiet,umask=000,iocharset=utf8 /dev/hda3 /hdd3
tar zxvf /mnt/card/hdimage1.tgz -C /
tar zxvf /hdd1/.sys/hdimage2.tgz -C /
shutdown -r now

てな訳でSDカードにhdimage1.tgzを入れてる場合は上記のように作業すればHDD内容を完全復旧できる。以下の作業は不要だけど /hdd1/.sys/hdlist1.dat のファイル構成について調べられたので参考に置いておこう。

mount /dev/hda1 /hdd1
mount /dev/hda2 /hdd2
mount /dev/hda3 /hdd3
mkdir /hdd1/.sys
mkdir /hdd1/lost+found
mkdir /hdd2/.sys
mkdir /hdd2/lost+found
mkdir /hdd3/Documents

/hdd3/DocumentsディレクトリにはBook_Files、Image_Files、Install_Files、Movie_Files、Music_Files、Template_Files、Text_Files、Web_Filesディレクトリがあるので好みに応じて作っておくのが吉。Web_Filesディレクトリにはブックマークが予めいくつか入っているが、NetFrontを起動してブックマークかページメモの操作をすれば自動的にディレクトリが作成されるので作らなくても良いカモ。
さらに/hdd1の.sysディレクトリには/hdd2と/hdd3を復旧するための圧縮ファイルも必要なので、次の手順で作成する。

tar cvf - -C / hdd2 hdd3 | gzip - > /hdd1/.sys/hdimage2.tgz
find /hdd1 | gzip - > /hdd1/.sys/hdlist1.dat

hdlist1.datは/hdd1ディレクトリのファイルリストをgzip圧縮したものなんだけど、元々SL-C3100に入っていたものにはhdimage2.tgzの部分の末尾にだけ、[]で囲まれた謎の数値とhdimage2.tgzのファイルサイズが付記されている。上記の例ではそんなもの付けてないけど、とりあえず動いているので無くても大丈夫かと。(実際、/hdd2と/hdd3を空にした状態で完全消去の通常を行ったら、/hdd2と/hdd3がhdimage2.tgzの内容で復旧されたので)
以下、元のhdlist1.datをgzip解凍した中身。

/hdd1
/hdd1/lost+found
/hdd1/.sys
/hdd1/.sys/hdimage2.tgz [111715761] 2713

あとは「shutdown -h now」で終了させて電源が落ちたら、電池ぶた内のリセットボタンを押した後に電源を入れてやれば普通に立ち上がってくれるハズ。