liloについて First Edition 2004.3.24
liloとはコンピュータに電源が入ったら、まず BIOS というプログラムが走り始めます。BIOS は必要最小限のハードウェアセットアップ処理を行った後、処理をブートローダに任せます。 ブートローダーはOSのカーネルのありかを知っており、OSを起動するためにそれらのファイルへのアクセスを 開始します。 カーネルは、ブートローダからのアクセスにより、OSの初期処理の実行を始めます。 liloとはブートローダのことです。昔からずっと使われてきており、Linux のみならず、Windowsなどの 他のOSをブートさせることもできます。 Vine Linux ではブートローダーとしてliloを標準で採用しています。 liloを設定するVine Linuxをインストールする時に、すでにliloはインストールされていると思います。 ここでは、インストール後にカーネルのアップデートなどでliloを更新する際の情報を記載します。liloの設定を変更し、変更を反映させるには2つのステップが必要になります。 1./etc/lilo.confファイルを変更する 2./sbin/liloコマンドを実行する ここで、2番目の手順は非常に重要です。設定ファイルを変更しただけではliloの動作は変更されません。 /sbin/liloコマンドを実行して初めてliloの設定変更が行われたことになります。 それでは、/etc/lilo.confファイルの設定に移りたいと思います。 以下の内容は私のパソコンのファイルになっています。おそらく皆さんのファイルも以下の内容に近い ものになっていると思います。 /etc/lilo.conf
カーネルを再構築したあとなどには、以下のように新しいカーネルをimageで指定し、ブート時のラベルをlabel で指定します。 prompt timeout=50 default=linux boot=/dev/hda map=/boot/map install=/boot/boot.b message=/boot/message image=/boot/vmlinuz-2.4.22-0vl2.11smp label=linux-new read-only root=/dev/hda2 image=/boot/vmlinuz-2.4.22-0vl2.10smp label=linux read-only root=/dev/hda2 image=/boot/vmlinuz-2.2.25-0vl3 label=linux-2.2-up read-only root=/dev/hda2 other=/dev/hda1 optional label=win liloをインストールする/etc/lilo.confファイルを編集したら、最後にliloコマンドを実行します。以下のように表示されればliloのインストールは終了になります。 # /sbin/lilo Added linux * Added linux-new Added linux-2.2-up Added win liloをアンインストールするなんらかの理由でliloをアンインストールする必要が発生した場合、大抵はMBRにインストールされた liloをアンインストールしたいのではないでしょうか。liloは、WindowsからでもLinuxからでもアンインストールすることが出来ますが、 MBR以外のルートパーティーションにliloをインストールした場合はWindowsからはアンインストールできません。 以下の方法は、MBRからliloを削除する方法です。
MBR以外のルートパーティーションのブートセクタにインストールされたliloをアンインストールするには、以下のようにします。 # lilo -u /dev/hda1 # lilo -u /dev/hda2この際、/dev/hda1や/dev/hda2のブートレコードにはどのようになってしまうのでしょうか。 実はliloをインストールするときに、事前に/dev/hda1や/dev/hda2のブートレコードをバックアップしているのです。 バックアップしたファイルは、/boot/boot.0301や/boot/boot.0302というファイル名でバックアップされています。 liloをアンインストールすると、/boot/boot.0301や/boot/boot.0302が/dev/hda1 や/dev/hda2に戻されるわけです。 liloがブートセクタを上書きするときには、バックアップを作成してくれるわけですが、ファイル名としては、 /boot/boot.xxyyとなります。 xxyyはデバイスのメジャー/マイナー番号を16進数で表したものです。 メジャー番号/マイナー番号は以下のようにすると表示されます。 $ ll /dev/hda* brw-rw---- 1 root disk 3, 0 May 6 1998 /dev/hda brw-rw---- 1 root disk 3, 1 May 6 1998 /dev/hda1 brw-rw---- 1 root disk 3, 10 May 6 1998 /dev/hda10 brw-rw---- 1 root disk 3, 11 May 6 1998 /dev/hda11 brw-rw---- 1 root disk 3, 12 May 6 1998 /dev/hda12 brw-rw---- 1 root disk 3, 13 May 6 1998 /dev/hda13 brw-rw---- 1 root disk 3, 14 May 6 1998 /dev/hda14 brw-rw---- 1 root disk 3, 15 May 6 1998 /dev/hda15 brw-rw---- 1 root disk 3, 16 May 6 1998 /dev/hda16 brw-rw---- 1 root disk 3, 2 May 6 1998 /dev/hda2 brw-rw---- 1 root disk 3, 3 May 6 1998 /dev/hda3 brw-rw---- 1 root disk 3, 4 May 6 1998 /dev/hda4 brw-rw---- 1 root disk 3, 5 May 6 1998 /dev/hda5 brw-rw---- 1 root disk 3, 6 May 6 1998 /dev/hda6 brw-rw---- 1 root disk 3, 7 May 6 1998 /dev/hda7 brw-rw---- 1 root disk 3, 8 May 6 1998 /dev/hda8 brw-rw---- 1 root disk 3, 9 May 6 1998 /dev/hda9/boot/boot.0300 と言うファイルは、メジャー番号03、マイナー番号00のバックアップということなので、 # ll /dev/hda brw-rw---- 1 root disk 3, 0 May 6 1998 /dev/hdaとなり、hdaのMBRのバックアップであると言うことがわかります。 liloにパスワードを設定するコンピュータを起動する際に、liloにパスワードを設定しておくと、一般ユーザーに再起動されてシングルユーザーモードに されてしまうことを防ぐことが出来ます。しかしこの方法だとリモートから再起動することが出来なくなりますので、注意して下さい。 例としてパスワード「fjpqowe8rt」を設定します。 /etc/lilo.conf prompt timeout=50 default=linux boot=/dev/hda map=/boot/map install=/boot/boot.b message=/boot/message password=fjpqowe8rt image=/boot/vmlinuz-2.4.22-0vl2.11smp label=linux-new read-only root=/dev/hda2 image=/boot/vmlinuz-2.4.22-0vl2.10smp label=linux read-only root=/dev/hda2 image=/boot/vmlinuz-2.2.25-0vl3 label=linux-2.2-up read-only root=/dev/hda2 other=/dev/hda1 optional label=winpasswordラベルを使い、パスワードを記入します。 しかしこれだと一般ユーザーに/etc/lilo.confを見られてしまいますので、パーミッションを以下のように変更しておきます。 # chmod 600 /etc/lilo.conf liloのトラブルliloは起動したが、ブートするイメージが存在しない状態です。 liloをインストールした時と、起動した時とでパーティション構成が変わってしまった時などに起こります。 liloコマンドを実行しなおすことで修復出来ますので、ブートディスクで起動して修復して下さい。 記述テーブルもしくはマップファイルが破損しています。 liloコマンドを実行しなおすことで修復出来ますので、ブートディスクで起動して修復して下さい。 ハードディスクにカーネルイメージ、ルートイメージを見付けることが出来ない状態 liloだけがインストールされているような感じです。 再インストールしたほうが良いと思われます。 lba32オプションについてliloのオプションで、lba32と言うものがあります。これは大きい容量のハードディスクなどで、 カーネルの存在位置が1024シリンダ以上に配置されている場合、liloがアクセスできないので、 LBA形式でアクセスするように指定するオプションです。最近のliloでは不要ですが、カーネルの位置がドライブの後ろの方に配置されるような場合は、 lba32オプションを設定しておいた方が良いようです。 以前lba32オプションを付けないとブートしないシステムがありましたので。 /etc/lilo.conf prompt timeout=50 default=linux boot=/dev/hda map=/boot/map install=/boot/boot.b message=/boot/message lba32 image=/boot/vmlinuz-2.4.22-0vl2.11smp label=linux-new read-only root=/dev/hda2 image=/boot/vmlinuz-2.4.22-0vl2.10smp label=linux read-only root=/dev/hda2 image=/boot/vmlinuz-2.2.25-0vl3 label=linux-2.2-up read-only root=/dev/hda2 other=/dev/hda1 optional label=winliloはデフォルトではCHS方式でハードディスク内のブートレコードへアクセスします。これはハードディスク内データの 物理的位置をシリンダ、ヘッド、セクタという3つの単位で表す方法です。 この場合、ハードディスクの容量が増大してくるとCHSの値も大きくなってきます。CHSの値は8bitおよび10bitで 表現できなくてはいけないという上限がありますので、必然的にliloがアクセスできるハードディスクの物理的位置も限られてきます。 これは504MBの壁などと呼ばれています。 この"壁"を越えてさらに大きいドライブにアクセスするためには LBA モードでアクセスする必要があります。 これはハードディスクの物理位置をLBAという方法で、物理的位置を32bitで表すことができるので、 2TB(テラバイト)のディスクをアクセスすることができます。 これらはliloがアクセスできるかどうかの話であり、liloからブートレコードへ処理が渡った以降 はディスク容量の制限無くアクセスできます。 [HOME] since 2001.4.22 |