LILOによる起動失敗の対処をLive Linuxで行う 99/05/17 0.これは99/05/17にsc210が起動できなくなった時の対処法をまとめたもの。やりたい ことは,「起動しなくなったマシンをLive Linuxで起動し,ハードディスク上のLILO設定 ファイル(/etc/lilo.conf)を修正して,新しいLILOをフロッピーのMBR(Master Boot Record)に書き込む」ということ。その手順は以下の通り。なお,この時/etc/lilo.conf の中身のどこに問題があったかは後述する。 1.CD-ROMドライブにLive LinuxのCD-ROMを入れておく。 2.Live Linuxを使用するためCD-ROMブートをするようBIOSの設定を行う  sc210(DELL Dimension XPS R400)の場合は以下の通り。 (1)マシン起動時に(画面表示にある通り)「Del」キーを押してBIOS設定画面に入る (といってもメモリがでかいし,おまけにAdaptec BIOS = SCSIホストアダプタのBIOS もあるしで入るまでに1分はかかるけど) (2)メニューのうち「Boot」を選んで,defaultでは First removable media Second Hard Drive Third ATAPI CD-ROM Fourth Network というのを First ATAPI CD-ROM Second removable media Third Hard Drive Fourth Network と「ATAPI CD-ROM」を1番にもってくる。(画面表示にあるとおり)「ATAPI CD-ROM」に カーソルをもってきて「+」キーを押せば順位が上がるよ。 (3)メニューの「EXIT」を選んで「設定を保存するか?」にはyesと答えてBIOS設定画 面を終了する。 3.Live LinuxをCD-ROMからブートする  2.のBIOS設定を終えてBIOSを抜けると(CD-ROMブートが優先される設定になったの で)勝手にLive LinuxがCD-ROMからブートする。DELL Dimension XPS R400の場合は何の 問題もなく(なんかエラーっぽいメッセージも1行くらいは出ていたが)loginプロンプ トが出た。 4.ユーザー名rootでログイン  ユーザー名rootでログインする(パスワードはなし(笑))。ちなみにrootのシェルは bashである。ちなみに,tcshというユーザー名で入ると権限的にはrootと同じで,シェル がtcshになるとのこと。もひとつちなみに一般ユーザーとして入りたい場合(例えば他の マシンからネットワーク経由で入る場合rootでは入れない)はguestというユーザー名を 使う(これまたパスワードはなし)。 5.mount,lilo.confの修正,liloコマンドの実行その他  まずルートパーティションをマウントするためのマウントポイント(ここでは/mnt2と する)を作る。/mntというディレクトリが最初からあって,その下にはfloppyなどのディ レクトリが用意されているので,敢えて/mntという名ではなく/mnt2としたわけ。   # mkdir /mnt2 次にルートパーティション(sc210の場合/dev/sda5やった)を/mnt2にマウントする。   # mount -t ext2 /dev/sda5 /mnt2 ここでAdaptec AHA-2940UW用のドライバが初めて読み込まれて(moduleになっとんや な),/dev/sda5がマウントされる。 # cd /mnt2/etc としてSCSIハードディスク上のシステムのetcに移動し,例えば   # mule lilo.conf でなどとしてlilo.confの中身を修復する(修正前に覚えとしてバックアップはとってお こう)。Live Linuxの凄いところはmuleが平気で使えてしまうところ。で,lilo.confを 修正したらこの設定によるLILOをフロッピーに書き込むべく,liloコマンドを実行したい ところだが,これだけでは実はエラーが出てうまくいかない(後述)。そこで # cd / # mv boot boot.org # ln -sf /mnt2/boot boot として,/boot -> /mnt2/bootというsymbolic linkを張り,/bootの下にはSCSIハード ディスク上のLinuxシステムの/boot(/mnt2/boot)の中身が来るように細工をする。これ はシステム情報を,SCSIハードディスクからLinuxを起動した時の情報と詐称(?)して いる細工なのではないかと俺は勝手に思っているが,よくは分かっていない。とにかくこ の細工を施しておいて,おもむろにliloコマンドを実行する。DOS/Vフォーマット(でも Linuxフォーマットでもよいけど)のフロッピー(ライトプロテクトは外しておくこと) をFDドライブに入れ,default(/etc/lilo.conf)と異なる設定ファイルを使用する時に 使う「-C」オプションを使って   # lilo -C /mnt2/etc/lilo.conf   Added linux *  ← (これはちゃんとFDに書き込んだよ,というメッセージ) Added linuxold  ← ( 同上 ) とする。これでフロッピーへのLILO書き込み終了。めでたしめでたし。  ちなみに上記の/bootに関する細工をやらないとliloコマンドを実行したときに   geo_query_dev HDIO_GETGEO (dev 0x1600): Invalid argument というエラーメッセージが出てきて,フロッピーへのLILOの書き込みが行われない (Added云々というメッセージが出ないし,そのFDを使って起動しようとしても「OSが見 つからない」などと言われてマシンが起動しない)。これで困り果てて,色々試行錯誤を してたどりついたのが上記の/bootの細工。そもそもlilo.confの記述中に,/boot/map, /boot/boot.b,/boot/vmlinuz,/boot/initrdなどが登場しているので,/bootの下のファ イルを起動させたいSCSIハードディスク上のLinuxシステムのものに合わせてやらんとい かんのかな,と考えた次第。でも3時間くらい悩んだ(苦笑)。 6.LILOフロッピーを使って起動  Live Linuxをshutdownし,BIOSの設定でブートのデバイスの順を元の通りの戻して, LILOフロッピーをFDドライブに入れて起動する。新しく作ったLILOフロッピーを使えば ちゃんと起動できました。よかったよかった。 −−−−−−−−−− ここより雑多メモ −−−−−−−−−− ●今回sc210が起動しなかった原因  99/05/07まではIDEハードディスク(/dev/hda)には古いLinuxシステム,古い/home, 古い/work1がまだ残っていた(従って多数のパーティションに切ってあった)が,GPSデ ータでSCSIハードディスクが一杯になったため,/dev/hdaを再フォーマットし, /dev/hda1の1パーティションのみとし,/work1としてマウントする大勢に変更した。と ころが/etc/lilo.confの方は boot=/dev/fd0 map=/boot/map install=/boot/boot.b prompt timeout=50 image=/boot/vmlinuz label=linux root=/dev/sda5 initrd=/boot/initrd read-only append="mem=384M" image=/boot/vmlinuz.old label=linuxold root=/dev/sda5 initrd=/boot/initrd read-only append="mem=384M" image=/boot/vmlinuz label=linuxhda root=/dev/hda5 initrd=/boot/initrd read-only append="mem=384M" となっており,ラベル「linuxhda」(←IDEハードディスク内にあるシステムをブートさ せるための名残)のところにはroot=/dev/hda5なんぞと書いてあって,これがシステムの 実態と食い違っていた(この時点で/dev/hda5などない)。それでおそらくLILOによる起 動がうまくいかなかったのではないかと思う。ちなみに症状としては   LI で表示が止まるというもの。  で,このlilo.confから,ラベル「linuxhda」に関する部分をごっそり削除したという のが修正の中身。 ●Live Linuxの利点 あらゆるコマンドが使える。muleまで使える。(←重要!) 何もしなくても日本語キーボードがそのまま使える(←重要!) ●今回はRedHat 4.2のブートディスク+補助ディスクも試みたが,これで起動した場合  /dev/fd0 というデバイスファイルがないため,フロッピーへのLILO書き込みができなかった。でも フロッピーだけでなく/devの下には殆どファイルはなかったぞ。ちなみにフロッピーのマ ウントは例えば   # mount -t msdos /dev/fd0 /mnt/floppy (←ここでは/dev/fd0) とするとあっさりとできてしまった。お,やっぱり/dev/fd0ってあるんかな思い,mount 状況を表示させてみると /tmp/fd0 on /mnt/floppy type msdos (rw) (←この表示では/tmp/fd0) と/tmp/fd0となっていて,/dev/fd0というデバイスファイルはやっぱりないんか,と狐に つままれた気持ちになる。 ●Slackwareの緊急フロッピーではなぜか起動しなかった。なんでやろ?