102.2 レッスン 1
Certificate: |
LPIC-1 |
---|---|
Version: |
5.0 |
Topic: |
102 Linuxのインストールとパッケージ管理 |
Objective: |
102.2 ブートマネージャーをインストールする |
Lesson: |
1 of 1 |
はじめに
コンピュータの電源がオンになった時に、最初に実行するソフトウェアはブートローダーです。これは、オペレーティングシステムのカーネルをロードして、制御を渡すことを唯一の目的とするコードです。カーネルは必要なドライバーをロードし、ハードウェアを初期化してから、オペレーティングシステムの残りの部分をロードします。
GRUBは、ほとんどのLinuxディストリビューションで使用されているブートローダーです。LinuxカーネルやWindowsなどの他のオペレーティングシステムをロードすることができ、複数のカーネルイメージとそのパラメータを、別々のメニューエントリとして扱えます。起動するカーネルをキーボードから選択することができ、起動オプションやパラメータを編集するためのコマンドラインインターフェイスも使用できます。
ほとんどのLinuxディストリビューションは、インストール時にGRUB(実際にはGRUB 2)を自動的に構成するので、一般ユーザーがそれについて考える必要はありません。しかしシステム管理者は、たとえばカーネルのアップグレードに失敗した後に、ブート障害からシステムを回復できるように、ブートプロセスを制御する方法に対する知識が必要です。
このレッスンでは、GRUBをインストール、設定、操作する方法を学習します。
GRUB Legacy 対 GRUB 2
今では GRUB Legacy と呼ばれているオリジナルのGRUB(Grand Unified Bootloader)は、1995年にGNU Hurdプロジェクトの一部として開発されました。多くのLinuxディストリビューションが、それまでのLILOなどのブートローダーに代わるデフォルトのブートローダーとしてGRUBUを採用しました。
GRUB 2は、よりクリーンで安全かつ堅牢で強力であることを目指して、GRUBを完全に書き直したものです。GRUB Legacyと比較すると、柔軟な設定ファイル(スクリプト言語のように多くのコマンドや条件文が使える)、モジュール化された設計、優れたローカライズ/国際化など、多くの利点があります。
スプラッシュ画面を備えたテーマとグラフィカルなブートメニュー、ハードディスクにあるLiveCD ISOイメージの直接起動、非x86アーキテクチャのサポート、UUIDのユニバーサルサポート(ディスクとパーティションの選択を容易にする)など、他にもさまざまな利点があります。
GRUB Legacyの開発は既に終了しており(最後のリリースは2005年の0.97でした)、ほとんどの主要なLinuxディストリビューションはデフォルトのブートローダーとしてGRUB 2をインストールします。ただし、GRUB Legacyを使用しているシステムに出会う可能性もまだあるので、GRUB Legacyの使用方法と、GRUB 2との違いを理解しておくことが重要です。(訳注: 2010年代前半までにセットアップされたマシンは、GRUB Legacyを使用している可能性が高いです。)
ブートローダーはどこにあるか?
歴史的に、IBM PC互換システムのハードディスクは、1982年にIBM PC-DOS(MS-DOS)2.0用に作成されたMBRパーティションスキームを使用してパーティション分割されていました。
この方式では、ディスクの先頭セクターの512バイトをMBR(Master Boot Record)と呼び、そこにディスクのパーティション情報を記述したテーブル(パーティションテーブル)と、一次ブートローダーと呼ばれる起動用コードが置かれています。
コンピュータの電源を入れると、この非常に小さな(サイズ制限のため)起動用コードが読み取られて起動し、ディスク上の二次ブートローダ(通常はMBRと最初のパーティションの間の32KBスペースに位置する)に制御を渡し、その二次ブートローダーがオペレーティングシステムをロードします。
MBRパーティションディスクでは、GRUBのブートコード(一次ブートローダー)がMBRにインストールされます。これが、MBRと最初のパーティションの間にインストールされた “コア” イメージ(二次ブートローダー)をロードし、制御を渡します。この時点から、GRUBは残りの必要なリソース(メニュー定義、構成ファイル、追加モジュールなど)をディスクからロードできるようになります。
ただし、MBRには、パーティション数(初期には最大4つのプライマリパーティション、後に最大3つのプライマリパーティションと1つの拡張パーティションならびに複数の論理パーティション)と、ディスクサイズ(最大2TB)の制限があります。これらの制限を克服するために、UEFI( Unified Extensible Firmware Interface )規格の一部であるGPT( GUID Partition Table )と呼ばれる新しいパーティション方式が作成されました。
GPTパーティションディスクは、PC BIOSを搭載した古いコンピューターでも、UEFIファームウェアを搭載したコンピューターのいずれでも使用できます。BIOSを搭載したマシンでは、特別なBIOSブートパーティションにGRUBの後半部分が置かれます。
UEFIファームウェアを搭載したシステムでは、ESP(EFI System Partition)と呼ばれるパーティションから、GRUBファイル grubia32.efi
(32ビットシステム)ないし grubx64.efi
(64ビットシステム)が、ファームウェアによってロードされます。
/boot
パーティション
BIOSを搭載したマシンにLinuxをインストールする場合、ブートプロセスに必要なファイルを(独立した)ブートパーティションに保存し、それをルートファイルシステム直下の /boot
ディレクトリにマウントするのが一般的でした。
GRUBのような高機能なブートローダは、ルートファイルシステムをマウントして /boot
ディレクトリにアクセスすることができるので、現在のシステムではブートパーティションは必要ありません。しかし、ブートに必要なファイルを独立したファイルシステムに置いておくのは、(障害への対策として)良い習慣と言えます。
ブートパーティションを作成する場合には、ディスク上の最初のパーティションとするのが慣例です。オリジナルのIBM PC BIOSでは、ディスクの先頭528MB(MS-DOSでは504MB)までしかアクセスできなかったことから、このテクニックが生まれました。(訳注: 詳細は前のレッスンを参照してください。)
つまり、骨董PC(1996年以前に製造のもの)との互換性を確保するためには、/boot
パーティションをディスクの先頭からシリンダー1024(528 MB)の間に配置し、BIOSがブートローダーをロードできるようにします。(訳注: BIOSによるブートファイルを置く物理範囲の制約は、ハードディスクインターフェイス規格改定により何度か変わっています。1996年のATA-1996規格以降、このような制約はほぼ無くなりました。もちろん、現在のマシンではブートパーティションをどこに置いても構いません)。現在のLinuxにおけるブートパーティションの推奨サイズは、概ね300MB以上です。
/boot
を独立パーティションに置くその他の理由として、GRUB 2がサポートしていない暗号化やディスク圧縮を使用したり、あるいはルートファイルシステムを特殊なファイルシステムでフォーマットする場合などが挙げられます。
ブートパーティションの内容
/boot
パーティションの内容は、システムアーキテクチャや使用中のブートローダーによって異なりますが、x86ベースのシステムでは通常以下のファイルがあるのが普通です。これらのほとんどは、名前に -VERSION
サフィックスが付けられています。ここで -VERSION
は、Linuxカーネルのバージョンです。たとえば、Linuxカーネルバージョン 4.15.0-65-generic
の構成ファイルは config-4.15.0-65-generic
になります。
- 構成ファイル
-
このファイルの名前は、通常
config-VERSION
(上記の例を参照)です。Linuxカーネルの構成パラメータを格納しています。このファイルは、新しいカーネルをコンパイル、ないしインストールするときに自動的に生成されます。ユーザーが直接変更することはできません。 - システムマップ
-
このファイルは、カーネルのシンボル名(変数や関数など)と、そのメモリ内の位置(アドレス)を対応付ける参照表です。カーネルパニック という重大なシステム障害をデバッグするときなどに参照し、障害が発生したときに参照していた変数や関数を知ることができます。設定ファイルと同様に、ファイルの名前は通常
System.map-VERSION
です(例:System.map-4.15.0-65-generic
)。 - Linuxカーネル
-
これはオペレーティングシステムのカーネルそのものです。名前は通常
vmlinux-VERSION
です(例:vmlinux-4.15.0-65-generic
)。vmlinux
ではなくvmlinuz
という名前のこともあります。末尾のz
は、ファイルが圧縮されていることを示しています。 - 初期RAMディスク
-
この名前は通常
initrd.img-VERSION
です。RAMディスクにロードする、必要最小限のルートファイルシステムが収められています。その中には、カーネルが実際のルートファイルシステムをマウントするために必要なユーティリティとカーネルモジュールが含まれています。 - ブートローダー関連ファイル
-
GRUBがインストールされているシステムでは、これらは通常
/boot/grub
にあり、GRUB構成ファイル(GRUB 2の場合は/boot/grub/grub.cfg
、GRUB Legacyの場合は/boot/grub/menu.lst
)、モジュール(/boot/grub/i386-pc/
など)、翻訳ファイル(/boot/grub/locale/
)とフォント(/boot/grub/fonts/
)が含まれています。
GRUB 2
GRUB 2のインストール
GRUB 2をインストールするには grub-install
ユーティリティを使用します。システムが起動しない場合には、Live CDやレスキューディスクからシステムを起動し、本来の起動パーティションを見つけてマウントしてから、このユーティリティを実行します。
Note
|
以下のコマンドは、root権限でログインしていることを前提としています。一般ユーザーとしてログインしている場合は、まず |
システムの最初のディスクが ブートデバイス であることが普通です。ディスクに ブートパーティションが があるか調べるには、fdisk
ユーティリティを使用します。マシンの最初のディスク上のすべてのパーティションを一覧表示するには、次のコマンドを実行します:
# fdisk -l /dev/sda Disk /dev/sda: 111,8 GiB, 120034123776 bytes, 234441648 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x97f8fef5 Device Boot Start End Sectors Size Id Type /dev/sda1 * 2048 2000895 1998848 976M 83 Linux /dev/sda2 2002942 234440703 232437762 110,9G 5 Extended /dev/sda5 2002944 18008063 16005120 7,6G 82 Linux swap / Solaris /dev/sda6 18010112 234440703 216430592 103,2G 83 Linux
ブートパーティションには、ブート列のに *
が表示されます。上の例では、/dev/sda1
です。
(訳注: GPTパーティションのディスクでは、fdiskコマンドは原則として使用できません。代わりに partedコマンドを使用します。)
次に /mnt
の下に一時ディレクトリを作成して、その下にパーティションをマウントします。
# mkdir /mnt/tmp # mount /dev/sda1 /mnt/tmp
次に、ブート デバイス(パーティションでは ない)とブートパーティションがマウントされているディレクトリを指定して、grub-install
を実行します。システムに専用のブートパーティションがある場合、コマンドは次のとおりです。
# grub-install --boot-directory=/mnt/tmp /dev/sda
(訳注: MBRバーティションのディスクの場合のみです。GPTパーティション(UEFIシステム)の場合もgrub-installコマンドを使いますが、ブートローダーのインストール先をオプションで指定します。UEFIシステムでのブートプロセスはディストリビューションによって異なりますので、それぞれのディストリビューションのドキュメントを参照してください。)
ブートパーティションがなく、ルートファイルシステムの /boot
ディレクトリだけがあるシステムにインストールする場合は、そのディレクトリを grub-install
に指定します。次のようになります:
# grub-install --boot-directory=/boot /dev/sda
GRUB 2の設定
GRUB 2のデフォルトの設定ファイルは /boot/grub/grub.cfg
です。このファイルは自動的に生成されるので、手動で編集することはお勧めしません。GRUBの設定を変更するには、ファイル /etc/default/grub
を編集してから、update-grub
コマンドを実行して設定ファイルを再生成する必要があります。
Note
|
|
ファイル /etc/default/grub
には、起動するデフォルトカーネルの指定や、タイムアウト時間の設定、追加のコマンドラインパラメータなど、GRUB 2の動作を制御するオプションがあります。最も重要なものを示します:
GRUB_DEFAULT=
-
起動するデフォルトのメニューエントリを指定します。エントリを指定する数値(
0
、1
など)、エントリの名前(debian
など)、saved
といった値を取り、次に説明するGRUB_SAVEDEFAULT=
と組み合わせて使用します。メニューエントリはゼロから始まるので、最初のメニューエントリは0
、2番目は1
になることに注意してください。 GRUB_SAVEDEFAULT=
-
このオプションが
true
で、GRUB_DEFAULT=
がsaved
の場合、最後に選択したメニューエントリがデフォルトになります。 GRUB_TIMEOUT=
-
デフォルトのメニューエントリがタイムアウトで起動されるまでの時間(秒単位)。
0
に設定すると、メニューを表示せずにデフォルトのエントリを起動します。-1
に設定すると、ユーザーがエントリを選択するまで待機し続けます。 GRUB_CMDLINE_LINUX=
-
Linuxカーネルのエントリに追加するコマンドラインオプションを指定します。
GRUB_CMDLINE_LINUX_DEFAULT=
-
デフォルトでは、Linuxカーネルごとに2つのメニューエントリが生成されます。1つはデフォルトのオプションで、もう1つは保守用のエントリです。このオプションは、デフォルトのエントリにのみ追加するパラメータを指定します。
GRUB_ENABLE_CRYPTODISK=
-
y
を指定すると、grub-mkconfig
、update-grub
、grub-install
などのコマンドが、暗号化されたディスクを探して、起動時にそれらにアクセスするために必要なコマンドを追加します。これにより、ディスクにアクセスするためのパスフレーズが必要になるので、自動起動(GRUB_TIMEOUT=
が-1
以外)が無効になります。
メニューエントリの管理
update-grub
を実行すると、GRUB 2はマシン上のカーネルとオペレーティングシステムをスキャンして、対応するメニューエントリを /boot/grub/grub.cfg
ファイルに生成します。独自のエントリを追加したい場合には、/etc/grub.d
ディレクトリ内にスクリプトファイルを追加します。
それらのスクリプトファイルは実行可能である必要があり、update-grub
によって番号順に処理されます。たとえば、05_debian_theme
は 10_linux
の前に処理されます。独自のメニューエントリは、40_custom
ファイルに追加するのが一般的です。
メニューエントリの基本的な構文を以下に示します:
menuentry "Default OS" { set root=(hd0,1) linux /vmlinuz root=/dev/sda1 ro quiet splash initrd /initrd.img }
最初の行は常に menuentry
で始まり、{
で終わります。引用符で囲まれたテキストが、GRUB 2ブートメニューのエントリラベルとして表示されます。
set root
パラメータには、ルートファイルシステムが配置されているディスクとパーティションを定義します。GRUB 2では、ディスクにはゼロから番号が付けられるため、hd0
が最初のディスク(Linuxでは sda
)、hd1
が2番目のディスクというようになります。また、パーティションには1から始まる番号が付けられます。上の例では、ルートファイルシステムは最初のディスク(hd0
)の最初のパーティション(,1
)、つまり sda1
になります。
デバイスとパーティションを番号で指定するのではなく、ラベルやUUID(Universally Unique Identifier)を指定して、ファイルシステムを検索させることもできます。メニューエントリの search --set=root
に続けて、--label
とファイルシステムラベルを指定するか、--fs-uuid
とファイルシステムのUUIDを指定します。
ファイルシステムのUUIDを見つけるには、次のようにします:
$ ls -l /dev/disk/by-uuid/ total 0 lrwxrwxrwx 1 root root 10 nov 4 08:40 3e0b34e2-949c-43f2-90b0-25454ac1595d -> ../../sda5 lrwxrwxrwx 1 root root 10 nov 4 08:40 428e35ee-5ad5-4dcb-adca-539aba6c2d84 -> ../../sda6 lrwxrwxrwx 1 root root 10 nov 5 19:10 56C11DCC5D2E1334 -> ../../sdb1 lrwxrwxrwx 1 root root 10 nov 4 08:40 ae71b214-0aec-48e8-80b2-090b6986b625 -> ../../sda1
この例では、/dev/sda1
のUUIDは ae71b214-0aec-48e8-80b2-090b6986b625
です。GRUB 2でルートデバイスとして指定する場合は、search --set=root --fs-uuid ae71b214-0aec-48e8-80b2-090b6986b625
という行をメニューエントリに置くことになります。
search
を使用する場合には、GRUBがフロッピーディスクの検索に時間を浪費しないように、 --no-floppy
パラメータを追加するのが一般的です。
linux
行では、カーネルが置かれている位置を指定します(例では、ファイルシステムのルートにある vmlinuz
ファイル)。その後に、カーネルのコマンドラインパラメータを置くことができます。
例では、ルートパーティション(root=/dev/sda1
)を指定し、3つのカーネルパラメータを渡しています。ルートパーティションを読み取り専用でマウントし(ro
)、ほとんどの起動時メッセージを表示せず(quiet
)、スプラッシュ画面を表示します(splash
)。
initrd
行では、初期RAMディスクが置かれている位置を指定します。例では、ファイルシステムのルートにある initrd.img
ファイルです。
Note
|
ほとんどのLinuxディストリビューションでは、カーネルとinitrdをルートファイルシステムのルートディレクトリに置きません。通常は、 |
メニューエントリの最後の行は、文字 }
のみである必要があります。
GRUB 2との対話
システムを起動すると、GRUB 2のメニューが表示されます。矢印キーを使用してメニューエントリのひとつを選択し、Enter で起動します。
Tip
|
カウントダウンだけが表示されて、メニューが表示されない場合は、Shift を押すとメニューが表示されます。 |
メニューエントリで指示したオプションを編集するには、矢印キーでオプションを選択してから E を押します。すると、/boot/grub/grub.cfg
で定義されている menuentry
の内容を含むエディターウィンドウが表示されます。
オプションを編集したら、Ctrl+XないしF10を押して起動するか、Esc を押してメニューに戻ります。
GRUB 2シェルに入るには、メニュー画面で C(編集ウィンドウでは Ctrl+C)を押します。次のようなコマンドプロンプトが表示されます:
grub>
help
と入力して、すべてのコマンドのリストを表示するか、Escを押してシェルを終了してメニュー画面に戻ります。
Note
|
|
GRUB 2シェルからのブート
メニューエントリの設定ミスによりシステムが起動しない場合は、GRUB 2シェルを使用してシステムを起動できます。
まず、ブートパーティションを見つけます。(GRUBをシェルの)ls
コマンドを使用すると、GRUB2が検出したディスクとパーティションの一覧を表示します。
grub> ls (proc) (hd0) (hd0,msdos1)
上の例はシンプルで、ディスク (hd0)
が1つ、そのパーティションも1つだけです: (hd0,msdos1)
。
もちろん、表示されるディスクとパーティションはシステムによって異なります。この例では、ディスクがMBRパーティションで分割されているため、hd0
の最初のパーティションは msdos1
になります。GPTパーティションで分割されている時は gpt1
になります。
Linuxを起動するには、カーネルと初期RAMディスク(initrd)が必要です。(hd0,msdos1)
の内容を確認しましょう。(訳注: 末尾の /
に注意してください)。
grub> ls (hd0,msdos1)/ lost+found/ swapfile etc/ media/ bin/ boot/ dev/ home/ lib/ lib64/ mnt/ opt/ proc/ root/ run/ sbin/ srv/ sys/ tmp/ usr/ var/ initrd.img initrd.img.old vmlinuz cdrom/
Linuxのlsコマンドと同様に、-l
オプションを追加して、長いリストを取得できます(訳注:GRUB2の構成によってはオプションが使えないことがあります)。Tabを入力することで、ディスク、パーティション、ファイルの名前を補完することもできます。。
この例では、パーティションのルートディレクトリにカーネル(vmlinuz
)とinitrd(initrd.img
)があることに注意してください。無い場合には、list (hd0,msdos1)/boot/
で、/boot
の内容を確認するとよいでしょう。
次に、ブートパーティションを設定します。
grub> set root=(hd0,msdos1)
linux
コマンドで、Linuxカーネルをロードすることを指示します。カーネルのパスと、カーネルにルートファイルシステムの位置を知らせる root=
オプションを指定します。
grub> linux /vmlinuz root=/dev/sda1
初期RAMディスク initrd
をロードすることを指示します。initrdコマンドに、initrd.img
ファイルへのフルパスを指定します。
grub> initrd /initrd.img
最後に、boot
を使用してシステムを起動します。
レスキューシェルからのブート
起動に失敗した場合、GRUB 2は簡易版のレスキューシェルをロードすることがあります。コマンドプロンプトが、grub rescue>
になるので分かります。
このシェルからシステムを起動する手順は、前に示したものとほぼ同じです。ただし、動作させるには、いくつかのGRUB 2モジュールをロードする必要があります。
(前の例のように ls
を使って)ブートパーティションを見つけたら、set prefix=
コマンドで、GRUB 2のモジュールファイルを含むディレクトリへのフルパスを指示します。通常は /boot/grub
です。取り上げている例では、次のようになります:
grub rescue> set prefix=(hd0,msdos1)/boot/grub
次に、insmod
コマンドを使って、モジュール normal
と linux
をロードします。
grub rescue> insmod normal grub rescue> insmod linux
続いて、前の例と同様に、カーネルのパスと set root=
でブートパーティションを指定した、linux
コマンドと、初期RAMディスクのパスを指定する initrd
コマンドを実行し、最後に boot
コマンドでブートを試みます。
GRUB レガシー
稼働中のシステムにGRUBレガシーをインストールする
稼働中のシステムのディスクにGRUBレガシーをインストールするには、(GRUB 2と同様に)grub-install
ユーティリティを使用します。基本的なコマンドは grub-install DEVICE
です。ここで、DEVICE
にはGRUBレガシーをインストールするディスクを指定します。次の例では /dev/sda
です。
# grub-install /dev/sda
/dev/sda1
のようなパーティションではなく /dev/sda/
のように、GRUBレガシーをインストールする デバイス を指定することに注意してください。
GRUBのデフォルトでは、指定されたデバイスの /boot
ディレクトリに、必要なファイルをコピーします。別のディレクトリにコピーする場合は、--boot-directory=
オプションに、ファイルのコピー先へのフルパスを指定します。
GRUBシェルからGRUBレガシーをインストールする
何らかの理由でシステムを起動できず、GRUBレガシーを再インストールする必要がある場合は、GRUBレガシーブートディスクのGRUBシェルから再インストールできます。
GRUBシェル(ブートメニューで c
を入力して grub>
プロンプトが表示されている状態)からの最初の手順は、/boot
ディレクトリを含むブートデバイスを設定することです。たとえば、/boot
ディレクトリが、1番目のディスクの最初のパーティションにある場合、コマンドは次のようになります。
grub> root (hd0,0)
/boot
ディレクトリを含んでいるデバイスがわからない場合は、次のように find
コマンドを使用してGRUBに検索させることができます。
grub> find /boot/grub/stage1 (hd0,0)
デバイスが判明したら、前述のように(rootコマンドで)ブートパーティションを指定して、 setup
コマンドでGRUBレガシーをMBRにインストールすると共に、必要なファイルをディスクにコピーします。
grub> setup (hd0)
これで、システムを再起動すれば、正常に起動するはずです。
GRUBレガシーとそのメニューエントリを設定する
GRUBレガシーでは、/boot/grub/menu.lst
ファイルに、設定とメニューリストが保存されます。これは、コマンドとパラメータのリストを含む単純なテキストファイルであり、好みのテキストエディターで直接編集できます。
#
で始まる行はコメントと見なされ、空白行は無視されます。
それぞれのメニューエントリには、少なくとも3つのコマンドがあります。最初の title
は、メニュー画面に表示するオペレーティングシステムの名称などを指定します。2番目の root
は、GRUBレガシーが起動するデバイスないしパーティションを指示します。
3番目のエントリ kernel
には、そのエントリが選択されたときにロードするカーネルイメージへのフルパスを指定します。このパスは、root
パラメータに指定したデバイスのルートディレクトリからの相対パスであることに注意してください。
簡単な例を次に示します。
# This line is a comment title My Linux Distribution root (hd0,0) kernel /vmlinuz root=/dev/hda1
GRUB 2とは異なり、GRUBレガシーでは、ディスクとパーティションの両方を、ゼロからの番号で数えます。したがって、root(hd0,0)
コマンドでは、最初のディスク(hd0
)の最初のパーティション(0
)が、ブートパーティションになります。
kernel
コマンドに、ブートデバイスとカーネルパスの両方を続けて指定することができ、その場合には root
ステートメントを省略できます。次のようになります。
kernel (hd0,0)/vmlinuz root=dev/hda1
これは以下の例と同等です:
root (hd0,0) kernel /vmlinuz root=/dev/hda1
どちらも、最初のディスクの最初のパーティション(hd0,0
)の、ルートディレクトリ(/
)から vmlinuz
ファイルをロードします。
kernel
コマンドのパラメータ root=/dev/hda1
では、どのパーティションをルートファイルシステムとして使用するかを、Linuxカーネルに指示しています。これはLinuxカーネルのパラメータであり、GRUBレガシーのコマンドではありません。
Note
|
カーネルパラメータの詳細については、https://www.kernel.org/doc/html/VERSION/admin-guide/kernel-parameters.html を参照してください。(VERSIONはカーネルのバージョン番号です。) |
多くの場合、initrd
コマンドで初期RAMディスクイメージの位置を指定する必要があります。ファイルのフルパス指定は kernel
コマンドと同様で、パスの前にデバイスやパーティションを指定することもできます。例:
# This line is a comment title My Linux Distribution root (hd0,0) kernel /vmlinuz root=/dev/hda1 initrd /initrd.img
GRUBレガシーはモジュラー設計になっていて、追加のモジュールをロードして、特殊なハードウェアやファイルシステム、新しい圧縮アルゴリズムへの対応などを追加できます。なお、モジュールは(一般的なPCの場合)/boot/grub/i386-pc
ディレクトリある .mod
ファイルです。
モジュールを追加ロードするには、module
コマンドに続けて、.mod
ファイルへのフルパスを指定します。kernelやinitrdと同様に、root
コマンドで指定されたデバイスからの相対パスで指定することに注意してください。
以下は、Intel 800または900シリーズのビデオチップセット(2004年発表)を搭載したシステムで、フレームバッファの解像度を正しく設定するためのモジュール 915resolution
をロードする例です。
module /boot/grub/i386-pc/915resolution.mod
他のオペレーティングシステムのチェーンロード
GRUBレガシーには、WindowsなどのGRUBレガシーがサポートしていないオペレーティングシステムをロードするための、チェーンロード と呼ばれる機能を備えています。起動したGRUBレガシーが、目的のオペレーティングシステムのブートローダーをロードして実行します。
Windowsをチェーンロードするため例を示します:
# Load Windows title Windows XP root (hd0,1) makeactive chainload +1 boot
コマンドを順に見ていきましょう。Linuxの場合と同様に、root(hd0,1)
にロードしたいオペレーティングシステムのブートローダーがあるデバイスとパーティションを指定します。この例では、最初のディスクの 2番目の パーティションです。
makeactive
-
アクティブなパーティションであることを示すフラグをセットします。MBRのプライマリパーティションでのみ有効です。
chainload +1
-
GRUBにブートパーティションの最初のセクターをロードすることを指示します。そこには通常、ブートローダーが置かれています。
boot
-
(ロードした)ブートローダーを実行して、対応するオペレーティングシステムをロードします。
演習
-
GRUB 2のデフォルトの設定ファイルはどこにありますか?
-
GRUB 2の設定を変更するにはどうしますか?
-
GRUB 2に独自のメニューエントリを追加するには、どのファイルを変更しますか?
-
GRUBレガシーのメニューエントリはどのファイルに保存されていますか?
-
GRUB 2ないしGRUBレガシーのメニュー画面から、GRUBシェルに入るにはどうしますか?
発展演習
-
GRUBレガシーで、1番目のディスクの2番目のパーティションから起動するように、次のようなカスタムメニューエントリを書きました。
title My Linux Distro root (hd0,2) kernel /vmlinuz root=/dev/hda1 initrd /initrd.img
しかし、システムが起動しません。なにが問題ですか?
-
MBRパーティションのデバイス
/dev/sda
には複数のパーティションがあります。システムのブートパーティションを見つけるにはどうしますか? -
パーティションのUUIDを調べるにはどうしますか?
-
GRUB 2で、次のエントリがあります:
menuentry "Default OS" { set root=(hd0,1) linux /vmlinuz root=/dev/sda1 ro quiet splash initrd /initrd.img }
システムが、UUIDが
5dda0af3-c995-481a-a6f3-46dcd3b6998d
のディスクから起動するように変更してください。 -
GRUB 2を、デフォルトのメニューエントリを起動する前に10秒間待機するように設定するにはどうしますか?
-
GRUBレガシーシェルから、2番目のディスクの最初のパーティションにGRUBをインストールするにはどうしますか?
まとめ
このレッスンでは、以下の事柄を学びました:
-
ブートローダーとは何か。
-
GRUBレガシーとGRUB 2の違い。
-
ブートパーティションとは何で、そこに何が含まれるか。
-
GRUBレガシーとGRUB 2をインストールする方法。
-
GRUBレガシーとGRUB 2を設定する方法。
-
GRUBレガシーとGRUB 2にカスタムメニューエントリを追加する方法。
-
GRUBレガシーとGRUB 2のメニュー画面とシェルを操作する方法。
-
GRUBレガシーないしGRUB 2のシェル、ないしはレスキューシェルからシステムを起動する方法。
このレッスンでは、次のコマンドを説明しました:
-
grub-install
-
update-grub
-
grub-mkconfig
演習の解答
-
GRUB 2のデフォルトの設定ファイルはどこにありますか?
/boot/grub/grub.cfg
-
GRUB 2の設定を変更するにはどうしますか?
/etc/default/grub
ファイルを変更してから、update-grub
で設定を更新します。 -
GRUB 2に独自のメニューエントリを追加するには、どのファイルを変更しますか?
/etc/grub.d/40_custom
-
GRUBレガシーのメニューエントリはどのファイルに保存されていますか?
/boot/grub/menu.lst
-
GRUB 2ないしGRUBレガシーのメニュー画面から、GRUBシェルに入るにはどうしますか?
メニュー画面で
c
を押します。
発展演習の解答
-
GRUBレガシーで、1番目のディスクの2番目のパーティションから起動するように、次のようなカスタムメニューエントリを書きました。
title My Linux Distro root (hd0,2) kernel /vmlinuz root=/dev/hda1 initrd /initrd.img
しかし、システムが起動しません。なにが問題ですか?
ブートパーティションの指定方法が間違っています。GRUBレガシーでは、パーティションを ゼロ からカウントすることに注意してください(GRUB 2では1からです)。したがって、1番目のディスクの2番目のパーティションは、
root(hd0,1)
になります。 -
MBRパーティションのデバイス
/dev/sda
には複数のパーティションがあります。システムのブートパーティションを見つけるにはどうしますか?fdisk -l /dev/sda
を使用します。ブートパーティションには、アスタリスク(*
)が付けられます。 -
パーティションのUUIDを調べるにはどうしますか?
ls -la /dev/disk/by-uuid/
を使用して、パーティションを指すUUIDを探します。 -
GRUB 2で、次のエントリがあります:
menuentry "Default OS" { set root=(hd0,1) linux /vmlinuz root=/dev/sda1 ro quiet splash initrd /initrd.img }
システムが、UUIDが
5dda0af3-c995-481a-a6f3-46dcd3b6998d
のディスクから起動するように変更してください。set root
行を変更します。ディスクとパーティションを指定するのではなく、目的のUUIDを持つパーティションを探すように指示します。menuentry "Default OS" { search --set=root --fs-uuid 5dda0af3-c995-481a-a6f3-46dcd3b6998d linux /vmlinuz root=/dev/sda1 ro quiet splash initrd /initrd.img }
-
GRUB 2を、デフォルトのメニューエントリを起動する前に10秒間待機するように設定するにはどうしますか?
/etc/default/grub
に、GRUB_TIMEOUT=10
を 追加します。 -
GRUBレガシーシェルから、2番目のディスクの最初のパーティションにGRUBをインストールするにはどうしますか?
grub> root (hd1,0) grub> setup (hd1)