今どきのLinuxで/dev/hdaからブートする方法

DynaBook SS PORTEGE 3000CTという大分古いノートPCにUbuntuの8.04 LTS Serverをインストールした。もう7〜8年位通電していないので、専用フロッピードライブはエラーで使えないし、外付けCDドライブは無くなっている。1つあるUSBも動かないし、PXEブートも出来ないから、別のマシンでHDDにインストールしてから、HDDを本体に組み込む方法しかない。手元にあった、これもジャンク化している東芝MK2016GAPという2.5”ドライブを使うことにした。

仮想マシン上で、MK2016GAPと全く同じ大きさの仮想ディスクでインストールしてから、中身をMK2016GAPへコピーして、それを3000CTへ組み込んだ。BIOSからGRUBの起動までOK。initramfsの途中でルートファイルシステムをマウントするところで落ちる。ルートファイルシステムが見つからない、というメッセージが出る。initramfsが動いているとい言うことはカーネルをHDDから読み出して動いているわけなので、HDDを認識してくれても良いものだが。

調べると3000CTではHDDをsdaではなくhdaとして認識していることが分かった。仮想マシン上ではsdaとして認識していたHDDなので、その部分をhdaに変える必要がある。関連するファイルを変更してinitramfsを再構築して再挑戦したが、結果は同じ。

どうも最近のUbuntuではhdaからのブートが自動認識では出来ないようだ(素直にCDからインストールすれば問題ないのかもしれないが)。とにかくinitramfsの状態でhdaを認識させなければならない。initramfsのinitを読んでいくとscripts/functionsの中にparse_numericという関数があり、ブートパラメータで

root=M:m

という表現でルートデバイスを指定できることがわかった。(どうもliloとの互換性を保つための機能らしい。)ここで“M”はデバイスのメジャー番号、“m”はマイナー番号。ルートファイルシステムが入っているのはhda1なのでメジャー番号は“3”、マイナー番号は“1”となるから、GRUBのブートオプションの指定で、rootの指定を

root=3:1

に変更したら無事にブート出来た。
あとは /boot/grub/menu.lst の“root=UUID=xxxxxxxx”というところを“root=3:1”に変更すればOK。

余談だが、このDynaBook SS PORTEGE 3000CTはモバイルPentium 233MHz、主記憶は64MBというスペックで当時Windows 2000を動かしていた。今にして思えばW2Kがいかに軽かったか。逆を言えば今のLinuxがなんと肥大化したことか。今回はUbuntu Serverと(GNOMEは搭載しないで)Xウィンドウ+FVWM+xtermだけインストールしたのでウィンドウ環境でも40MB位しか消費していないが、試しにUbuntu Desktopもインストールしたところ、スワップの嵐となり最初のウィンドウ画面に到達することさえ出来なかった。(1時間も放置すれば最初のウィンドウ画面まで到達できるかも知れないが、起動に1時間もかかるPCでは使い物にならない。)