[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[plamo:12344] Re: ろくに使い方も分からずGRUBをいじったらplamo98



こじま@「絶望と悲しみの海から、それは生まれ出る 地に希望を、天に夢を
取り戻すため生まれ出る〜♪」

# 意味不明、、

From: KATOH Yasufumi <karma@murata.co.jp>
Subject: [plamo:12343] Re: ろくに使い方も分からずGRUBをいじったら plamo98
Date: Fri, 16 Nov 2001 09:17:22 +0900
Message-ID: <200111160017.JAA09614@murata.co.jp>

> > すごいです。覚えます。liloよりこっちの方が安心っぽいですね。
> > ただわかりやすい説明書が・・・
> 
> google で検索 (日本語のページをね) したらかなり出てきますよ.:-)
> 
> 例えば
>   http://www.fastnet.ne.jp/~hashi/grub/
>   http://www.geocities.co.jp/SiliconValley-Bay/3897/grub/grub.html
> とか.
> 

昔、「Linux インストールキット(第二版)」向けに、grub の使い方を簡単に
書いたものがあるので流してみます。

# 対象としている grub のバージョンが古くて、最近では事情も変っていると
# 思いますので、まぁ参考程度に御覧くださいませ。

手動で detex したので \section{...} あたりが残ってるのはご愛敬。

--------------------------------------------------------------------

\section{GRUB}

GRUBはLILOと同様、HDやFDからLinuxをブートするためのブートローダです。
LILOは、Linuxを起動することが主目的で、Linux以外ではDOS/WindowsとOS/2
しか起動できないのに対して、GRUBではDOS/WindowsやOS/2に加えて、GNU
HURD(本来のターゲット)やFreeBSD、NetBSDなども起動することが可能です。
また、GRUBは各種OSのファイルシステム(Linuxのext2、BSDのFFSなど)を理解
するので、それらのファイルシステム上にあるカーネルや設定ファイルなどを
柔軟に扱うことができます。

  本節ではGRUBの機能のうち、Linuxの起動に必要な部分のみを説明しています。
  GRUBは本節で説明する以外にもさまざまな機能を有しているので、それらの詳細
  については /usr/doc/grub にあるGRUBの解説文書を参照してください。

LILOではMBRに起動するカーネルの位置情報を記録しているため、カーネルを
更新するたびに lilo を再実行して、その情報をMBRに反映させなければいけ
ないのに対し、GRUBでは stage1 と stage2 という2段階の構成になっており、
MBRに置く stage1 では、実際の処理を司どる stage2 の位置を記録している
だけなので、カーネルを更新してもMBRを書き直す処理は不要になっています。

  stage2 の位置を動かせば、MBRに再インストールする必要があります。

GRUBはこのように高機能なブートローダですが、LILOに比べて多少サイズが大
きかったり、HDDの指定方法が煩雑であるという欠点もあります。

Linux/98では最初からブートローダとしてGRUBを採用しています。Plamo
Linuxでも、1.4以降はインストール用のミニLinux用にはGRUBを使うようになっ
ています。ただし、HDDへインストールするブートローダはPC互換機ではLILO
のままです(PC98シリーズではGRUBです)。

本節では、GRUBの使用法とHDDへのインストール法について、必要となる機能
を中心に解説します。

\subsection{GRUBのモード}

GRUBには、大きく分けて、メニュー画面を表示して起動するカーネルや設定を選
択するメニューモード、メニュー画面の設定を編集するためのエントリ編集モー
ド、手動でコマンドを入力するコマンドモードの 3 つのモードがあり
ます。それぞれのモード間の移行は以下の通りです。以下では、これらの各モー
ドについて簡単に紹介します。

grub のモード遷移図 
                                                    c
                   Enter   +--------------------+   -->   +--------------------+        
 エントリの設定で  <---    |   メニューモード  |   <--    | コマンド入力モード | 
 起動                      +-------------------+    ESC   +--------------------+
                                |       ^                            |
                              e |       | ESC                        | boot
                                V       |                            V
                    b     +-----------------------+          ``kernel=.. ''の設定で   
  編集した設定で   <---   |  エントリ編集モード   |<+         起動
  起動                    +-----------------------+ |
                               |      ^             |
                         Enter |      | Enter       | ESC(行編集結果は破棄) 
                               V      |             |
                         +----------------------+   |
                         |   ライン編集モード   | --+
                         +----------------------+

\subsubsection{メニューモード}

あらかじめ menu.lst に登録した設定を表示して、必要な設定を選択するた
めのモードです。

menu.lst は、インストール用のFDならば /grub/menu.lst に用意されており、
AT用の標準的な menu.lst には以下のような設定が登録されています。

fallback = 1
title = boot mini-Linux from this FD
kernel = (fd0)/vmlinuz root=/dev/ram0 rw 
initrd = (fd0)/initrd.gz

title = ------------------------------------------------
pause = Press [ESC] to return menu

title = boot Windows98 from /dev/hda1
root = (0x80,0)
makeactive
chainloader = +1 

設定項目は title から次の title までが一つのエントリとして扱われ、メ
ニューモードで title 行で指定した文字列を選択すれば、そのエントリに指
定したコマンドが順に実行されます。

以下に、上記の menu.lst の設定について簡単に説明します。

・ fallback=1

何らかのエラーが生じた場合に起動するエントリの指定です。エントリ番号は
0から始まるので、この指定では2つ目のエントリ(この例ではWindows98に関す
る設定)が利用されることになります。

・title=...

メニュー画面でそのエントリを指定するためのラベルです。

・kernel=...

読み込むカーネルの指定です。カーネルに与える各種パラメータ
もここで指定します。FDやHDの指定方法は後述します。

.initrd=..

このエントリで使用する起動用ramdisk(initrd)の指定です。

・root=..

ルートパーティションとして使うパーテイションの指定です。Linuxではルー
トパーティションの位置はカーネルパラメータで指定するので、root=..  で
は指定できません。

・makeactive

指定したルートパーティションを起動可能なパーティションとして認識させる
ための指定です。Windows/DOSのパーティションをGRUBから起動する場合に必
要な設定です。

・chainloader = ..

指定したファイルやセクタをブートローダとして利用するための指定です。
Windows/DOSでは chainloader = +1 と指定して、パーティションの先頭セ
クタを読みこませる必要があります。Linux/98の場合、HDの仕様の違いにより
chainloader = +2 となります。

この menu.lst を読みこんだGRUBは、以下のようなメニュー画面を表示します。

 GRUB version 0.5(639K lower / 97216K upper memory)
 
 +--------------------------------------------------------------------+
 | boot mini-Linux from this FD                                       |
 | ------------------------------------------                         |
 | boot Windows from /dev/hda1                                        |
 |                                                                    |
 |                                                                    |
 |                                                                    |
 |                                                                    |
 |                                                                    |
 |                                                                    |
 |                                                                    |
 |                                                                    |
 |                                                                    |
 |                                                                    |
 +--------------------------------------------------------------------+
     Use the ↑ and ↓ keys for selecting which entry is highlighted.
      Press enter to boot the selected OS, 'e' to edit the
        commands before booting, or 'c' for command-line.

\subsubsection{エントリ編集モード}

メニュー画面で指定したエントリに対して、menu.lst の記述を編集するため
のモードです。カーネルパラメータを追加したい場合などに利用します。

編集したいエントリ行で`e'を押すとこのモードに移り、 menu.lst の記述
を表示します。

 GRUB version 0.5(639K lower / 97216K upper memory)
 
 +---------------------------------------------------------------------+
 |kernel = (fd0)/vmlinuz root=/dev/ram0 rw                             |
 |initrd = /initrd.gz                                                  |
 |                                                                     |
 |                                                                     |
 |                                                                     |
 |                                                                     |
 |                                                                     |
 |                                                                     |
 |                                                                     |
 +---------------------------------------------------------------------+
    Use the ↑ and ↓ keys for selecting which entry is highlighted.
    Press 'b' to boot, enter to edit the selected command in the
    boot sequence, 'c' for a command-line, 'o' to open a new line
    after ('O' for before) the selected line, 'd' to remove the
    selected line, or escape to go back to the main menu.

ここでカーソルキーの上下で反転行を動かし、Enter を押せばその行の設定が
修正できる状態になります。

[Minimum BASH-like line editing is supported. For the first word, TAB
 lists possible command completions. Anywhere else TAB lists the possible
 completions of a device/filename. ESC at any time exits.]

editing> kernel=(fd0)/vmlinuz root=/dev/ram0 rw _

編集が終れば、Enter でエントリ編集モードの画面に戻り、`b'を押すとその
エントリの設定でカーネルを起動します。コマンド行の入力画面では TAB を
押すと指定可能なコマンドやファイルシステム、ファイル名などの候補が表示
されます。

\subsubsection{コマンドラインモード}

menu.lst が存在しなかったり、メニュー画面から`c'を押すと、GRUBのコ
マンドを手動で実行できるコマンドラインモードに移行します。

TAB キーを押すと利用可能なコマンドのリストが表示されます。

[Minimum BASH-like line editing is supported. For the first word, TAB
 lists possible command completions. Anywhere else TAB lists the possible
 completions of a device/filename. ESC at any time exits.]

command> [TAB]
 Possible commands are: "pause= ...", "uppermem= <kbytes>", "root= <device>",
  "rootnoverify= <device>", "chainloader= <file>", "kernel= <file> ...",
  "module= <file> ...", "modulenounzip= <file> ...", "makeactive", "boot", and
  "install= <stage1_file> [d] <dest_dev> <file> <addr> [p] [<config_file]"

command> 

これらのコマンドのうち、Linuxのカーネルの起動に必要なコマンドは
``kernel=...''の指定程度です。``kernel=...''コマンドでは、menu.lstにお
ける指定と同様に、起動したいカーネルとカーネルパラメータを指定します。
カーネルとカーネルパラメータを指定して Enter を押すと、GRUBはカーネル
を読みこみます。

[Minimum BASH-like line editing is supported. For the first word, TAB
 lists possible command completions. Anywhere else TAB lists the possible
 completions of a device/filename. ESC at any time exits.]

command> kernel=(fd0)/vmlinuz root=/dev/ram0 rw
   [Linux-zImage, setup=0x1200, size=0x7aee0]

command> _

必要な指定が終われば boot コマンドを実行して、読み込ませたカーネルを
起動します。

command> boot<return>
Uncompressing Linux...done.
Now booting the kernel
...

\subsection{GRUBのデバイス指定}

GRUBでは、HDDはIDEもSCSIも共に(hdN)という形で扱います。複数のパーティ
ションがある場合、(hdN,M)という形になります。HDDはIDE が先、SCSIが後に
認識され、IDEではデバイス番号の順、SCSIではSCSI IDの順に番号が割りあて
られます。以下に2台のIDE HDDと1台のSCS IHDDが接続されている場合の例を
示します。GRUBではIDEとSCSIの違いは関係なく、0からの連番で番号を振るこ
とに注意してください。

HDDの種類                 Linuxでのデバイス名  GRUBのデバイス名 
---------------------------------------------------------------------------
最初のIDEディスク全体       /dev/hda           (hd0)

最初のIDEディスクの最初
のパーティション            /dev/hda1          (hd0,0)

2台目のIDEディスクの3番目
のパーティション            /dev/hdb3          (hd1,2)

最初のSCSIディスク
(全体では3台目のHDD)の
2番目のパーティション       /dev/sda2          (hd2,1)
--------------------------------------------------------------------------

通常、FDはパーティションを切ることはないため、全体を対象に(fd0)あるい
は(fd1)として扱われます。

\subsection{GRUBのHDドライブへのインストール}

Plamo/98ではデフォルトでGRUBがHDからのブートローダとしてインストールさ
れますが、Plamo/ATではGRUBは手動でインストールする必要があります。

GRUBはLinuxのコマンドとしてはインストールされず、GRUB自身のコマンドラ
インモードからインストールしなければならないため、GRUBをHDドライブにイ
ンストールするには、GRUBを書きこんだFDが必要になります。Plamo Linuxで
は、インストール用のミニLinuxシステムがGRUBを書きこんだFDとして利用で
きます。

  CD-ROMからインストールした場合など、インストール用のFDを作成していな
  い場合は、別途FDに書き出しておいてください。

必須ではありませんが、GRUBをインストールする際には、まず menu.lst を作っ
ておくのが便利でしょう。Plamo Linuxでは、/boot/grub ディレクトリにGRUB
関連のファイルをインストールするので、menu.lst もこのディレクトリに作っ
ておくのが便利でしょう。

menu.lst では、カーネルの位置とルートパーテイションの位置を指定する必
要があります。その他、カーネルパラメータが必要な場合も指定しておきます。
以下に、/dev/hda2 にLinuxをインストールした場合の menu.lst の例を示し
ます。

  title = boot Linux from /dev/hda2
  kernel = (hd0,1)/vmlinuz root=/dev/hda2 ro 

IDEのHDドライブとSCSIのHDドライブが一台ずつ接続されていて、SCSI HDの最
初のパーティション(/dev/sda1)にLinuxをインストールした場合は以下のよう
になります。

  title = boot Linux from /dev/sda1
  kernel = (hd1,0)/vmlinuz root=/dev/sda1 ro 


カーネルの位置をGRUBに知らせるための (hd1,0)/vmlinuz はGRUB流の書式に
なっていますが、ルートパーティションの位置をカーネルに知らせるための
root=/dev/sda1 はLinuxの書式になっていることに注意してください


このような /grub/menu.lst を用意した上で、GRUBの書きこまれたFD から起
動し、`c'を押してGRUBのコマンドラインモードに移行し、install=..コマン
ドを実行します。

GRUBの install コマンドの書式は以下のようになります。

  install= stage1 [d] dest_dev stage2 0x8000 [p] menu_file

ここで、stage1 と stage2 はGRUBの stage1 ファイルと stage2 ファイルの
位置を指定します。Plamo Linuxのデフォルトの状態では、これらのファイル
は /grub/ ディレクトリにインストールされるので、ルートパーティションの
位置をGRUBの書式で指定する必要があります。例えば、ルートパーティション
が /dev/hda2 の場合は(hd0,1)/grub/ になります。

dest_dev はGRUBの stage1 をインストールする先の指定です。HDドライブの
MBRにインストールする場合は (hd0) ですし、Linuxをインストールしたパー
ティションのスーパーブロックの場合は (hd0,1) のようになります。

  dest_dev の指定には d オプションがあり、このオプションを指定した場合、
  起動デバイスに関わらず、指定デバイスにGRUBをインストールします。通常
  は stage2 ファイルがあるディスクを対象にGRUBをインストールするので、
  それではうまくインストールできない場合にこのオプションを指定してみて
  ください。

0x8000 はGRUBの stage2 がメモリに読みこまれるアドレスで、Linuxではこの
値に固定されています。

[p] menu_file は、GRUBのメニュー用ファイルの位置の指定です。メニュー用
ファイルは必須ではありませんが、メニュー用ファイルが無いとGRUB は直接
コマンドモードになります。

/dev/hda2 にLinuxをインストールし、このHDドライブのMBRにGRUBを書きこむ
場合の指定は以下のようになります。

command> install (hd0,1)/boot/grub/stage1 (hd0) (hd0,1)/boot/grub/stage2  0x8000 p (hd0,1)/boot/grub/menu.list <return>

command> _

IDEとSCSIのHDドライブが一台ずつあり、SCSI HDドライブの最初のパーティショ
ン(/dev/sda1)にLinuxをインストールした場合の指定は以下の通りです。

command> install (hd1,0)/grub/stage1 d (hd0) (hd1,0)/grub/stage2 0x8000 p (hd1,0)/grub/menu.list<return>

command> _

GRUBはHDのMBRだけでなく、Linuxをインストールしたパーティションの先頭に
インストールすることも可能で、その場合は dest_dev の部分が (hd0,1) や 
(hd1,0) のようにドライブとパーティションを組み合わせた指定になります。

ブートローダにGRUBを使えば、カーネルをコンパイルし直した場合も、新しく
作成したカーネルを古いカーネルに上書きするだけで使えるようになります。

また、/boot/grub/menu.lst にエントリを追加することで、複数のカーネルを
切り替えて使うことも簡単にできます。例えば、新しく作成したカーネルを
/vmlinuz.new にコピーして、以下のような menu.lst を使えば、古いカーネ
ルと新しいカーネルを起動時に選択することができます。

title = boot original Linux from /dev/sda1
kernel = (hd1,0)/vmlinuz root=/dev/sda1 ro 

title = boot test Linux from /dev/sda1
kernel = (hd1,0)/vmlinuz.new root=/dev/sda1 ro

title = boot test Linux with /dev/hda2
kernel = (hd1,0)/vmlinuz.new root=/dev/hda2 ro

References
[plamo:12339] Re: ろくに使い方も分からずGRUBをいじったらplamo98, Shun-ichi TAHARA (田原 俊一)
[plamo:12340] Re: ろくに使い方も分からずGRUBをいじったらplamo98, Makoto Abe
[plamo:12343] Re: ろくに使い方も分からずGRUBをいじったらplamo98, KATOH Yasufumi

[検索ページ] [メール一覧]
Plamo ML 公開システム