GRUB

はじめに

第38章はじめに

単独で起動できないシステムは、役に立ちません。Linuxシステムには、ブート方法に多くの柔軟性があります。カーネルのバージョンやオプションを選択したり、マルチ ブートでオペレーティング システムを選択したりすることもできます。組み込み以外のほとんどのシステムは、Grand Unified Boot Loaderを使用して、システム初期化の最初の手順を実行します。GRUBには、インタラクティブな機能と安全なパスワード機能もあります。


学習目標
この章の終わりまでに、次のことができるようになります。

GRUBの役割を説明できます。
GRUBバージョン1とGRUBバージョン2の違いを理解できます。
起動時に行えるインタラクティブな選択について説明できます。
GRUBをインストールできます。
GRUBが必要とする構成ファイルが、どのように使用および変更されるかを説明できます。


GRUB

GRUBとは？
すべてのx86ベースのLinuxシステム（組み込み分野以外）は現在、システム起動の初期段階の処理に GRUB（GRand Unified Bootloader）を使用しています。他のプラットフォームにも、IA64（Itanium）などのEFIシステムで使用されるELILOや、多くの組み込み構成で使用されるDas U-BOOTなど、同等のものがあります。

GRUBのいくつかの重要な機能は次のとおりです。

ブート時に代替のオペレーティング システムを選択できます。
代替カーネルや初期RAMディスクは、特定のオペレーティング システムのブート時に選択できます。
ブート パラメータは、事前に構成ファイルなどを編集することなく、ブート時に簡単に変更できます。


GRUBのバージョン
GRUBバージョン2は、バージョン1の後継として、最新のすべてのLinuxディストリビューションで使われています。詳細はバージョンによって異なりますが、基本的な考え方は同じです。したがって、ここではバージョン2を中心に説明します。

ブート時に、基本構成ファイルである、/boot/grub/grub.cfg、/boot/grub2/grub.cfg、/boot/efi/EFI/redhat/grub.cfgのいずれかが読み取られます。

このファイルは、/etc/grub.dディレクトリと/etc/default/grubにある構成ファイルに基づいて、update-grub（またはgrub2-mkconfig）によって自動生成されます。決して手動で編集しないでください。通常、これらのユーティリティは、Linuxカーネルの更新やコンパイルで使用される、他のディストリビューション スクリプトを使って実行します。


GRUBを使用したブート時の対話型による選択
システムのブート時に、最初のPOSTとBIOSのステージの後、GRUBが開始され、メニューが表示されます。このメニューには、（少なくとも背景のスプラッシュ画面に対して）グラフィック表示が含まれている場合と含まれていない場合があります。

メニューには、1つ以上のLinuxディストリビューションまたはオペレーティング システムからブート可能なイメージのリストが含まれています。さらに多くの選択肢があるサブ メニューもあります。

上矢印、下矢印、Enterキーを使用して、正しいブート オプションを選択するか、デフォルトの選択肢が入力されるまで待つこともできます。この待ち時間は設定可能です。

さらに多くのことができます。エントリを選択した後、eを入力すればインタラクティブ シェルに入り、対話型で編集することができます。このシェルでは、特定のブート オプションを記述する構成ファイルのスタンザを変更できます。通常、これはカーネル コマンド ラインを変更するために使います。たとえば、コマンド ラインの最後にsingleという単語を追加すると、その修正は反映され、シングル ユーザー モードでシステムを起動します。目的の変更が行われたら、正しいキーを押してシステムをブート起動します。

画面の一番下には、正確なキー ストロークに関する情報が表示されるので、覚える必要はありません。

🚩
構成に加えた変更は恒久的ではないため、次回の起動時に失われます。恒久的な変更を行うには、適切なユーティリティを使用して、マシン上の実際のファイルを変更する必要があります。

特定のスタンザを編集するのではなく、シェルを使用することもできます。さまざまなコマンドを実行し、GRUBを再インストールまたは修復することもできます。構成ファイルが見つからないなどの重大な問題がある場合は、GRUBはこのコマンド ライン モードに戻るので、利用者はレスキュー メディアに頼らずにシステムを救うことができる場合があります。


GRUBのインストール
インストールという言葉は、GRUBに関していくつかの異なる意味を持ちます。

grubプログラムと関連ユーティリティの、適切な場所へのインストール。GRUB 1には実際にはgrubと呼ばれるプログラムがありますが、GRUB 2にはgrub2-*やgrub-*などの名前のユーティリティがたくさんあります。パッケージ化の方法は、ディストリビューションによって違います。
ブート時に必要なGRUBの設定ファイルのインストール。これらは/boot/grubまたは/boot/grub2の下にある必要があります。これは、/bootディレクトリに存在する必要がある、Linuxカーネルが必要とするファイル（vmlinuz-*、initramfs-*）とは別のものです。
GRUBをシステムのブートローダーとしてインストール。通常、ハードディスク全体の先頭セクタ（MBR）にインストールしますが、パーティション内にインストールし、1つのGRUBから別のGRUBへチェーンロードすることもできます。

システムのインストール中にGRUBをインストールしない場合、または後で再インストールする必要がある場合、そのための正確な手順はGRUBのバージョンによって異なります。どちらのバージョンでも、関連する重要な構成ファイルには、いくつかのグローバル パラメータと、各オペレーティング システムまたはカーネルの構成に関するスタンザが含まれています。

バージョン2 の場合、インストール手順は次のように簡単です。

$ sudo grub2-install /dev/sda

このようなコマンドを実行する前に、manページを注意して読んでください。多くのオプションがあります。GRUBを台無しにすると、システムが起動できなくなる可能性があります。特に、/bootディレクトリがどのパーティションに存在するかは、システムに伝える必要があります。

EFIマルチ ブート システムでは、より複雑になる可能性があるため、efibootmgrも実行する必要があります。詳細については、manページを参照してください。


GRUBデバイスの命名規則
どのバージョンのGRUBでも、最初のハードドライブはhd0、2番目はhd1、などと表示されます。ただし、バージョン1ではパーティションは0からカウントを開始し、バージョン2 では1 からカウントを開始します。

sda1 は GRUB 2 では（hd0,1）ですが、GRUB 1では（hd0,0）です。
sdc4 は GRUB 2では（hd2,4）ですが、GRUB 1では（hd2,3）です。

これに関する混乱は、破壊的なことになると強調するほどのものではありません。ただ、GRUBの両方のバージョンは、sda#表記や（hd0,#）を使用することもあるため、さらに混乱する可能性があります。

構成ファイル内で、各スタンザはルート パーティションを指定する必要があります。これは、システムのルート ディレクトリとは意味が異なります。ここでは、パーティションはカーネル自体を（/bootディレクトリに）含んでいるという意味です。たとえば、/bootを独自のパーティションに置くことは非常に一般的です。ここではそれを/dev/sda1とします。

この場合、kernel (hd0,0)/vmlinuz ...を実行しても問題ありません。代わりに、ルートの行を省略します。

grub.cfgを見てみれば、上記が明らかです。


GRUB構成ファイル
grub.cfgは直接編集すべきではないことを思い出してください。/etcディレクトリには注意が必要な2つのファイルなどがあります。これらは、システムが新しいカーネルで変更されたり、関連する更新プログラム（update-grubやgrubbyなど）が手動で実行される時に、 grub.cfgを再構築するために使用されます。

1つはファイルで、/etc/default/grubです。下のスクリーンショットは、あるRHEL 7システムで/etc/default/grubがどのように見えるかを示しています。Red Hatは、他のディストリビューションと比べるとこのファイルをスリム化しています。

RHEL 8の/etc/default/grubの例

注目すべきもう1つはディレクトリで、/etc/grub.dです。下のスクリーンショットは、Ubuntu 19.10でどう見えるかを示しています。

2つのファイルとディレクトリ（/etc/default/grubと/etc/grub.d）は、構成ファイルが更新された時に昇順で実行されます。それらは自己文書化されているため、ここでは説明しません。それらを参照することをお勧めします。

/etc/grub.dのコンテンツの例


Boot Loader Specification構成ファイル（BLSCFG）
BLSCFGで構成されたシステムでは、カーネルのインストールや更新などの際にはgrubコマンドを使用します。ブートしても同じ対話型のgrub画面が表示されるので、いつものように使用できます。

ただし、いくつか重要な違いがあります。たとえば、/boot/grub2/grub.cfgはまだ存在しますが、選択できる各カーネルの詳細情報とオプションはそこにはありません。それらは/boot/loader/entriesにあり、選択肢ごとに1つのファイルが存在します。

grub2-switch-to-blscfgプログラムを実行すると、新しいスキームに切り替えることができます。/etc/default/grubにある変数GRUB_ENABLE_BLSCFGS=[true|false]を変更することで、この新しいスキームの方法をオンまたはオフにすることもできます。たとえば、RHEL 8システムの場合：

$ sudo cat /etc/default/grub

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
GRUB_ENABLE_BLSCFG=true


/boot/loader/entries
Boot Loader Specification構成のスキームを使用すると、ブート可能な各カーネルは/boot/loader/entriesにエントリを取得します。

/boot/grub2/grubenvには、次のようないくつかの環境変数を設定できます。

kernelopts
tuned_initrd
tuned_params
grub_users

/boot/grub2/grubenvは、デフォルトのブート カーネルも設定します。

# GRUB Environment Block
kernelopts=root=UUID=6921b738-1e36-429a-89be-8b97cf2f0556 ro crashkernel=auto rhgb quiet
boot_success=1
boot_indeterminate=0
saved_entry=ce0c82382a8a4c80bbd6931a917a2f1c-5.5.11.0˜custom
################################################################################.....


デモ：GRUBの使用

このビデオでは、GRUBを使用してさまざまなオペレーティング システム、カーネルを選択する方法、またはシステムをブートするカーネル コマンド ライン パラメータを指定する方法について簡単に説明します。


演習

課題 38.1: GRUBを使用した非グラフィカル モードへのブート

🚩
以下のPDFドキュメントに埋め込まれた外部URLにアクセスする場合は、常に右クリックして新しいタブまたはウィンドウで開いてください。直接クリックしてURLを開こうとすると、コース ウィンドウ／タブが閉じます。

【【これ以降は橋本さんの訳を参照】】

Please Note

This exercise requires that it be run from the console (i.e., not over SSH).

1.  Reboot your machine and go into the GRUB interactive shell by hitting e (or whatever other key is required as listed onyour screen.)

2.  Make your system boot into non-graphical mode. How you do this depends on the system.
On traditional systems that respect runlevels (which we will talk about in the next section) you can append a 3 to the kernel command line in the specific entry you pick from the GRUB menu of choices.  This will still work on systemd systems that still bother to emulate SysVinit runlevels.
On some other systems you may need to append text instead.

3.  Hit the proper key to make system continue booting.

4.  After the system is fully operational in non-graphical mode, bring it up to graphical mode.  Depending on your system,one of the following commands should do it:

$ sudo systemctl start gdm
$ sudo systemctl start lightdm
$ sudo telinit 5
$ sudo service gdm restart
$ sudo service lightdm restart


知識チェック

「第38章 - GRUB」を完遂しました。おめでとうございます。このクイズに答えて、これまでに学んだ概念の理解度をチェックしてください。

クイズ開始

問題 38.1
GRUBなどのブートローダーは、Linuxだけで必要です。他のオペレーティング システム、特にプロプライエタリなものは、起動にブートローダーを必要としません。True or False?

A. True
B. False

問題 38.2
GRUBは、Linux、FreeBSD、Microsoft Windowsなどの複数のオペレーティング システムを起動できます。True or False?

A. True
B. False

問題 38.3
システムのブート時にGRUBをインタラクティブ モードで使用することはできません。True or False?

A. True
B. False

問題 38.4
ブートローダーの構成は、システム セキュリティに重要な影響を与える可能性があります。True or False?

A. True
B. False

問題 38.5
GRUBは、オペレーティング システムごとに1つの構成だけをサポートできます。したがって、単一のLinuxインストールの場合、これを使用して、異なるカーネル、カーネル オプション、またはルート ファイルシステムから選択することはできません。True or False?

A. True
B. False

問題 38.6
GRUB 2の主要な構成ファイルであるgrub.cfgは、直接編集する必要があります。True or False?

A. True
B. False
