Lilo mini-Howto Cameron Spitzer (cls@truffula.sj.ca.us), Alessandro Rubini (rubini@linux.it). v2.02, 16 August 1998 中谷千絵 (jeanne@mbox.kyoto-inet.or.jp), 早川仁 (cz8cb01@linux.or.jp). v2.02j, 1999年 9月12日 LILO とは、x86 アーキテクチャの Linux で最も良く使われている Linux Loader の事です。私(原文の著者)は大文字表記があまり好みではないた め、ここでは LILO ではなく Lilo と呼ぶことにします。このドキュメントで はいくつかの典型的な Lilo インストレーションについて説明しており、Lilo ユーザーズガイドの補足となることを意図しています。読者の(設定)が多少 違うものだとしても、サンプルは参考になると思いますし、またよけいな手間 を省ける事でしょう。Lilo 自体のドキュメントは非常に良いものですから、 詳細を知りたい方は /usr/doc/lilo* を参照してください。 ______________________________________________________________________ 目次 1. イントロダクション 2. 予備知識と一般的なインストール方法 2.1 Lilo はどこにインストールするべきでしょうか? 2.2 IDE ハードディスクをどのように設定すべきでしょうか? 2.3 ブート時に対話的に操作するには? 2.4 Lilo をアンインストールするには? 3. シンプルな設定 3.1 大きなカーネルを扱うには 3.2 その他の情報源 4. bios= を使用して、インストールした hdc を hda としてブートさせる 5. BIOS からルートパーティションが見えないときに Lilo を使用する 6. BIOS が扱えない大容量ディスクをアクセス 7. Rescue フロッピーからの起動 8. 翻訳について ______________________________________________________________________ 1. イントロダクション Lilo ソース内のドキュメント(/usr/doc/lilo-バージョン)は非常に詳しいも のですが、多くの Linux ユーザーは自分自身の /etc/lilo.conf ファイルを 作成する際にいくつかのトラブルを経験しています。このドキュメント は、Lilo をうまく使いこなすためのコツを短時間で得られるようにサンプル として 5 種類のパターンを示し、それぞれについて必要最小限の解説を加え るという方針で書かれています。 o 最初の例は、古典的な ``Linux と他の OS'' のインストールです。 o 次の例は、どのようにして Lilo を /dev/hdcとして接続されているハード ディスクにインストールし、/dev/hda としてブートさせるかについてで す。これは普通、現在稼働中のシステムに新しく Linux 用のドライブを追 加する時に必要となります。また(使用している BIOS が新しい物である 場合)どうやってSCSI ドライブからブートするかについても説明していま す。 o 3 番目の例では、BIOS からアクセスできないルートパーティションから Linux システムを起動する方法について説明しています。 o その次の例は、BIOS や DOS から簡単にアクセスできない大容量ディスク へのアクセスについてです(この例は多少内容が古いです)。 o 最後の例では、他の OS をインストールすることによって損傷を受けた ディスクの復旧方法について説明しています(訳注:つまり Windows95な どの OS をインストールすることによって HDD 先頭の MBR やパーティ ション先頭のブートセクタを壊してしまった場合です)。 最後の 3 つの例はこのドキュメントのオリジナルの著者である Cameron(cls@truffula.sj.ca.us) により書かれたものです。ドキュメントの 現在のメンテナンス者である Alessandro(rubini@linux.it) は Linux 以外の OS を使用していないため、それらの例の内容のチェックや更新をする事がで きません。言うまでもありませんが、どのようなフィードバックも歓迎しま す。 2. 予備知識と一般的なインストール方法 Lilo がシステムを起動する場合 BIOS コールを使用してディスク(IDEドライ ブ、フロッピー、その他)から Linux カーネルを読み込みます。つまりカー ネルは BIOS からアクセスできる場所に存在している必要があります。 Lilo はブート時にファイルシステム上のデータを読み込むことはできません から、/etc/lilo.conf に記述したパス名はインストール時(/sbin/lilo を実 行する時)に解読され、各ファイルがディスク上のどのセクタを占めているの かという情報に変換されます。「インストール時」には、カーネルを読み込む 際に必要となるファイルがディスク上でそれぞれどのセクタに存在しているの かを示すテーブルがプログラム (訳注: /sbin/lilo) によって構築されます。 ですから、これらのファイルすべてが BIOSからアクセスできるパーティショ ンに存在している必要があります(ファイルは通常 /boot ディレクトリに置 かれます。つまり BIOS からアクセスできる必要があるのは、Linuxシステム のルートパーティションだけです)。 BIOS に関するもう一つの注意点としては Lilo の設定を変更する度に(訳 注: /etc/lilo.conf を変更した時)、/sbin/lilo を実行して再インストー ルする必要があります。またカーネルを再コンパイルして古いカーネルイメー ジを上書きした場合は常にLilo を再インストールしなければなりません。 (訳注:再インストールしなかった場合、マシンを再起動すると Linuxが起動 せずにフリーズするかもしれません。Lilo が OS 起動時に使用する情報は /sbin/liloコマンド実行時に設定されますが、カーネルを上書きした場合には この情報が違う物になってしまうからです) 2.1. Lilo はどこにインストールするべきでしょうか? /etc/lilo.conf の boot= パラメーターは、プライマリーブートローダーをど こに置くべきかを Liloに指定するものです。通常はマスターブートレコード (MBR)(/dev/hda)か Linux のルートパーティション(通常は/dev/hda1 か /dev/hda2)のどちらでも指定できます。 (訳注:Linux のルートパーティションを指定する場合は、MBR に Lilo以外 のブートローダー(OS/2、Windows NT、extipl やシステムコマンダーなど) がインストールされている必要があります。つまり、MBRのローダーからルー トパーティションのローダー(Lilo)をブートし、そこから Linux が起動さ れます) 他の OS がハードディスクにインストールされている場合、MBRではなくルー トパーティションに Lilo を入れた方が良いでしょう。その場合そのパーティ ションに、fdisk の``a''コマンドかcfdisk の``b'' コマンドを使用し て``bootable''(起動可能)マークを付ける必要があります。マスターブート セクタを上書きしないほうが、もし必要になった場合、より簡単に Linux と Lilo をアンインストールできることでしょう。 2.2. IDE ハードディスクをどのように設定すべきでしょうか? 私自身は BIOS の LBA や LARGE の設定はしていません(Linuxしか走らせて いませんから)。これらは PCの世界での設計の欠陥を取り繕うためのみっと もないその場しのぎです。この理由により、カーネルは 1024 シリンダ以内に 存在する必要がありますが、パーティションを分割してルートパーティション を小さい物にする限りこれは問題にはなりません(どちらにせよ読者はそうす るはずでしょうが)。 すでにハードディスクに他の OS がインストールされている場合、その OS が もう起動しなくなってしまうかもしれませんから BIOS のセッティングを変え られないでしょう。最近のディストリビューション全ての Lilo は LBA と LARGE のディスク設定を取り扱うことができます。 /etc/lilo.conf の "linear" キーワードはジオメトリー問題に対処するのに 役立つと言うことを覚えておいてください。これは Liloにリニアセクタアド レスをセクタ/ヘッド/シリンダ(CHS)指定の代わりに使用することを指示し ます。3Dアドレス(CHS アドレス)への変換処理は実行時に先送りされます が、その代わりにこの設定によってジオメトリー問題に、より柔軟に対応する ことができます。 (訳注:LILO ver 20 および 21 では linear を指定された場合であっても lilo は内部で CHS アドレスを使っています。指定しない場合との違いは単に 起動時にマップファイルに記録された 3D アドレスを BIOS から取得したジオ メトリー情報を用いて別な 3D アドレスに変換するかどうか、のはずです。 もし linear オプションを付けることによって /sbin/lilo が /boot/map ファイルに 32bit な linear address を記録するのなら、/boot/map ファイ ルのサイズが linear オプションを付けない場合よりもかなり大きくなるはず ですが (カーネルのセクタ位置情報が 24bit から 32bit に増えるため)、 (試してみればすぐにわかりますが)実際にはすくなくとも lilo ver.21 で は /sbin/lilo に -l オプションを付けても付けなくても生成される map ファイル(標準では /boot/map) のサイズは同じです。 このへんは lilo のソースにある first.S や second.S を読めばすぐにわか ると思います。map ファイルを読む処理は linear option の有無によらず、 まったく同じですから。違いは map ファイルから読んだデータを処理する部 分だけです) 1 つ以上のハードディスクを持っていて、それらのうちいくつかは Linuxだけ で使用していて、なおかつブートプロセスに関係がない(ブートプロセスで使 用していない/必要がない)場合 BIOSに、それらのディスクが接続されてい ないと設定することができます。これによりシステムはより早く起動しま す。Linux は即座にすべてのディスクを自動認識します。私は自分のコンピュ ーターのディスクをよく交換しますが、BIOS の設定には触れません。 2.3. ブート時に対話的に操作するには? Lilo のプロンプトが現れたときに キーを押すことによって、選択可能 なリストを表示します。Lilo が対話的(interactive)に操作できるように設定 されていない場合、``LILO'' メッセージが表示されるまで を押し続けてください。 Linux カーネルのブートを選択した場合、コマンドライン引数を選択したシス テムの名前の後ろに追加することができます。カーネルには多くのコマンドラ イン引数がありますが、すべての引数は Paul Gortmaker の ``BootPrompt- HOWTO'' (訳注:日本語訳は堀江誠一氏です。 http://www.linux.or.jp/JF から入手できます)に記述されていますからそれらをここで記述しようとはし ませんが、いくつかのコマンドライン引数は非常に重要なため、ここで説明す る価値があるでしょう。 o root= lilo.conf に設定されたものとは別のパーティションを root (パー ティション) としてマウントすることをカーネルに指示します。例えば私 のシステムは最小限の物のみをインストールした小さな Linux パーティ ションがありますから、ミスによってルートパーティションを消してし まった後でもシステムをブートすることができます。 o init= バージョン 1.3.43 以降のLinux カーネルは、 /sbin/init の代わ りにコマンドラインで指定された別のコマンドを実行できます。ブート中 に何か問題の起こった場合、init=/bin/sh を指定することによって裸の (bare) システムにアクセスすることができます。シェルプロンプトが表示 されたら、まずディスクをマウントする必要があるでしょう。 ``mount -w -n -o remount /; mount -a'' を試してみてください。また、コンピュー ターの電源を切る前には ``umount -a'' を忘れずに実行してください。 o 数字 カーネルのコマンドラインに数字を指定することによって、 init に どの ラン・レベル で実行するのかを指定することができます(デフォル トは通常 3 もしくは 2 で、ディストリビューションによります)。詳し く知りたいときは、init, /etc/inittab や /etc/rc*.d のドキュメントを 参照してください。 2.4. Lilo をアンインストールするには? Lilo がブートセクタを上書きする際には、/boot/boot.xxyy としてバック アップを作成します。xxyy はデバイスのメジャー/マイナー番号を 16 進数 で表したものです。ディスク/パーティションのメジャー/マイナー番号は ``ls -l /dev/device'' を実行することで見られます。例えば、/dev/hda (メ ジャー 3 番、マイナー 0 番)の最初のセクタは /boot/boot.0300 に保存され 痔/dev/fd0 の場合は /boot/boot.0200、/dev/sdb3 (メジャー 8 番、マイナ ー 19 番) は /boot/boot.0813 を作成します。(訳注: 16 進数ですから、 10 進数の 19 は 16 進数の 13 になります) すでにファイルが存在していた場合 Lilo はファイルを作成しようとはしませ ん。ですから Lilo を再インストールする際に(例えばカーネルの再コンパイ ル後)、ファイルのバックアップを取ることを気にする必要はありません。 /boot/ に存在するブートセクタのバックアップファイルは、常に Lilo のイ ンストール前のスナップショットです。 Lilo をアンインストールする必要がある場合(例えば不幸にも Linux をアン インストールしなければならない時)、必要な作業は単にオリジナルのブート セクターをリストアすることだけです。Lilo が /dev/hda にインストールさ れているなら単に``dd if=/boot/boot.0300 of=/dev/hda bs=446 count=1'' を実行するだけです。 (私自身は ``cat /boot/boot.0300 > /dev/hda'' を実行するだけですが、こ れは安全ではありません。オリジナルのパーティションテーブルを(その後に 変更したかもしれないのに)リストアしてしまうからです) このコマンドは DOS のコマンドプロンプトから``fdisk /mbr''を実行するこ とよりも簡単ですこの操作によって、Linux 以外の OS をまったく使わずに (起動さえすることなく) ディスクから Linux をきれいさっぱり消してしまう ことができますLilo を取り除いたあとに Linux の fdisk を実行して、すべ ての Linux パーティションを削除することを忘れないでください(DOS の fdisk は DOS 以外のパーティションを消すことはできません) 。 Lilo を(訳注:MBR にではなく)ルートパーティションにインストールして いた場合(例えば /dev/hda2)は、Lilo をアンインストールするために必要な ことは特にありません。単に Linux の fdisk を実行し、Linux パーティショ ンをパーティションテーブルから取り除くだけです。また DOS パーティショ ンをブート可能(bootable)にする必要もあるでしょう。 3. シンプルな設定 多くの Lilo では次のような設定ファイルを使用します。 boot = /dev/hda # もしくはあなたの環境でのルートパーティション delay = 100 # ディレイ(遅延)10 秒です(これぐらい余裕があれば、引数入力などができるでしょう) vga = 0 # 省略可能。 "vga=1" を指定すると 80x50 文字表示になります #linear # ジオメトリーに問題があった場合、"linear" を試してみてください image = /boot/vmlinux # zImage ファイル root = /dev/hda1 # ルートパーティション label = Linux # 適当な名前でも構いません read-only # ルートパーティションを read-only でマウント other = /dev/hda4 # DOS パーティションがある場合 table = /dev/hda # 現在のパーティションテーブル label = dos # もしくはその他の素敵な :-) 名前 必要に応じて、複数の``image''や``other''セクションを指定することができ ます。複数のカーネルイメージを lilo.conf に指定することは珍しくありま せん。少なくとも開発版のカーネルを追っかけている時はそうです。 3.1. 大きなカーネルを扱うには カーネルを``zImage''でコンパイルした際に、サイズが 512KB 以上になって しまった場合(2.1 以降の新しいカーネルなどでは普通のことです)、代わり に ``make bzImage''を使用して``big zImage''なカーネルをビルドする必要 があります。大きな(bzImageな)カーネルイメージをブートする為に特に必 要なことはありませんが、バージョン 18 以上の Lilo が必要です。インスト ールされている物が古い場合、Lilo パッケージをアップグレードすべきで す。 3.2. その他の情報源 Lilo のドキュメントの他にも、いくつかの役立つ mini-howto があります。 それらのうち、なんちゃら OS 用のドキュメントは ``Linux+なんちゃら OS'' といった名前になっています。これは Linux と他の OS との同居について 扱っています。また``Multiboot-with-LILO'' では Windows ファミリーの OS と Linux を同居させる方法について説明しています。 (訳注:例えば Windows95 との同居について説明しているドキュメントは "Linux+Win95" という名前になっています) 4. bios= を使用して、インストールした hdc を hda としてブートさせる Lilo を使って、あるディスクからカーネルイメージのマップを作成し、そし てそのカーネルイメージを別のディスクから取得するよう BIOS に指示する、 ということが可能です。例えば私がよくやることは Linux を hdc に接続した ディスク(IDE のセカンダリーコントローラーのマスター)にインストールし て、そのディスクを別なコンピュータのプライマリー IDE コントローラに接 続し、単独で動作するシステムとして起動させることです。インストール用フ ロッピーを小さなパーティションにコピーしたので、他の作業をするために自 分のシステムを使いながら、chroot を仮想コンソールで実行してhdc へのイ ンストール作業を実行できます。 私が Lilo をインストールするために使用している lilo.conf ファイルはこ のようになっています。 # このファイルを使うには /dev/hdc が存在するシステム上である必要があります。 boot = /dev/hdc # hdc の MBR を上書き disk = /dev/hdc # hdc がどのように見えるかを指定 bios = 0x80 # BIOS はこのドライブを 1 番目のドライブとして扱う delay = 0 vga = 0 image = /boot/vmlinux # これ(カーネルイメージ)は /dev/hdc1 上にありますが root = /dev/hda1 # ブート時に hda1 が root デバイスになります label = Linux read-only この設定ファイルは /dev/hdc1 の Lilo コマンドで読みこむ必要がありま す。Lilo は、ブートセクタ (/dev/hdc) に書き込まれる Lilo のマップ /boot 内のファイルを参照しなければなりません。それらのファイルはこの ディスクがスタンドアローンシステムとしてブートされた時には hda にある ものとしてアクセスされます。 私はこの設定ファイルを /mnt/etc/lilo.conf.hdc という名前にしていま す。/mnt は hdc がインストール中にマウントされている場所です。Lilo を インストールする場合には ``cd /mnt; chroot . sbin/lilo -C /etc/lilo.conf.hdc'' を実行します。これが魔法のように見えるのであれ ば、chroot の man page を参照してください。 lilo.conf の ``bios='' パラメーターは Lilo に、BIOS がデバイスとして何 を使うのかを指定します。BIOS コールはフロッピーディスクとハードディス クを番号で識別します。0x00 と 0x01 はフロッピードライブを、0x80 以降の 番号(古い BIOS では2つのディスクのみアクセス可能)はハードディスクと して認識します。つまり先のサンプルの ``bios = 0x80'' は、``/dev/hdc'' には ``BIOS コールの 0x80 を使用する''ということです。 この Lilo パラメーターは他の状況でも便利です。例えば BIOS が IDE ディ スクの代わりに SCSI ディスクからブートできる場合です。IDE と SCSI デバ イスの両方がある場合、Lilo は 0x80 がどちらを指しているかわからない (ユーザーが BIOS 設定メニュー内でどちらからブートするかを選択できるた め)し、 Linux が動作している間には BIOS にアクセスする事はできませ ん。 デフォルトでは Lilo は、BIOS によって IDE ドライブが始めにマップされる と仮定していますが、/etc/lilo.conf に次のような指定をすることによって 変更することができます。 disk = /dev/sda bios = 0x80 5. BIOS からルートパーティションが見えないときに Lilo を使用する 私は 2 台の IDE ドライブと 1 台の SCSI ドライブを持っていますが、SCSI は BIOS から見えません。Lilo は BIOS コールを使用するので BIOS から認 識するドライブしか見えません。私の馬鹿 AMI BIOS は "A:" か "C:" からし かブートしようとしませんが、ルートファイルシステムは SCSI ドライブのパ ーティション上にあります。 解決策としては、カーネル、マップファイル、及びチェインローダーを 1 番 目の IDE の Linux パーティションに入れることです。カーネルをルートパー ティションに置く必要はないことを覚えておいてください。 1 番目の IDE の 2 番目のパーティション(/dev/hda2、システムをブートす るのに使われる Linux パーティション)は /u2 にマウントされています。こ れが使用した /etc/lilo.conf です。 # # Lilo を 1 番目の IDE の MBR にインストール boot = /dev/hda # # /sbin/lilo(インストーラー)が Lilo ブートレコードを # 次のファイルから MBR の場所へコピー install = /u2/etc/lilo/boot.b # # 詳細な(verbose) ブートメニューを書きました。Lilo はここから探します message = /u2/etc/lilo/message # # インストーラーは次のファイルを作成します。 # これはブートローダーに、カーネルのあるブロックの場所を指示します map = /u2/etc/lilo/map compact prompt # # 10 秒待ち、デフォルトとして 1.2.1 カーネルをブートします。 timeout = 100 # # cp -p /usr/src/linux/arch/i386/boot/zImage /u2/z1.2.1 を # 実行することによってカーネルは BIOS から見える場所に置かれます image = /u2/z1.2.1 label = 1.2.1 # # Lilo はカーネルに、SCSI ディスクの 1 番目のパーティションを # ルートパーティションとしてマウントするように指示します root = /dev/sda1 # # このパーティションは /etc/rc.d/rc.S スクリプトによって、 # チェックされて再マウントされます read-only # # 作成したカーネルが動作しない場合に備え、古い Slackware カーネルを # 置いておきます。実際、過去に必要になったことがあります image = /u2/z1.0.9 label = 1.0.9 root = /dev/sda1 read-only # # DR-DOS 6 パーティションです other = /dev/hda1 loader=/u2/etc/lilo/chain.b label = dos alias = m 6. BIOS が扱えない大容量ディスクをアクセス 私のオフィスのシステムには 1GB の IDE ドライブがありますが、BIOS から は最初の 504MB しか見えません。(ここでは MB = 1000 バイトではな く、1024 バイトとします)ですから、MS-DOS を 350MB パーティション /dev/hda1 に、Linux のルートを 120MB パーティション /dev/hda2 に置いて います。 (訳注:バイト数を表現する際には、K = 1024(つまり 1KB = 1024)という 決まりがありますが、M = 1024KB という決まりはありません。ですから各 HDD メーカーは M = 1000KB として HDD の容量を表しています。ちなみに、k と小文字で記述した場合 k = 1000 となります) 買ってきたばかりのドライブでは、MS-DOS は自分自身を正常にインストール することができませんでした。Novell DOS 7 にも同じ問題がありました。さ らに幸運な事に、"IBM の選定先" は "OnTrack" ディスクをドライブのパッケ ージの中に入れ忘れていました。ドライブには "OnTrack Disk Manager" とい う製品が付属しているはずでした。MS-DOS しか持っていない場合、それを使 う必要があるでしょう。 (訳注:おそらくドライブが IBM 製で、IBM がパッケージングを発注してい る会社/工場がマニュアルを入れ忘れたということでしょう) そこで、パーティションテーブルを Linux から作りましたが、MS-DOS 6.2 は /dev/hda1 にインストールする時に ``this release of MS-DOS is for new installations. Your computer already has MS-DOS so you need to get an upgrade release from your dealer.'' というメッセージが表示されました。 ですが、このディスクは新品でした。 (訳注:エラーメッセージをあえて訳すとすると、``このリリースの MS-DOS は新規インストール用です。コンピューターにはすでに MS-DOS がインストー ルされています。アップグレード版を入手する必要があります。''でしょう か。日本語版 MS-DOS を持っていないので、確認はできませんが。ご存じの方 は翻訳者 (cz8cb01@linux.or.jp)までご一報を :-)) なんてこった。それから Linux の fdisk を再び実行して作成したパーティ ション 1 を削除しました。これで MS-DOS 6.2 が満足したのか、いま削除し たのとまったく同じパーティション 1 を作成すると、そこにインストールで きました。 MS-DOS 6.2 はそのドライブの MBR に書き込みましたが、ブート することはできませんでした。 幸い、Slackware のカーネルがフロッピー(Slackware インストールプログラ ムの "setup" で作られたもの)にあったので、Linux をブートして Lilo で MS-DOS の壊れた MBR を上書きしました。これはうまくいきました。これが使 用した /etc/lilo.conf です。 boot = /dev/hda map = /lilo-map delay = 100 ramdisk = 0 # Slackware カーネルのラムディスクをオフ timeout = 100 prompt disk = /dev/hda # BIOS は始めの 500MB のみ認識 bios = 0x80 # 1 番目の IDE を指定 sectors = 63 # ドライブのマニュアルからこの数値を調べてください heads = 16 cylinders = 2100 image = /vmlinuz append = "hd=2100,16,63" root = /dev/hda2 label = linux read-only vga = extended other = /dev/hda1 label = msdos table = /dev/hda loader = /boot/chain.b これらのシステムをインストールした後、zImage, boot.b, map, chain.b お よび メッセージファイルのあるパーティションが msdos fs(ファイルシステ ム)を、"stackered" や "doublespaced" されていない限り、使用できること を確認しました(訳注:"stackered" は Stacker、"doublespaced" は Double Space で圧縮されているファイルシステムの事でしょう。懐かしいですね (笑))。これで、DOS パーティションを /dev/hda1 500MB に作成すること ができました。 私は "OnTrack" がパーティションテーブルを先頭からではなく数十バイト先 から書いてしまうことを知っていました。この問題は Linux の IDE ドライバ をハックすることで対処できますが、コンパイル済みの Slackware カーネル ではインストールすることはできませんでした。最終的に、IBM は "OnTrack" ディスクを送ってきました。OnTrack のテクニカルサポートに電話したとこ ろ、Linux は BIOS を使わないから欠陥品だと言われました。このフロッピー ディスクは誰かにあげてしまいました。 (訳注:いつから実装されたのかは知りませんが、現在では Linux の標準カ ーネルに DiskManager や EZ Drive に対応するコードが含まれているはずで す。 drivers/block/genhd.c を見るといいでしょう。たしか 2.0.27 あたり には既にあったはず。ソースコード中のコメントにはこのように書かれていま す。DM6 は Ontrack DiskManager 6 の意味だと思う) if (SYS_IND(p) == EZD_PARTITION) { /* * The remainder of the disk must be accessed using * a translated geometry that reduces the number of * apparent cylinders to less than 1024 if possible. * * ide_xlate_1024() will take care of the necessary * adjustments to fool fdisk/LILO and partition check. */ (中略) } else if (SYS_IND(p) == DM6_PARTITION) { /* * Everything on the disk is offset by 63 sectors, * including a "new" MBR with its own partition table, * and the remainder of the disk must be accessed using * a translated geometry that reduces the number of * apparent cylinders to less than 1024 if possible. * * ide_xlate_1024() will take care of the necessary * adjustments to fool fdisk/LILO and partition check. 7. Rescue フロッピーからの起動 次に Windows 95 を私のオフィスのシステムにインストールしました。これは Lilo MBR をぶち壊してしまい、Linux パーティションだけを残しました。カ ーネルをフロッピーから読み込むのは時間が掛かるので、Lilo が使えるよう な設定をしたフロッピーを作って IDE からカーネルをブートできるようにし ました。 Lilo フロッピーはこのようにして作りました。 fdformat /dev/fd0H1440 # 新しいディスクにトラックを作成 mkfs -t minix /dev/fd0 1440 # minix タイプのファイルシステムを作成 mount /dev/fd0 /mnt # 標準的なマウントポイント /mnt にマウント cp -p /boot/chain.b /mnt # チェインローダーを上書き lilo -C /etc/lilo.flop # Lilo と map をディスク上にインストール umount /mnt Lilo が map ファイルを正しく書き込むためには、ディスクがインストーラー を実行する時にはマウントされている必要があるということに気を付けてくだ さい。 /etc/lilo.flop は次のようになっています。これは最後の /etc/lilo.conf とほとんど同じ物です。 # ハードディスクからカーネルをブートできるフロッピーを作成 boot = /dev/fd0 map = /mnt/lilo-map delay = 100 ramdisk = 0 timeout = 100 prompt disk = /dev/hda # 1 GB IDE では BIOS は始めの 500MB のみ認識 bios=0x80 sectors = 63 heads = 16 cylinders = 2100 image = /vmlinuz append = "hd=2100,16,63" root = /dev/hda2 label = linux read-only vga = extended other = /dev/hda1 label = msdos table = /dev/hda loader = /mnt/chain.b 最終的にオフィスのシステムで MS-DOS 6.2 が必要となりましたが、一番目の ドライブには触りたくありませんでした。SCSI コントローラーとドライブを 追加して、msdos fs(ファイルシステム)を Linux の mkdosfs で作成しまし た。 Windows 95 からは "D:" として見えます。当然 MSDOS は D: からブー トしませんが、Lilo があれば問題ではありません。二番目の例の lilo.conf に次の行を追加しました。 other = /dev/sda1 label = d6.2 table = /dev/sda loader = /boot/any_d.b この修正により MS-DOS 6.2 は動き、また自分自身を C: に、Windows 95 を D: にあると認識します。 8. 翻訳について 当文書は中谷千絵さんの翻訳した 1996/08/27 版を、早川が最新版 (1998/08/16)の LDP で更新したものです。 翻訳(特に訳注)の際には「夜のお菓子」で有名な佐野武俊さんに多くの助言 を頂きました。ありがとうございます。 日本語訳:中谷千絵 (1996/08/27) 日本語訳:早川 仁 (1999/09/12)