Last Modiffied: 25 Mar 2003
ブートローダの起動に失敗した場合の対処方法

1.はじめに

■はじめに

LinuxのブートローダにLILO(LInux LOader)を使用している場合、カーネルを再構築した後や、システムにハードディスクを追加した後など、LILOが "LI" とか "L" とだけ表示されて、システムが起動できなくなる場合があります。

これはLILOがカーネルを読み込む時に、ファイルシステムを通さずにハードディスクの物理的なセクタを直接アクセスするという方法をとっていますが、カーネルの再構築などでセクタアドレスが変更になった場合に、 "lilo" コマンドを実行してLILOの再インストールを行なわなかったことが原因となります。

ここでは、ブートローダの起動に失敗する原因について簡単に説明し、LILOを削除する方法とレスキューモードで起動してLILOの再インストールを行なう方法について説明していきます。



2.起動できなくなる原因

■原因

ブートローダの起動に失敗する原因を理解するためには、LILOの仕組みを理解する必要があります。詳しい説明は、書籍や他のサイトに譲り、ここではLILOの仕組みを理解している前提で説明を行ないます。

LILOは「1st Boot Loader」と「2nd Boot Loader」によって構成されています。
最初の "L" を表示するための「1st Boot Loader」はBIOSやLILO以外のブートローダによってロードされて実行されるため、通常は起動に失敗することはありえません。したがって、 "LI" と表示されたところで起動に失敗してしまう場合は、この後の "I" を表示するための動作が問題となるので、その原因について説明していきます。

「1st Boot Loader」は "lilo" コマンドを実行した時に自分の中に記録された「2nd Boot Loader」のセクタアドレスをBIOSに提示して、セクタ単位で「2nd Boot Loader」をロードしますが、カーネルの再構築などを行なった場合には、このセクタアドレスが変わってしまいます。通常は、 "lilo" コマンドを実行して「2nd Boot Loader」の新しいセクタアドレスを記録しますが、 "lilo" コマンドの実行を忘れた場合には、この情報が更新されていません。

このため、BIOSは以前の「2nd Boot Loader」のセクタアドレスを保持したままになっており、このセクタアドレスを「2nd Boot Loader」としてロードするので、コンソールに「2nd Boot Loader」のロードに成功したことを知らせる "I" が表示されます。しかし、実際このセクタアドレスには「2nd Boot Loader」がありませんので、「2nd Boot Loader」を起動することができません。そのため、LILOは "LI" と表示したところで止まってしまい、Linuxを起動することができません。



3.対処方法

上記の状態を回避するためには、Windowsの起動ディスクを使用する方法と、LinuxのインストールCDをレスキューディスクの代わりとして使用する方法があります。

■LILOの削除

まず、Windowsの起動ディスクを使用して回避する場合には、Windowsの起動ディスクで起動し、コマンドプロンプトから、
C:\> fdisk /mbr
と入力し、LILOを削除します。しかし、この方法はMBRにインストールしたLILOを削除して初期化するだけなので、Windowsとのマルチブートな環境を構築している場合にはWindowsを起動できるようになりますが、Linuxを起動することはできません。Linuxを起動するためにはレスキューモードで起動してLILOの再インストールを行なう必要があります。

■レスキューモードでの起動

次にRedHat LinuxやMIRACLE LINUXなどのインストールCDをレスキューディスクとして使用し、起動できなくなったシステムを復旧する方法を説明します。この方法は、インストールCDから起動した時のkernelを利用してシステムの復旧を行なう方法で、オペレーションミスによってシステム全体を破壊してしまう可能性もあるので慎重に作業を行ないます。
  1. システムの復旧を行ないたいマシンにインストールCDを挿入して、マシンを起動します。
  2. "boot: "とプロンプトが表示されるので、"linux rescue"と入力し、システムをレスキューモードで起動します。


  3. "Choose a Language" の画面で使用する言語を選択します。ここで"Japanese"を選択した場合うまく動作しないことがあるので、"English"を選択します。


  4. "Keyboard Type" の画面で使用しているキーボードの種類を選択します。日本語キーボードを使用している場合には、"jp106"を選択します。


  5. マルチブートな環境で使用している場合には、ここでルートパーティションを選択する画面が表示されるので、マウントしたいパーティションを選択します。

  6. レスキューモードで起動可能な場合には、以下の画面が表示されるので[Continue]で先に進みます。[Skip]を選択した場合には、ファイルシステムのマウントは行なわれません。


  7. ルートパーティションを /mnt/sysimage にマウントしたことを知らせるメッセージが表示されるので、[OK]を選択します。


  8. シェルプロンプトが表示されるので、 chroot コマンドを実行してルートパーティションをマウントします。
    bash# chroot /mnt/sysimage
  9. /etc/lilo.conf の内容が正しいことを確認します。

  10. lilo コマンドを実行します。
    bash# lilo
  11. chroot 環境を終了します。
    bash# exit
  12. レスキューモードのプロンプトに戻って exit コマンドを実行し、マシンを再起動します。
    bash# exit
以上の手順でシステムが復旧しLinuxが起動できるようになりますが、このような場合に備えて、緊急起動用のディスクを作成しておくことをお勧めします。

■緊急起動用ディスクの使用

インストール時に緊急起動用のディスクを作成した場合には、このディスクを使ってLinuxを起動することも可能です。インストール時に作成しなかった場合には、緊急起動用ディスクの作成で作成方法を紹介していますので、作成の際には参考にして下さい。

緊急起動用ディスクを使用する場合には、起動できなくなったシステムのFDDに作成した緊急起動用のフロッピーディスクを挿入して電源を投入します。以下のような画面が表示されるので[Enter]キーをタイプするか、10秒待つと緊急起動用ディスクからシステムを起動することができます。

また、この他に、"LIL" と表示して起動に失敗する場合や、"LILILI..." と "LI" が連続して表示される場合などがありますが、前述の通り "L" "I" "L" "O" のそれぞれの表示に意味がありますので、それらの文字からシステムが起動できなくなった原因を推察することが出来ます。



4.緊急起動用ディスクの作成

■緊急起動用ディスクの作成

最後に、インストール時に緊急起動用のディスクを作成しなかった場合に、mkbootdiskコマンドを使用して緊急起動用のディスクを作成する方法を紹介します。
  1. 現在使用しているカーネルのバージョンを確認します。
    # uname -r
    2.4.18-26.7.x
  2. フォーマット済みのフロッピーディスクを用意し、mkbootdiskコマンドを実行(第2引数に正確なカーネルバージョンを指定)して緊急起動用のイメージを作成します。
    # mkbootdisk --device /dev/fd0 2.4.18-26.7.x
    Insert a disk in /dev/fd0. Any information on the disk will be lost.
    Press  to continue or ^C to abort:
  3. [Enter]キーを押して緊急起動用のディスクを作成します。
  4. フロッピーディスクの中身を確認します。
    # mount /mnt/floppy/
    # ls /mnt/floppy/
    boot.msg  initrd.img  ldlinux.sys  syslinux.cfg  vmlinuz
この方法で作成した緊急起動用ディスクは、/etc/fstab を参照してシステムのルートパーティションを自動的にマウントするようになりますので、システムが起動しなくなった場合などに使用してシステムを起動することができます。



5.更新履歴

■改版履歴

2003/03/25 初版作成



BACKUP