GRUB2

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page GRUB2 and the translation is 85% complete.
Outdated translations are marked like this.
Other languages:
English • ‎español • ‎français • ‎polski • ‎português do Brasil • ‎русский • ‎中文(中国大陆)‎ • ‎日本語 • ‎한국어

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

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

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

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

インストール

sys-boot/grub パッケージはスロット化されています。grub-0.97 (GRUB Legacy) とgrub-2.02 は同時にインストールできますが、ハードディスク上のマスターブートレコード(MBR)にはどちらか1つのバージョンのGRUBのみをインストールすることができます。

It is recommended all systems should upgrade to GRUB2, since it supports all the same features sets as Legacy. Legacy was removed from the Gentoo ebuild repository.

前提条件

GRUB をどのプラットフォームにインストールするかコントロールするには、 make.conf において GRUB_PLATFORMS 変数をセットしてください。 amd64 アーキテクチャは多くのシステムで動作するプロファイルのデフォルト値を含んでいます。

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

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

Target
Platform 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 sectionで示したとおり、必ず--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 gettextGNU 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

Emerge

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

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

追加のソフトウェア

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

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

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

設定

GRUB の設定には2つの重要な作業があります:

  1. GRUB のソフトウェアを、システムのセカンダリブートローダーとしてインストール
  2. GRUB ブートローダー自体の設定

GRUBソフトウェアのインストールはシステムのタイプによってそれぞれ異なり、ブートローダーのインストールで解説します。まず、ブートローダそのものの設定について解説します。

メインの設定ファイル

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

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

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

/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 スクリプトを以下のように変更します:

FILE /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 レガシーに慣れてきたユーザは、GRUB2 では、パーティション番号は 0 からではなく 1 から始まっていることに注意してください。

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

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

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

Warning
The --efi-directory used in this article deviates from that one used in the AMD64 Handbook.

GRUBをシステムのブートローダーとしてインストールする方法は、システムがどのようにブートするのか(BIOSかUEFIか)と、ブートローダーがインストールされるディスクがどのようにパーティションされているのか(パーティションレイアウトがMBRかGPTか)によって変わってきます。

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

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

BIOS と MBR

注意
このシステムでMicrosoft Windowsとデュアルブートする場合、システムにUEFIファームウェアがないことを確認してください。このようなシステムがLegacy BIOSモードで起動されると、Microsoft Windowsは起動を拒否します。

/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 installation instructionsに従ったのなら、BIOSブートパーティションはすでに有効なはずです。

BIOS と GPT

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

Dual-boot with Windows

注意
このシステムでMicrosoft Windowsとデュアルブートする場合、システムにUEFIファームウェアがないことを確認してください。このようなシステムがLegacy BIOSモードで起動されると、Microsoft Windowsは起動を拒否します。また古いMicrosoft WindowsのシステムはGPTをサポートしないでしょうが、ハイブリッドMBR-GPT という方法が使用できます。Hybrid partition table参照のこと。
Note
Traditionally x86-PCs used a BIOS as firmware. After the switch to (U)EFI on PCs (around 2005) there used to be a BIOS emulation called 'Compatibility Support Module' (CSM), PCs were therefor still compatible with existing operating systems. On mainstream PCs the EFI-CSM has been phased out since 2020. Even before 2020 some (U)EFI implementations, such as servers, lacked the CSM completely. 'Legacy BIOS mode' is therefor no longer available on modern UEFI systems. UEFI in its native boot mode demands the GUID Partition Table (GPT), a pre-installed operating system will therefore already be using a GPT partitioning scheme.

An already installed Windows will refuse to boot when the boot mode or the partitioning scheme is changed. Also, older Windows systems don't support GPT (or EFI) at all, demanding that a BIOS or the EFI-CSM along with an MBR must be used. If Windows supports EFI it can be re-installed in the native UEFI mode and the GPT partitioning scheme, as well as Linux; see section UEFI with GPT.

Hybrid partitioning between GPT and MBR creates both a valid GPT partition table and a valid MBR partition table at the same time, but limits the total number of hybrid partitions to four because of the four primary partition limit of the MBR. Since the ESP (the EFI System Partition holding the EFI bootloaders) takes up one partition this leaves only three shared partitions between MBR and GPT. When one partition is used for Windows and one for Linux, there is only one additional hybrid partition possible, like a separate Linux /boot partition or a shared data partition between the two operating systems.

Warning
Normally, a GPT partition table will always also create an MBR partition table which holds only one partition spanning over the whole disk. This will ensure that older software doesn't mistake the disk as 'empty'. The MBR with its protective partition is therefor called a 'protecive MBR' and is part of the GPT specification. By defining hybrid partitions, this protective feature of the GPT is sacrificed! Legacy software will no longer see used space when analyzing the hybrid MBR. Software that is unaware of the GPT and only sees the MBR may mistake undefined disk space as unused and empty space. Data written between the defined MBR partitions may cause data loss to the underlying GPT partitions!

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) to 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.

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 installation instructionsに従ったユーザーならば、すでに適切なパーティションレイアウトに設定されているはずです。

UEFI と GPT

Note
If the UEFI-CSM is used, refer to BIOS with MBR or BIOS with GPT instead. CSM stands for 'Compatibility Support Module' and is a BIOS emulation, making the UEFI behave like a BIOS. In the firmware setup it is often called 'Legacy Mode' oder 'Compatibility Mode'. UEFI-CSM has always been optional and was phased out on mainstream systems (such as PCs) in 2020.

/boot が利用可能であることを確認してください。もし別のパーティションにあるなら、マウントされていることを確認してください:

root #mount /boot

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

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

上のコマンドは、vfatのEFIシステムパーティション(ESP)が /boot/efi にマウントされていることを前提にします。もしESPが /boot に直接マウントされているなら、--efi-directory=/boot としてください。

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

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

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

EFIパーティションは/dev/sda1上の/bootの役割を、 /dev/sda1上の/boot/efiへと移すことができます。つまりGRUBを使ったUEFIブートの場合でも、計2つ(スワップパーティションがあるなら計3つ)のパーティション、つまりルートパーティションとEFIパーティションで可能ということです。この設定を使うと、/bootフォルダはルート / と同じパーティションに置かれ、EFIパーティションは/bootフォルダの中の/boot/efiにマウントされます。下記の /etc/fstab の例を見るとはっきりするでしょう。

FILE /etc/fstabUEFIに対応したswapパーティションを含む /etc/fstab ファイルの例:
/dev/sda1		/boot/efi	vfat		noauto,noatime	1 2
/dev/sda2		none		swap		sw		0 0
/dev/sda3		/		ext4		noatime		0 1

/boot/efi は100MBもあれば複数の

  • .efi ファイルを格納するのには十分です(そもそも複数のエントリが必要になることは滅多になく、ほとんどのシステムは1つしか使いません)。

選びぬかれたパーティションツールを使ってパーティションを作成してください。gdisk (sys-apps/gptfdisk) と parted (sys-block/parted) はツールはこの目的には持って来いです。gdiskを使うときは必ずtype EF00を利用してください。

続いて次の例のように、 mkfs.fat を用いてEFIシステムパーティション上にFATファイルシステムを作成し、 /etc/fstab へ項目を追加してください。

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

代替案: デフォルトのUEFIファームウェアの場所を利用する

もしシステムのUEFIファームウェアがGRUBのEFIファイルを見つけられない場合、既定のブートローダの場所を利用することで解決するでしょう。このときefibootmgrが提供するブートメニューを使えないため機能は減りますが、エラーは起きづらくなります。これを行うためには、EFIパーティションが/boot/efiにマウントされていることを確認した上で/boot/efi/EFI/gentoo/grubx64.efiにあるgrubx64.efiファイルを/boot/efi/EFI/BOOT/BOOTX64.EFIにコピーして下さい。なおこの例では64bitのUEFIをシステムを前提としています。32bitの場合は適宜読み替えて下さい。

PowerPC 上の Open Firmware (IEEE 1275)

こちらをご覧ください。

拡張機能

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 オプションを利用してください。

FILE /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...

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

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

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

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

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

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

FILE /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"

トラブルシューティング

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

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

os-prober not running

When running the grub-mkconfig command, os-prober is not running as expected, even though it is installed:

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

This can be corrected by setting the GRUB_DISABLE_OS_PROBER variable to false in /etc/default/grub file.

FILE /etc/default/grub
GRUB_DISABLE_OS_PROBER=false

Upon the next run, grub-mkconfig should find additional bootable partitions:

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 ファイルを検知しないマザーボードファームウェア

いくつかのマザーボードメーカーは、EFIシステムパーティション(ESP)内の.EFIファイルについて1つの場所のみをサポートしているようです。これに当てはまると思われる場合、GRUBのデフォルトファイルを単に /efi/boot/ に移動してください。まず、ESPがマウントされていることを確認します。ESPが(Handbookで推奨されているように) /boot/efi にマウントされているとすると、以下を実行します:

root #mkdir -p /boot/efi/efi/boot
root #cp /boot/efi/efi/gentoo/grubx64.efi /boot/efi/efi/boot/bootx64.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の情報にアクセスできるようにする必要があります。

下記のコマンドをホスト環境で実行すると必要なファイルが得られます (この例では、Handbookにある通り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を再インストールする必要がありますが、このときには普通、再設定は必要ありません。

参考

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

外部の情報

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