なぜブートローダの「インストール」が必要なのか
ブートローダ(GRUB 2等)は、単に設定ファイルを置くだけでは動作しません。ファームウェア(BIOS/UEFI)がブートローダを見つけて実行できるよう、起動方式に応じた場所・形式でブートローダ本体を配置する必要があります。この作業を行うのがgrub-installコマンドです。
MBR方式でのインストール
MBR形式のパーティションテーブル(Master Boot Record)は、伝統的なBIOS環境で使われるパーティションテーブル形式です。
MBRはディスク先頭の512バイトの領域で、主に次の情報を格納します。
| 領域 | サイズ | 内容 |
|---|---|---|
| ブートコード領域 | 446バイト | ブートローダの起動コード |
| パーティションテーブル | 64バイト | 4個のパーティションエントリ |
| ブートシグネチャ | 2バイト | MBRが有効であることを示す値(0x55AA) |
基本パーティションと拡張パーティション
MBRのパーティションテーブルには、パーティション情報を格納するエントリが4個しかありません。そのため、ディスク上に直接作成できる基本パーティション(Primary Partition)は最大4個です。
Linuxでは、基本パーティションには通常、次のようなデバイスファイル名が割り当てられます。
/dev/sda1
/dev/sda2
/dev/sda3
/dev/sda44個を超えるパーティションが必要な場合は、基本パーティションの1つを拡張パーティション(Extended Partition)として作成します。拡張パーティションは、ファイルシステムを直接作成して利用する通常のパーティションではなく、内部に論理パーティション(Logical Partition)を格納するための入れ物です。
論理パーティションの番号は通常、基本パーティションや拡張パーティションの使用数にかかわらず、5番から始まります。
/dev/sda1 基本パーティション
/dev/sda2 基本パーティション
/dev/sda3 拡張パーティション
/dev/sda5 拡張パーティション内の論理パーティション
/dev/sda6 拡張パーティション内の論理パーティションMBRにおける主な制限は次のとおりです。
- 基本パーティションは最大4個
- 拡張パーティションは基本パーティションの1つとして数えられる
- 拡張パーティションは1つのディスクに通常1個だけ作成する
- 拡張パーティション内には複数の論理パーティションを作成できる
- 一般的な512バイトセクタ環境では、扱えるディスク容量は約2TiBまで
構成例を図にすると、次のようになります。
ディスク /dev/sda
├─ /dev/sda1 基本パーティション
├─ /dev/sda2 基本パーティション
└─ /dev/sda3 拡張パーティション
├─ /dev/sda5 論理パーティション
└─ /dev/sda6 論理パーティションGRUBの配置
GRUB 2のような高機能なブートローダは、MBRの446バイトのブートコード領域だけには収まりません。そのため、MBRには最小限の起動コード(Stage 1に相当する部分)だけを配置します。
十分な連続未使用領域がある場合、GRUB 2の本体に相当するcore.imgは、MBRと最初のパーティションの間にあるMBRギャップ(BIOS Boot領域、embedding areaとも呼ばれる領域)へ配置されます。その後、core.imgが通常/boot/grub以下にあるGRUBのモジュールや設定ファイルを読み込みます。
ディスク先頭
│
├─ MBR
│ ├─ 最小限のGRUB起動コード
│ ├─ パーティションテーブル
│ └─ ブートシグネチャ
│
├─ MBRギャップ
│ └─ GRUB 2のcore.img
│
└─ 最初のパーティション
└─ /boot/grub などBIOS/MBR環境でGRUB 2をインストールする場合は、次のように実行します。
grub-install --target=i386-pc /dev/sdaここで、--target=i386-pcは32ビットOS専用という意味ではなく、BIOS起動用のGRUBをインストールするためのターゲット名です。64ビット版Linuxでも、BIOS方式で起動する場合は通常i386-pcを指定します。
注意
BIOS/MBR環境では、パーティション(/dev/sda1など)ではなく、ディスク全体(/dev/sda)を指定してGRUBをインストールするのが基本です。MBRは各パーティションの先頭ではなく、ディスク全体の先頭に存在するためです。
GPT方式でのインストール
GPT(GUID Partition Table)は、MBRより新しいパーティションテーブル形式で、UEFI環境で一般的に使われますパーティション設計全般(MBR/GPT、ESP等)については「ハードディスクのレイアウト設計」の技術解説記事でも扱っています。[1]。
MBRでは、1台のディスクに作成できる基本パーティションは最大4個に制限され、それ以上必要な場合は拡張パーティションと論理パーティションを使用します。一方、GPTにはこの区別がなく、一般的な構成では1台のディスクに最大128個のパーティションを作成できます。なお、128個という数はGPTの仕様上の絶対的な上限ではなく、標準的なパーティションエントリ領域を使用した場合の一般的な上限です。
GPTでは、ディスクの先頭付近にあるプライマリGPTヘッダーとパーティションエントリに加えて、ディスク末尾にもバックアップGPTヘッダーとパーティションエントリの複製が標準で配置されます。この冗長構成により、片方のパーティションテーブルが破損した場合でも、もう片方を利用して復旧できる可能性があります。
GPTディスクのおもな構造は、次のとおりです。
- 保護MBR(Protective MBR)
- プライマリGPTヘッダー
- プライマリ・パーティションエントリ
- 各パーティションの領域
- バックアップ・パーティションエントリ
- バックアップGPTヘッダー
保護MBRは、GPTに対応していない古いツールがディスクを未使用と誤認し、上書きすることを防ぐために配置されます。
GPTでは保護MBRの直後にGPTヘッダーとパーティションエントリが配置されるため、BIOS版GRUB 2は、MBR方式のようにMBR直後の未使用領域への埋め込みを利用しません。GPTをBIOSで起動する場合は、BIOS bootパーティションを使用します。
GPT+BIOSの組み合わせ:BIOS bootパーティション
GPTでパーティション分割されたディスクを、UEFIではなく従来のBIOSファームウェアで起動したい場合、GRUB 2の本体コードを格納するための領域が必要です。この目的で用意するのが、BIOS bootパーティションです。
BIOS bootパーティションは、GPTでBIOS boot用のパーティション種別に設定された、ファイルシステムを持たない小さな専用パーティションです。partedなどでは、通常、bios_grubフラグを設定します。サイズは1MiB程度が一般的で、GRUB 2の本体コードを格納するために使用されます。
| 環境の組み合わせ | ブートローダーの格納先 |
|---|---|
| BIOS+MBR | MBR+MBRギャップ |
| BIOS+GPT | 保護MBRの起動コード+BIOS bootパーティション |
| UEFI+GPT | EFIシステムパーティション(ESP、通常はFAT32) |
| UEFI+MBR | EFIシステムパーティション(ESP、通常はFAT32) |
UEFI環境でのインストール
UEFI環境では、GRUB 2は実行可能な.efiファイルとして、EFIシステムパーティション(ESP)に配置されます。ESPにはFAT形式のファイルシステムが使用され、通常はFAT32でフォーマットされます。
grub-installの実行時には、対象プラットフォームとESPのマウント先を指定します。たとえば、64ビットUEFI環境では、次のように実行します。
grub-install --target=x86_64-efi --efi-directory=/boot/efi--target=x86_64-efi:64ビットUEFI向けのGRUBを指定--efi-directory=/boot/efi:ESPのマウント先を指定
UEFI環境では、BIOS環境と異なり、インストール先としてディスクデバイスではなくESPのマウントポイントを指定する点が重要です。
UEFIファームウェアは通常、NVRAMに登録されたブートエントリを基に、ESP内のブートローダーの.efiファイルを読み込んで実行します。UEFIモードでgrub-installを実行すると、通常はこのブートエントリも登録されます。そのため、BIOS環境のように、MBRギャップへGRUB 2の本体コードを埋め込む仕組みは不要です。
GPTの主な特徴
- UEFI環境で一般的に使用される
- 従来のMBR方式における約2TiBの容量制限を超える大容量ディスクを扱える
- 基本パーティション、拡張パーティション、論理パーティションという区別がない
- 一般的な構成では、1台のディスクに最大128個のパーティションを作成できる
- ディスク先頭のプライマリGPTとディスク末尾のバックアップGPTを持つ
- GPTヘッダーとパーティションエントリが冗長化されており、破損時に復旧できる可能性がある
- GPT非対応ツールによる誤操作を防ぐため、ディスク先頭に保護MBRを持つ
- BIOSから起動する場合はBIOS bootパーティションが必要
- UEFIから起動する場合はEFIシステムパーティション(ESP)を使用する
grub-installの主なオプション
| オプション | 効果 |
|---|---|
--target=プラットフォーム | インストール対象のプラットフォームを指定する(i386-pc=BIOS、x86_64-efi=64ビットUEFI) |
--boot-directory=ディレクトリ | GRUBの各種イメージファイルをディレクトリ/grubに格納するための親ディレクトリを指定する(既定は/bootで、格納先は/boot/grub) |
--efi-directory=ディレクトリ | ESPのマウント先を指定する(UEFI環境のみ) |
--removable | リムーバブルメディア(USBメモリ等)向けの既定のパス(/EFI/BOOT/BOOTX64.EFI等)にインストールする(UEFI環境のみ)。通常はNVRAMのブートエントリを登録しない。 |
バックアップ用のブートオプションを用意する
出題範囲では、「代替のブート場所とバックアップ用のブートオプションの提供」も求められています。例えば、BIOS環境ではシステムディスクとは別のディスクのブート領域にもブートローダをインストールしておく、UEFI環境では別のディスク上のESPにもブートローダを配置しておく、あるいはリムーバブルメディア(USBメモリ等)にブート可能な環境を用意しておくことで、システムディスクのブートローダが破損した場合でも、代替の手段からシステムを起動・修復できるようにする、という考え方です。