GRUB

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page GRUB and the translation is 98% complete.

GRUB 2 (GRand Unified Bootloader version 2) は、GRUB2 とも表記され、一般的には GRUB とも呼ばれ、多くのシステムアーキテクチャ上で、様々なファイルシステムからカーネルをロードすることができる、マルチブート 2 次ブートローダです。GRUB は PC BIOS、PC EFI、IEEE 1275 (Open Firmware)、SPARC、MIPS Lemote Yeeloong をサポートしています。

GRUB はオリジナルの GRUB Legacy ブートローダとは全く新しく作られており、シェルライクな構文を利用することで高度なスクリプトの作成が可能なのが特徴としており、オリジナルを置き換えるものです。

クイックセットアップアプローチが必要なら、GRUB2 Quick Start を参照してください。

システムを GRUB Legacy から GRUB2 に移行する方法については、GRUB2 Migration を見てください。

インストール

前提条件

make.conf 内の GRUB_PLATFORMS 変数は、GRUB が grub-install の使用時にどのターゲットを使用するかを制御します。amd64 アーキテクチャは多くのシステムで動作するプロファイルのデフォルト値を含んでいます。

ファイル /etc/portage/make.confEMU, EFIとPCをサポートするGRUB_PLATFORMS変数の設定例
GRUB_PLATFORMS="emu efi-32 efi-64 pc"

ターゲットのCPU毎に、次のプラットフォームがサポートされています:

プラットフォーム ターゲット
i386 ia64 mips mipsel powerpc sparc64 x86_64
ARC No No No Yes No No No
Coreboot Yes No No No No No 32-bit
EFI Yes Yes No No No No Yes
EMU Yes Yes Yes Yes Yes Yes Yes
IEEE 1275 (Open Firmware) Yes No No No Yes Yes 32-bit
Loongson No No No Yes No No No
Multiboot Yes No No No No No 32-bit
QEMU Yes No No No No No 32-bit
QEMU-MIPS No No Yes No No No No
PC Yes No No No No No 32-bit
メモ
環境変数 GRUB_PLATFORMS の値が変更された際にはいかなる場合でも、変更されたバイナリをビルドするため GRUB を必ず再 emerge する必要があります。以下の emerge のセクションで示したとおり、必ず --newuse --deep オプションを使用してください。

amd64プロファイルでは、(U)EFIサポートが既定で有効になっています。BIOSベースのシステムを使っている場合、余計な依存ファイルのインストールを避けるため、環境変数GRUB_PLATFORMSにはpcを指定して下さい。

USE フラグ

USE flags for sys-boot/grub GNU GRUB boot loader

device-mapper Enable support for device-mapper from sys-fs/lvm2
doc Add extra documentation (API, Javadoc, etc). It is recommended to enable per package instead of globally
efiemu Build and install the efiemu runtimes
fonts Build and install fonts for the gfxterm module
libzfs Enable support for sys-fs/zfs
mount Build and install the grub-mount utility
nls Add Native Language Support (using gettext - GNU locale utilities)
sdl Add support for Simple Direct Layer (media library)
test Enable dependencies and/or preparations necessary to run tests (usually controlled by FEATURES=test but can be toggled independently)
themes Build and install GRUB themes (starfield)
truetype Build and install grub-mkfont conversion utility
verify-sig Verify upstream signatures on distfiles

Emerge

次の emerge シンタックスを用いて GRUB をインストールします:

root #emerge --ask --newuse --deep sys-boot/grub

追加のソフトウェア

必要なら、os-prober ユーティリティ (sys-boot/os-prober で提供されます) をインストールして、grub-mkconfig コマンドを実行した際に GRUB が他のオペレーティングシステムを探索してブートエントリを生成するようにできます。たいていの場合、これで GRUB が自動で他のオペレーティングシステム (Windows 7、8.1、10 や他の Linux ディストリビューションなど) を検出できるようになります。

root #emerge --ask --newuse sys-boot/os-prober

GRUB (と、場合によってはsys-boot/os-prober) をインストールしても、ブートローダの機能は自動では有効化されません。これらは、オペレーティングシステムにブートローダソフトウェアをインストールするだけです。(システムのブート時にそれが使われるようにするために) システムそのものにブートローダをインストールするには、追加のステップが必要になります。これについては設定セクションで解説します。

GRUB ブートローダのインストール

GRUB をシステムのブートローダーとしてインストールする方法は、システムがどのようにブートするのか (どの種類のファームウェアか、例えば PC では、レガシーな BIOS か、その後継である UEFI か) と、ブートローダーがインストールされるディスクがどのようにパーティションされているのか (例えば PC では、パーティションレイアウトが MBR か GPT か) によって変わってきます。

この記事では次の場合についてをカバーします:

システムに対して適切なインストール方法の解説を選んでください。

UEFI と GPT

警告
64 ビット x86 ("x86-64" または "x64") プロセッサはレガシーな 32 ビットソフトウェアの実行に対応しているからといって、EFI 実装も同じことができるということはありません。64 ビット EFI が 32 ビット .efi ローダを実行することはできないでしょう! 初期の 64 ビット対応システム、言い換えると x64 プロセッサ (AMD64 または Intel 64 機能を持つ x86 プロセッサ) を備えたシステムの中には、例えば一部の初期の MacBook (Intel Core 2) や 2010 年以前の Windows コンピュータの中には、32 ビット EFI 実装を使用しているものがあったということに注意すべきです。このような場合では、プロセッサが 64 ビットでも (U)EFI は 32 ビットソフトウェアとして実装されているので、efi-32 が適切な EFI ターゲットになります。上と同様に 32 ビット EFI は 64 ビット .efi ローダを実行できないからです。
メモ
UEFI-CSM を使用する場合は、こちらではなく BIOS と MBR または BIOS と GPT を参考にしてください。CSM は "Compatibility Support Module" の略称で、これは BIOS エミュレーションといって、UEFI を BIOS のように動作させることができます。ファームウェア設定画面では "Legacy Mode" または "Compatibility Mode" と呼ばれていることも多いです。UEFI-CSM は必須の機能ではなく、主流市場のシステム (PC 等) からは 2020 年から消えつつあります。

UEFI と GPT でのパーティショニング

重要
UEFI GPT ブートには、システムに必ず FAT ファイルシステムを含んだ専用の EFI システムパーティションが必要です。

UEFI システムは EFI システムパーティション (ESP) 上の efi ファイルからブートします。EFI システムパーティションは実装を考慮したうえで、どんなサイズでもかまいません。

EFI システムパーティションにはブートローダだけを持たせることもでき、ブートローダとサポートファイルを持たせることもできます。典型的には、/boot はカーネルと追加の EFI サポートファイルを含み、一方で /boot/efi は実際の EFI ファイルのみを含んでいて、小さい傾向にあります。

メモ
EFI システムパーティションは /boot または /boot/efi に作成することができますが、/boot だけを使用するのがシンプルになる傾向があります。/boot/efi を使用すると、カーネルやブートローダのサポートファイルなどのファイルを、個別のパーティションおよびファイルシステム上、またはルートファイルシステム上に保持することができます。後者の場合、GRUB がルートファイルシステムにアクセスして必要なファイルを読めるようにする必要があり、これは常に可能とは限りません (例えばルートファイルシステムの暗号化をしている場合など)。

/boot/efi にスタンドアロンの EFI システムパーティションを作成する場合は、128MB のサイズがあれば妥当でしょう。これだけあれば複数の efi ファイルを保持できます。

メモ
動作中の efi ファイルのバックアップを取っておくと、新しい efi ファイルをインストールした後もそれをブートすることができ、またそれによる害はほとんどありません。

適したパーティショニングツールを使って、パーティションを作成してください。

fdisk を使用したパーティショニング
メモ
以下ではハンドブックのディスクの準備の節で記載されている通り、/boot パーティションが ESP に使用され、FAT32 としてフォーマットされていると想定します。例えばファイルシステム暗号化を使用している場合など、望みのシステム構成によっては /boot のために別のパーティションを使用するほうが望ましい場合もあります。

ブートパーティションを作成するために fdisk を使用する場合は、まず変更したいディスクを開いてください。この例では /dev/sda を使用します:

root #fdisk /dev/sda
fdisk (util-linux 2.38.1) へようこそ。
ここで設定した内容は、書き込みコマンドを実行するまでメモリのみに保持されます。
書き込みコマンドを使用する際は、注意して実行してください。

"g" を使用して新しいパーティションテーブルを作成できます:

コマンド (m でヘルプ):g
新しい GPT ディスクラベル (GUID: 4AB36B49-BAAD-D544-AC45-E3154565018D) を作成しました。

"n" を使用して新しいパーティションを作成できます:

コマンド (m でヘルプ):n
 
パーティション番号 (1-128, 既定値 1): 1
最初のセクタ (2048-121012190, 既定値 2048): 
最終セクタ, +/-セクタ番号 または +/-サイズ{K,M,G,T,P} (2048-121012190, 既定値 121010175): +128M
 
新しいパーティション 1 をタイプ 'Linux filesystem' 、サイズ 128 MiB で作成しました。

パーティションが作成されたら、ESP および Boot フラグを設定する必要があります。これはパーティションタイプEFI システムパーティションに設定することで行えます。これは、パーティションタイプを変更するために t オプションを使用し、EFI システムパーティションタイプに対応する 1 を選択することで実現できます:

コマンド (m でヘルプ):t
 
パーティション 1 を選択
パーティションのタイプ または別名(L で利用可能なタイプを一覧表示します): 1
パーティションのタイプを 'Linux filesystem' から 'EFI System' に変更しました。

最後に、w を実行することで変更を保存できます:

コマンド (m でヘルプ):w
 
パーティション情報が変更されました。
ioctl() を呼び出してパーティション情報を再読み込みします。
ディスクを同期しています。

パーティションが作成されたら、そのパーティションを FAT32 ファイルシステムを使用してフォーマットする必要があります。これは次で行えます:

root #mkfs.fat -F 32 -n efi-boot /dev/sda1
root #mkdir /boot/efi

新しいパーティションのパーティション uuid、またの名を PARTUUID を判断するには、次のコマンドを使用できます:

user $lsblk -o name,partuuid
lsblk -o name,partuuid
NAME         PARTUUID
sdd          
└─sd1       20f3d6cc-9781-3640-9232-0f5a8c662a60

このパーティションに対応する fstab 項目を作成するには:

ファイル /etc/fstab/boot/efi マウント項目の追加
PARTUUID=20f3d6cc-9781-3640-9232-0f5a8c662a60       /boot      vfat    noauto,noatime  1 2
root #mount /boot
メモ
/etc/portage/make.conf ファイルで環境変数 GRUB_PLATFORMS を設定しておくと便利です。これは GRUB が適切な EFI ターゲットを検出する際にどのオプションを用いるかを決定する助けになるでしょう。32 ビット UEFI システムには efi-32 を、64ビットシステムには efi-64 を利用してください。
重要
GRUBを適切にインストールするためには grub-install コマンドを実行する前に、必ずEFIディレクトリがマウントされていて、かつ efivars カーネルモジュールもロードされている必要があります

EFI 向けに GRUB をインストールする

重要
EFI GRUB インストールのためには、/boot または選択された ESP パーティションが利用できる必要があります。fstab に対応するエントリがある場合は、以下でマウントすることができます:
root #mount /boot

grub-install コマンドを実行することで、GRUB と必要なサポートファイルが /boot/grub にコピーされます。これにより GRUB が /boot/grub にインストールされ、そのコアブートローダイメージを /boot/EFI/gentoo/grubx64.efi にコピーしたのち、efibootmgr を呼び出してブートエントリを追加します。

root #grub-install --efi-directory=/boot
Installation finished. No error reported.
重要
上のコマンドは、FAT でフォーマットされた EFI システムパーティション (ESP) が /boot/ にマウントされていることを前提にしています。異なる ESP パーティションを使用している場合は、そのパスを指定してください。
メモ
GRUB はデフォルトでは、コマンドが実行されたシステムと同じシステムタイプをターゲットとしてインストールします。他のシステムタイプを使用する場合は、--target オプションを使用して指定することができます。
メモ
--removable オプションは GRUB を /boot/EFI/BOOT/BOOTX64.EFI にインストールするために使用できます。この場所はデフォルトでチェックされることが多いので、互換性が向上するかもしれません。

BIOS と MBR

メモ
このシステムで Microsoft Windows などの他の (インストール済みの) オペレーティングシステムとデュアルブートする場合、Linux ブートローダが両方のオペレーティングシステムを共存させる、つまりデュアルブートすることができることを確認してください。PC では、インストール済みのシステムと同じブート方法を使用することが推奨されます。例えば、Windows がレガシー MBR パーティショニングを使用しているときは、ブートローダも 'legacy BIOS' モード (UEFI ではこれを Compatibility Support Module、略して CSM と呼びます、つまるところ BIOS エミュレーションです) で起動します。モードが変更された場合、例えば EFI-CSM (BIOS モード) からネイティブ (U)EFI モードに変更された場合、インストール済みのシステムはほぼ確実にブート不可能になるでしょう。

/boot を確実に利用可能にしてください。もしこれが独立したパーティションなら、確実にマウントしてください:

root #mount /boot

関連するファイルを /boot/grub にコピーするために、 grub-install コマンドを実行してください。PCプラットフォームではさらに、これによってマスターブートレコード(MBR)かパーティションのブートセクタにブートイメージがインストールされます。もしすべてがうまくいけば、 grub-install の実行後、以下のような出力が得られることが期待されます:

root #grub-install /dev/sda
Installation finished. No error reported.

grub-install は、CPUアーキテクチャとシステムプラットフォームを指定するための --target オプションを受け付けます。指定しなかった場合、 grub-install は適切な値を推測しようとします。amd64/x86 システムにおいては、デフォルトで i386-pc が使用されます。 grub-install はまた、ブートファイルを探す場所をGRUBインストーラに知らせるための --boot-directory オプションを受け付けます。これはデフォルトでは /boot ですが、ルートパーティションを移動しようとしている場合などに有用です。

BIOS と MBR でのパーティショニング

最初のパーティションの前に十分な空き領域を用意しておいてください。最初のパーティションをセクタ2048で開始すれば、少なくとも1MiBのディスク領域がマスターブートレコードに残されることになります。GRUBのための"BIOSブートパーティション"とよばれる追加パーティションを作成することが(必須ではありませんが)推奨されます。このパーティションは定義される必要があるだけで、フォーマットは必要ありません。これは後からシステムがGPTパーティションレイアウトに移行される時に必要です。MBRを使い続ける限りは必要ありません。

もし Gentoo インストール手順に従ったのなら、BIOS ブートパーティションはすでに有効なはずです。

BIOS と GPT

警告
GPT はレガシー BIOS で使用できるように設計されていません。保護 MBR によって BIOS システムへの配置はできるようになっていますが。さらに、MBR からブートされるように設計されている (これは BIOS コンピュータ上での事実上の標準です) レガシーなオペレーティングシステムとのデュアルブートは、MBR を利用してパーティションにアクセスする必要があり、これは GPT/MBR ハイブリッドパーティションを作成することで可能になります。しかしながら、この手法には特有の制約があります。

GPT でパーティショニングされたディスクを持つ BIOS システムでは、GRUB は「BIOS ブートパーティション」と呼ばれるパーティションを利用します。このパーティションはファイルシステムによってフォーマットされず、代わりに grub-install がその中にブートローダの一部をコピーします。「BIOS ブートパーティション」は /boot パーティションとは異なります。

メモ
x86 ハンドブックの BIOS ブートパーティションとはもお読みください。

もし /boot パーティションが必要ならば、 /boot パーティションのマウントから始めましょう。

root #mount /boot

すべてがうまくいけば、 grub-install コマンドの実行後、以下のような出力が得られることが期待されます:

root #grub-install /dev/sda
Installation finished. No error reported.

grub-install は、CPUアーキテクチャとシステムプラットフォームを指定するための --target オプションを受け付けます。指定しなかった場合、 grub-install は正しい値を推測しようとします。amd64/x86 システムにおいては、BIOS モードではデフォルトで i386-pc が使用され、GUID パーティションテーブル (GPT) との組み合わせで "BIOS ブートパーティション" が存在している場合は、自動的にこれが使用されます。

grub-install はまた、ブートファイルを探す場所を GRUB インストーラに知らせるための --boot-directory オプションを受け付けます。これはデフォルトでは /boot ですが、ルートパーティションを移動しようとしている場合などに有用です。

Windows とのデュアルブート

このシステムで、BIOS モードでインストールされた Microsoft Windows とデュアルブートする場合、ネイティブ GPT パーティショニングの機能を完全に使用することはできません。Windows は、'CSM' と呼ばれる (U)EFI の BIOS エミュレーションモードも含めて、BIOS モードでは MBR パーティションからしかブートできません。一方で Linux では、BIOS (または EFI-CSM) モードからでも GPT パーティショニング方式を使用できますが、Windows とのデュアルブートのためにハイブリッドパーティショニングとする必要があります: 4 個までのパーティションが GPT と MBR のパーティションテーブルの両方に同時に定義できます。

メモ
従来 x86-PC はファームウェアとして BIOS を使用していました。PC での (U)EFI への切り替え (2005 年ごろ) 後は、'Compatibility Support Module' (CSM) と呼ばれる BIOS エミュレーションがあり、それにより PC は既存のオペレーティングシステムとの互換性を保っていました。EFI-CSM は 2020 年頃から PC 市場の主流から消えつつあります。2020 年以前でも、サーバなどの一部の (U)EFI 実装では CSM を完全に欠いた製品もあります。そのため、'Legacy BIOS mode' は現代の UEFI システムではもう利用できません。ネイティブブートモードの UEFI は GUID パーティションテーブル (GPT) を要求するので、インストール済みのオペレーティングシステムは既に GPT パーティショニング方式を使用しているでしょう。

ブートモードまたはパーティショニング方式を変更すると、インストール済の Windows はブート不能になるでしょう。さらに、古い Windows は GPT も EFI もまったくサポートしておらず、BIOS または EFI-CSM を MBR とともに使用することを要求します。Windows が EFI をサポートしている場合、ネイティブ UEFI モードと GPT パーティショニング方式で再インストールし、Linux も同様にすることができます。UEFI と GPT のセクションを見てください。

GPT と MBR のハイブリッドパーティショニングは、有効な GPT パーティションテーブルと有効な MBR パーティションテーブルを同時に作成しますが、MBR のプライマリパーティション数が最大 4 個である制限から、ハイブリッドパーティションの総数は 4 個までに制限されます。ESP (EFI ブートローダを保存する EFI システムパーティション) が 1 個のパーティションを取ることから、MBR と GPT で共有されるパーティションは 3 個だけしか残りません。そのうち 1 個を Windows のために、1 個を Linux のために使用すると、それ以外の用途に、例えば分離された Linux /boot パーティションや、2 つのオペレーティングシステム間で共有されるデータのパーティションとして利用できるハイブリッドパーティションは、1 個だけです。

警告
GPT パーティションテーブルは通常、ディスク全体にまたがる 1 パーティションだけを含む MBR パーティションテーブルも作成します。これによって、古いソフトウェアによってディスクが '空' であると誤認識されないようになるしょう。この保護パーティションを持つ MBR は、そのため '保護 MBR' と呼ばれ、GPT 仕様に含まれています。ハイブリッドパーティションを定義すると、この GPT の保護機能は失われます! レガシーソフトウェアがハイブリッド MBR を解析しても、使用済み領域を認識できなくなるでしょう。GPT を認識せず MBR しか認識しないソフトウェアは、MBR 上定義されていないディスク領域を、未使用の空き領域として誤認識するかもしれません。MBR で定義されたパーティションの外へのデータの書き込みは、背後にある GPT パーティションのデータ損失を引き起こすおそれがあります!

If there are two physical disks available to the system, a great solution is to have one disk use the GPT and the other the MBR partitioning scheme. Normally, the Windows installation uses only one partition as 'system partition' and 'boot partition', called 'drive C:'. When in BIOS mode the initial partition for booting, the 'system partition', must be an MBR partition. This applies to every Windows version since Windows XP and includes Windows 10. Since Windows Vista (actually Windows XP x64 Edition) the Microsoft operating system supports accessing GPT partitions. The solution is to relocate the 'system partition' part of an installation to the MBR partitioned disk, and convert the 'boot partition' (the one containing \WINDOWS) into a GPT partitioned disk. Windows can thereafter access all the GPT partitions on the one disk, and will continue to use the MBR partitions (or hybrid partitions) on the disk containing the 'system partition'. The Windows installation (containing \WINDOWS) would be a GPT partition, even when booted in BIOS mode. Windows 11 no longer supports BIOS/CSM/MBR mode.

BIOS と GPT でのパーティショニング

GPTパーティションテーブルがシステムに存在するとき、タイプ EF02 の小さな"BIOSブートパーティション"(タイプ EF00 の"EFIシステムパーティション(ESP)"とは異なります)を有効にする必要があります。動作させるには1MiBで十分ですが、2-4MiBがより安全な選択でしょう。このBIOSブートパーティションがブートローダーのステージ2を保持することになります。BIOSブートパーティションはファイルシステムでフォーマットされる必要はありません。grub-install コマンドが独自のファイルシステムで既存のファイルシステムを上書きします。

重要
BIOSブートパーティションと一般的に/bootがマウントされるパーティションは同じではありません/boot と BIOSブートは別のパーティションにあるため、それぞれ別々に扱われるべきです。BIOSブートパーティションは絶対にシステムにはマウントされません。 (例えば/etc/fstabに定義されていないはずです)。対して/bootパーティションは何ら問題なく必ずマウントされるので、/etc/fstabファイルで定義することもできます。

パーティションをBIOSパーティションとして設定するには、コマンドラインツールの parted (sys-block/parted) を用い、以下のようにタイプしてください(1をBIOSブートパーティションに設定したいパーティションの番号に置きかえてください!):

(parted)set 1 bios_grub on

sys-apps/gptfdiskcgdisk ユーティリティでは、これはパーティションタイプを 0xEF02 に設定し、 gptbios というラベルを設定することで全うされます。

EFIシステムパーティションは必要ではありませんが、システムのマザーボードがUEFIのボードにアップグレードされたとき、後からこれに変更できるよう、BIOSブートパーティションを十分大きくしておくのはまともな判断でしょう。

次に示すのは、BIOSブート [0xEF02] パーティションとEFI [0xEF00] パーティションの両方を含むGPTパーティションのディスクで gdisk ユーティリティを用い、 p キーを押したときの出力です:

root #gdisk /dev/sdc
GPT fdisk (gdisk) version 0.8.1
 
Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present
 
Found valid GPT with protective MBR; using GPT.
 
Command (? for help): p
Disk /dev/sdc: 976773168 sectors, 465.8 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): AA369F4D-37A4-4C0D-A357-DC24B99A6337
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 976773134
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)
 
Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048       828377087   395.0 GiB   8E00  Linux LVM
   2       828377088       891291647   30.0 GiB    0700  Microsoft basic data
   3       891291648       975177727   40.0 GiB    0700  Microsoft basic data
   4       975177728       976754687   770.0 MiB   8300  Linux filesystem
   5       976754688       976756735   1024.0 KiB  EF02  BIOS boot partition
   6       976756736       976773134   8.0 MiB     EF00  EFI System
 
Command (? for help): 
メモ
fdiskをGPTで用いるときは、十六進数の0x接頭辞の入力は必要ありません。

同様のセットアップに対し、parted ユーティリティはやや異なる記法で出力を返します:

root #parted /dev/sdc
GNU Parted 3.0
Using /dev/sdc
(parted) print
...
Sector size (logical/physical): 512B/512B
Partition Table: gpt
  
Number  Start   End    Size    File system  Name                  Flags
 1      1049kB  424GB  424GB                Linux LVM             lvm
 2      424GB   456GB  32.2GB               Microsoft basic data
 3      456GB   499GB  42.9GB               Microsoft basic data
 4      499GB   500GB  807MB   ext2         Linux filesystem
 5      500GB   500GB  1049kB               BIOS boot partition   bios_grub
 6      500GB   500GB  8396kB               EFI System            boot
  
(parted)

gdisk でのパーティションの作成は、すでに fdisk パーティショニングユーティリティに慣れているユーザーにとっては理解しやすいでしょう。gdisk を開始したら、メインメニューで(newを意味する) n をタイプし、(必要なら)開始と終了のセクタを与え、EFIシステムパーティションに EF00 パーティションタイプを設定してください。

Gentoo インストール手順に従ったユーザーならば、すでに適切なパーティションレイアウトに設定されているはずです。

PowerPC 上の Open Firmware (IEEE 1275)

GRUB on Open Firmware (PowerPC) を参照してください。

Install on encrypted partition

If the whole disk is encrypted, including /boot, extra steps need to be taken, to allow GRUB to decrypt and mount the device.

The device-mapper USE flag needs to be set when emerging thee GRUB package. Then the sys-fs/cryptsetup package needs to be installed. The partition needs to be encrypted as luks1 partition type.

After installing GRUB on the device, depending on the way the kernel is setup, initramfs might need to be modified in order for the system to boot completely. If a distribution kernel is installed, Dracut will be installed on the system as well and can be used to finish the configuration.

設定

GRUB がインストールされたら、特定のシステムに合うように設定することができます。多くの場合、追加の設定は不要です。

メインの設定ファイル

grubの設定を生成するために、grub-mkconfig スクリプトを使います。これは /etc/grub.d/* 以下のスクリプト及び /etc/default/grub 設定ファイルを用い、最終的な /boot/grub/grub.cfg を――GRUB自体が使用する唯一の設定ファイルを――生成します。

ファイル フォーマット 編集すべきか? 説明
/usr/sbin/grub-mkconfig POSIX シェルスクリプト No sys-boot/grub:2 パッケージの一部としてインストールされます。 下に説明されるファイルを設定した後、このスクリプトを実行して /boot/grub/grub.cfg を生成します。
/boot/grub/grub.cfg GRUB シェルスクリプト No grub-mkconfig が生成するファイルです。このファイルはGRUBのビルトインスクリプトインタプリタによって評価されるもので、必ずしもすべてのPOSIXコマンドやシンタックスをサポートするものではありません。サポートされる機能については、GRUBマニュアルの scripting reference を参照してください。このファイルに対する変更は、次回 grub-mkconfig が実行されたとき保持されないことに注意してください。
/etc/grub.d/* POSIX シェルスクリプト Maybe /etc/grub.d/* 以下の、実行可能属性がセットされたスクリプトは順番に評価され、標準出力が結合されて最終的な /boot/grub/grub.cfg(もしくは grub-mkconfig -o オプションで指定された何らかのファイル)を形成します。これらのスクリプトはその時のシステムのシェルを使うので、あらゆるサポートされたシンタックスを使うことができます。理想的にはPOSIX互換のスクリプトであるべきであり、また、出力されるスクリプトはGRUBのインタプリタと互換性のあるものでなければなりません。スクリプトを無効にしたり追加したりすることが必要かもしれません。例えば、自動では生成できないようなメニュー項目を追加したい時など。
/boot/grub/custom.cfg GRUB shell script Maybe このファイルが存在する場合、/etc/grub.d/41_custom のスクリプトがこのファイルを参照して起動時に読み込まれます。このファイルは新たなメニュー項目やコマンドを追加するために提供されており、grub.cfgを再生成する必要がありません。
/etc/default/grub POSIX シェルスクリプト Yes ほとんどの場合、直接変更されるべきファイルはこのファイルただ一つです。これは主に、 /etc/grub.d のスクリプトで用いられる変数を設定して、使える設定ファイルを生成するために利用されます。サポートされる変数については、GRUB configuration variables もしくは official reference を参照してください。

GRUBは、(GRUB LegacyLILO のような) 管理者によるブートオプション設定の手動での維持を必要としません。その代わりに、grub-mkconfig コマンドを用いて、設定ファイル (/boot/grub/grub.cfg) を生成することができます。このユーティリティは /etc/grub.d/ にあるスクリプトと /etc/default/grub の設定を使用します。

警告
ソフトウェアRAIDを使用しているとき、grub-mkconfig ユーティリティは正しく動作しません。/etc/grub.d/ にあるスクリプトの手動設定が必要になり、そうしなければ、インストール後にシステムはブート不能な状態におかれることになるでしょう。

何らかの設定を変更したら、grub-mkconfig ユーティリティを /boot/grub/grub.cfgにある出力ファイル(これはGRUBのデフォルトの出力場所です)を指定した -o オプション付きで実行します:

root #grub-mkconfig -o /boot/grub/grub.cfg
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-3.3.0-gentoo
done

grub-mkconfig ユーティリティが呼ばれるたびに、新しい設定が生成されます。

警告
もし grub-mkconfig が見つかった項目を報告してこない場合、それはひとつも項目が見つかっていないということです。この場合、GRUBはシステムの再起動のあとブートオプションをひとつも提供してくれないことになり、解決に時間のかかるトリッキーな状況になるかもしれません。システムを再起動する前に、出力が申し分ないかどうか確かめてください。

設定パラメータのセット

/etc/default/grub にある次の変数はGRUBがどのように機能するかをコントロールするために設定される最も一般的なものです:

変数 説明 デフォルト値
GRUB_DEFAULT ブート時に最初に選択される項目を定義する変数です。番号の数字かメニュータイトル、あるいは"saved"を設定します。 最初に検出された項目がデフォルトになります。
GRUB_TIMEOUT デフォルトのメニュー項目をブートする前の遅延を秒で指定します。0に設定すると瞬時にブートし、-1にすると無期限に待ちつづけます。 デフォルトは5秒です。
GRUB_CMDLINE_LINUX すべてのLinuxメニュー項目のカーネルコマンドラインに与える引数を設定します。例えば、ハイバーネーションをサポートするためには、swapパーティションが /dev/sdXY なら、 GRUB_CMDLINE_LINUX="resume=/dev/sdXY" を追加する必要があります。
GRUB_CMDLINE_LINUX_DEFAULT リカバリ以外のLinuxメニュー項目のカーネルコマンドラインに与える引数を設定します。
GRUB_DEVICE 初期ルートデバイス(つまり、カーネルの root= 引数)を設定します。これを設定すると、 grub-mkconfig コマンドの自動検知したルートデバイスがオーバーライドされます。例えば、 GRUB_DEVICE=/dev/ram0 と設定すると、カーネルコマンドラインで強制的に root=/dev/ram0 が使われるようになります。

より完全なリストについては、configuration variables サブページと grub-mkconfiginfo ページを参照してください。

パラメータを変更したら、grub-mkconfig でGRUBの設定ファイルを再生成してください。

設定スクリプトの有効化と無効化

/etc/grub.d/ ディレクトリには、 grub-mkconfiggrub.cfg ファイルの生成に用いるスクリプトが含まれます。デフォルトでは、このディレクトリの中身は次のようなものであるはずです:

user $ls /etc/grub.d/
00_header  10_linux  20_linux_xen  30_os-prober  40_custom  41_custom README

GRUBは、インストールされたスクリプトのうち、実行可能に設定されたすべてのスクリプト(デフォルトでは全部がそうです)を利用します。いずれかのスクリプトを無効にするには、 chmod コマンドを用い、単にスクリプトのファイルパーミッションから実行可能ビットを取り除いてください。次の例では、 00_header10_linux を除く全てのスクリプトを無効にします。

root #chmod -x /etc/grub.d/{20_linux_xen,30_os-prober,40_custom,41_custom}

スクリプトを変更したり、実行可能ビットを取り除いたりした後は、 grub-mkconfig を用いて設定ファイルを再生成してください。

設定スクリプトに手を加える

いくつかの機能は、設定スクリプトの書き換えによってのみ利用することができます。例えば、FreeBSDとのデュアルブートをサポートするには次の操作が必要です。

/etc/grub.d/40_custom スクリプトを以下のように変更します:

ファイル /etc/grub.d/40_customデュアルブートの追加
menuentry "FreeBSD" --class freebsd --class bsd --class os {
 insmod ufs2
 insmod bsd
 set root=(hd0,1)
 kfreebsd /boot/kernel/kernel
 kfreebsd_loadenv /boot/device.hints
 set kFreeBSD.vfs.root.mountfrom=ufs:/dev/ada0s1a
 set kFreeBSD.vfs.root.mountfrom.options=rw
 set kFreeBSD.hw.psm.synaptics_support=1
}

/dev/sda1 もしくは (hd0,1) が、FreeBSDが置かれているパーティションです。FreeBSDパーティションに通常のUFSインストールが行われたなら、/dev/sda1 はコンテナになっています(論理パーティションのようなものです)。これはswapとルートパーティションからなります。ls -la /etc/grub.d/40_custom を実行し、40_custom が実行可能であることを確認してください。もし実行可能ビットがセットされていない場合は、chmod u+x 40_custom コマンドでセットしてください。

メモ
GRUB レガシーに慣れてきたユーザは、GRUB では、パーティション番号は 0 からではなく 1 から始まっていることに注意してください。

次に、GRUBをインストールし、設定ファイルを更新してください。

root #grub-install /dev/sda
root #grub-mkconfig -o /boot/grub/grub.cfg

拡張機能

GRUB 2 は、その多くの機能によって、非常にパワフルなブートローダーとなっています。サポートされる機能は:

  • UEFI パーティションからのブート
  • ハイブリッド MBR を必要としない、GPT でパーティションされたドライブからのブート (ハイブリッド MBR は、必要なら互換性と移植性のために有効にできます)
  • btrfs でフォーマットされた /boot パーティションからのブート
  • ZFS プールからのブート
  • 初期マウントセットアップのための initramfs を必要としない、btrfs RAID セットからの直接のブート
  • 論理ボリューム管理 (LVM2 など) からの直接のブート
  • DM-RAID (RAID 0、1、4、5、6、9、そして 10) をサポートしたブート
  • 暗号化されたデバイス (LUKS) からのブート

次にいくつかの項目について詳しく説明します。

チェーンロード

GRUB 2 は GRUB Legacy よりはるかに優れたチェーンロードモードが備わっています。他のブートローダーをチェーンロードするには、 chainloader オプションを利用してください。

ファイル /etc/grub.d/40_customほかのブートローダに引き継ぐ(チェインロード)
menuentry "Custom Super Bootloader Example" {
     insmod part_msdos
     insmod chain
     chainloader (hd1,1)+1
}

チェーンロードについてのさらなる情報は Chainloading サブ記事を参照してください。

GRUBのメニューのパスワード保護

ブートパラメータを変更できないようにしたり、コマンドラインを使用できなくすることでGRUBを安全にするには、ユーザ/パスワードの組み合わせをGRUBの設定ファイルに追加してください。grub-mkpasswd-pbkdf2がGRUB用のパスワードのハッシュを作成します:

user $grub-mkpasswd-pbkdf2
Password:
Reenter password:

PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.9CA4611006FE96BC77A...

そして、以下を追加してください:

ファイル /etc/grub.d/35_auth:
# Grub ユーザ名
echo 'set superusers="<username>"'
# Grub パスワード
echo 'password_pbkdf2 <username> <password-hash>'

上の設定はデフォルトの項目も含めて、すべての Grub メニュー項目をロックするかもしれません。その場合、パスワードなしで一部のメニュー項目をブートできるようにするためには、Securing the grub boot loader を参照してください。

grub-mkconfig を実行する前に、ファイルパーミッションを適切に設定する必要があります:

root #chmod 755 /etc/grub.d/35_auth

フレームバッファディスプレイを使う

GRUB でフレームバッファのグラフィカルな表示を利用するには、truetype USE flag を有効にして再 emerge してください。これによりフォント変換ツールとデフォルトの True Type フォントがインストールされます。

root #emerge --ask --newuse sys-boot/grub:2

次に、/etc/default/grub にあるデフォルト設定ファイルを設定します。例えば、

ファイル /etc/default/grubフレームバッファに関する設定
# 解像度と色深度の設定
GRUB_GFXMODE=1366x768x32
 
# カーネルのロードの際に解像度を保つ
GRUB_GFXPAYLOAD_LINUX=keep
 
# 背景画像の設定
GRUB_BACKGROUND="/boot/grub/bg.png"
 
# grub-mkfontユーティリティで変換したカスタムフォントを使う
GRUB_FONT="/boot/grub/fonts/roboto.pf2"

# メニューの色を設定する
GRUB_COLOR_NORMAL="light-blue/black"
GRUB_COLOR_HIGHLIGHT="light-cyan/blue"

HiDPI ディスプレイ

UHD (3840x2160) などの高い解像度 ("HiDPI") を備えた新しいディスプレイ上では、標準のフォントは非常に小さく見えるでしょう。カーネルと同じフォントを利用したい場合、Terminus を利用することができます。これは BIOS 組み込みテキストモードフォントによく似ています。

このフォントをカーネル内で選択するには、CONFIG_FONT_TER16x32 を有効化する必要があります。

カーネル カーネル組み込みフォント
Library routines  --->
      [*] Select compiled-in fonts
      [*] Terminus 16x32 font (not supported by all drivers)

これと同じフォントが media-fonts/terminus-font としても利用でき、インストールすればこれを GRUB でも使うことができます。

root #emerge --ask media-fonts/terminus-font
root #grub-mkfont -s 32 -o /boot/grub/fonts/terminus32b.pf2 /usr/share/fonts/terminus/ter-u32b.otb

上の例では、grub-mkfont の出力ファイル名を terminus32b.pf2 としています。フォントのパスはブート中に GRUB からアクセスできる必要があるので、GRUB と同じマウントポイントに置くべきです。この例では /boot/grub/fonts を使用しています。次にこれを使用するために、/etc/default/grub でフォントを GRUB_FONT として設定する必要があります。

ファイル /etc/default/grubフレームバッファ関連の設定
# grub-mkfont ユーティリティを利用して変換されたカスタムフォントを使う
GRUB_FONT="/boot/grub/fonts/terminus32b.pf2"

GRUB 設定ファイル grub.cfg を更新すると、新しいフォントを使用する設定が有効化されます。

root #grub-mkconfig -o /boot/grub/grub.cfg

トラブルシューティング

メモ
さらなるトラブルシューティングについては、Troubleshooting サブ記事を参照してください。

ほとんどの問題は、正しいパーティションレイアウトを確実に設定することで解決できます。ディスクの最初のパーティションの前に十分な領域を確保するか、任意で確実に"BIOSブートパーティション"が利用できるようにしてください。さらに、/boot/grub/grub.cfggrub-mkconfig で正しく生成されているか確認するか、あるいはカスタムのメニュー項目で生成してください。

os-prober が動作していない

grub-mkconfig コマンドを実行したときに、os-prober がインストールされているのに、期待通り動作していません:

root #grub-mkconfig -o /boot/grub/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.11.14-gentoo-x86_64
Found initrd image: /boot/amd-uc.img /boot/initramfs-5.11.14-gentoo-x86_64.img
Warning: os-prober will not be executed to detect other bootable partitions.
Systems on them will not be added to the GRUB boot configuration.
Check GRUB_DISABLE_OS_PROBER documentation entry.
Adding boot menu entry for UEFI Firmware Settings ...
done

これは /etc/default/grub ファイルで GRUB_DISABLE_OS_PROBER 変数を false に設定することで修正できます。

ファイル /etc/default/grub
GRUB_DISABLE_OS_PROBER=false

次の実行時に、grub-mkconfig はブート可能なパーティションを追加で見つけるはずです:

root #grub-mkconfig -o /boot/grub/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.11.14-gentoo-x86_64
Found initrd image: /boot/amd-uc.img /boot/initramfs-5.11.14-gentoo-x86_64.img
Warning: os-prober will be executed to detect other bootable partitions.
It's output will be used to detect bootable binaries on them and create new boot entries.
Found Windows Boot Manager on /dev/nvme0n1p2@/efi/Microsoft/Boot/bootmgfw.efi
Adding boot menu entry for UEFI Firmware Settings ...
done

.EFI ファイルを検知しないマザーボードファームウェア

一部メーカー製の特に古い (2020 年以前の) マザーボードには、EFI システムパーティション (ESP) 内の .EFI ファイルの置き場所として、フォールバックまたはリムーバブルメディア用のパス 1 箇所しかサポートしていないものがあるようです。これに当てはまると思われる場合、単純に GRUB のデフォルトファイルを /efi/boot/ に移動してください。まず、ESP がマウントされていることを確認してください。ESP が (ハンドブックで推奨されているように) /boot/efi にマウントされているとして、以下を実行してください:

root #mkdir -p /boot/efi/efi/boot
root #cp /boot/efi/efi/gentoo/grubx64.efi /boot/efi/efi/boot/bootx64.efi

32-bit EFI 実装では、代わりに bootia32.efi を使用してください:

root #cp /boot/efi/efi/gentoo/grubia32.efi /boot/efi/efi/boot/bootia32.efi

removable パラメータを使用して、このファイルを grub-install コマンドで自動的に作成することができます:

root #grub-install --efi-directory=/boot/efi --removable
Installation finished. No error reported.

これでマザーボードのファームウェアがGRUBの実行可能ファイルを読み込めるようになるはずです。システムを再起動して、ファームウェアが正しくGRUBを読み込むようになったか見てみましょう。

chroot環境下でのos-proberとUEFI

sys-boot/os-prober を使用すると、Microsoft WindowsなどのLinuxの代わりにインストールされたOSを検出できます。これを正しく動作させるには、EFIシステムパーティションのテストのためlive環境のudevの情報にアクセスできるようにする必要があります。

下記のコマンドをホスト環境で実行すると必要なファイルが得られます (この例では、ハンドブックにある通り Gentoo は /mnt/gentoo にマウントされているものとしています)。

root #mkdir -p /mnt/gentoo/run/udev
root #mount -o bind /run/udev /mnt/gentoo/run/udev
root #mount --make-rslave /mnt/gentoo/run/udev

新しいカーネルをインストール

新しいカーネルを GRUB に認識させるため、カーネルをインストールした際には必ず GRUB を再設定しなければなりません。下記のように、grub-mkconfig を実行することで再設定が可能です。あるいは手動で行うこともできます。

メモ
このステップでは /boot がマウントされている必要があります。
root #grub-mkconfig -o /boot/grub/grub.cfg
Generating grub.cfg ...
Found linux image: /boot/kernel-3.3.8-gentoo
Found initrd image: /boot/initramfs-genkernel-x86_64-3.3.8-gentoo
Found linux image: /boot/kernel-3.2.12-gentoo
Found initrd image: /boot/initramfs-genkernel-x86_64-3.2.12-gentoo
done

GRUBは単に「再設定」が必要なだけで、「再インストール」が必要なわけではありません。一方、GRUB自身が更新された際にはハードディスク上のGRUB2を再インストールする必要がありますが、このときには普通、再設定は必要ありません。

自動での GRUB 再設定

パッケージ sys-kernel/installkernel-gentoo がインストールされていて USE フラグ grub が設定されている場合、カーネルのインストールごとに grub-mkconfig が自動で実行されます。

関連項目

  • Chainloading には GRUB で他のブートローダーを利用する方法が書かれています。これはデュアルブートや ISO ファイルのブートを構成する必要がある場合には重要です。
  • Advanced storage には RAID や論理ボリューム、暗号化ファイルシステムなど、より最新のストレージを利用する際の GRUB インストール方法や利用方法が書かれています。
  • Configuration variables には /etc/default/grub で利用可能なすべての GRUB 設定変数がまとめられています。
  • Troubleshooting にはよくある GRUB のエラー (とそれらの解決策) が挙げられています。
  • Hybrid partition table には MBR/GPT が混合したハイブリッドパーティションの設定方法と、そのGRUBでの利用方法がまとめられています。

外部の情報

さらなる情報については、以下を参照してください:

参照