This is Gentoo's testing wiki. It is a non-operational environment and its textual content is outdated.
Please visit our production wiki at https://wiki.gentoo.org
ハンドブック:AMD64/ブロック/ブートローダー
ブートローダーを選ぶ
これまでLinuxカーネルを設定すると共に、システムツールをインストールし、設定ファイルを修正してきました。そして今、最も重要なLinuxインストールの最後の一片をインストールします。それがブートローダーです。
ブートローダーは、ブート中にLinuxカーネルを起動することに責任を負っています。ブートローダーがないと、システムは電源ボタンが押されたときに、どう事を進めればいいのかわからなくなってしまいます。
amd64 に対して私たちは、 BIOS ベースのシステムについては GRUB2 または LILO を設定する方法を、UEFI システムについては GRUB2 または efibootmgr を設定する方法を文書化しています。
このセクションでは、ブートローダーパッケージの "emerge" と、ブートローダーのシステムへの "インストール" という表現を使っています。ここでいう "emerge" とは Portage を使ってソフトウェアパッケージがシステムで利用できるようにすることです。そして "インストール" はブートローダーが必要なファイルをコピーしたりディスク上の特定の領域に変更を加えることで、ブートローダーを有効化し次回起動時に使用可能な状態にすることを指します。
デフォルト: GRUB2
かつて Gentoo Linux では、現在 GRUB Legacy と呼ばれているものを推奨ブートローダーとして使っていました。名前の示す通り、この古い GRUB パッケージはもう活発に維持されておらず、 GRUB2 に取って代わられました。レガシーな GRUB についての詳しい情報は、 GRUB の記事を参照してください。
デフォルトでは、大半の Gentoo システムが GRUB Legacy の後継である GRUB2 (sys-boot/grub パッケージで利用できます) を使用しています。GRUB2 は追加の設定なしに従来の BIOS ("pc") システムで使うことができ、それ以外のプラットフォームでもビルド前のわずかな設定で済みます。詳しくは、 GRUB2 ページの 前提条件 節をご覧ください。
Emerge
MBR パーティションテーブルのみをサポートする従来の BIOS システムを使う場合、GRUBをインストールするのに追加の設定は必要ありません:
root #
emerge --ask --verbose sys-boot/grub:2
UEFI ユーザーの方へ: 上記のコマンドを実行すると、現在有効な GRUB_PLATFORMS 値が表示されます。UEFI 対応のシステムでは GRUB_PLATFORMS="efi-64"
が有効になっていることを確認してください (これがデフォルトです) 。もし有効になっていなければ、GRUB2 パッケージを EFI の機能付きでビルドするために、 GRUB2 を emerge する前に /etc/portage/make.conf にGRUB_PLATFORMS="efi-64"
を追加しなければなりません。
root #
echo 'GRUB_PLATFORMS="efi-64"' >> /etc/portage/make.conf
root #
emerge --ask sys-boot/grub:2
- なんらかの経緯で
GRUB_PLATFORMS="efi-64"
を有効にしていない状態で GRUB2 が emerge されてしまった場合は、この行を make.conf に追加して、 emerge に--update --newuse
オプションを渡せば、 world パッケージセット の依存関係を再計算することができます:
root #
emerge --ask --update --newuse --verbose sys-boot/grub:2
これで GRUB2 ソフトウェアがシステムに emerge されましたが、インストールが終わったわけではありません。
インストール
つぎに、 grub-install コマンドを使って、必要な GRUB2 ファイルを /boot/grub/ ディレクトリにインストールします。もし(システムがブートする)一番目のディスクにインストールするなら、 /dev/sda ですので、以下のどちらかのコマンドでインストールすることができます:
- BIOS を利用する場合:
root #
grub-install /dev/sda
- UEFI を利用する場合:
- Important
grub-install を実行する前に EFI システムパーティションがマウントされているか必ず確認してください。 grub-install が GRUB EFI ファイル (grubx64.efi) を間違ったディレクトリにインストールしてしまい、しかも間違ったディレクトリが使われた形跡をまったく残さないということが起こりえます。
root #
grub-install --target=x86_64-efi --efi-directory=/boot
- Note
--efi-directory
オプションは、 EFI システムパーティションのルートに変更してください。これは /boot パーティションが FAT の亜種でフォーマットされていない場合、必須です。
- Important
grub_install がCould not prepare Boot variable: Read-only file system
といったエラーを返した場合、コマンドを成功させるためには efivars という特別なマウントを読み書き可能な状態で再マウントする必要があるかもしれません:root #
mount -o remount,rw /sys/firmware/efi/efivars
いくつかのマザーボードメーカーは、EFI システムパーティション (ESP) 内の .EFI ファイルの場所として /efi/boot/ ディレクトリのみをサポートしているようです。GRUB のインストーラーは --removable
オプションを付けることでこの操作を自動的に行うことができます。以下のコマンドを実行する前に ESP がマウントされていることを確認してください。ESP が (以前お勧めしたとおり) /boot にマウントされているとすると、以下を実行します:
root #
grub-install --target=x86_64-efi --efi-directory=/boot --removable
このコマンドは UEFI 仕様で定義されているデフォルトディレクトリーを作成し、また grubx64.efi ファイルを同じ仕様で定義されている'デフォルト'の EFI ファイルの場所にコピーします。
設定
次に、/etc/default/grub ファイルと /etc/grub.d スクリプトで指定されたユーザ固有の設定をもとに、 GRUB2 設定ファイルを生成します。GRUB2 はどのカーネルを起動するか(/boot/ 内で利用可能な最上位のもの)、どれがルートファイルシステムかを自動で検出してくれるので、ほとんどの場合、ユーザによる設定の必要はありません。カーネルパラメータは /etc/default/grub の GRUB_CMDLINE_LINUX 変数で指定することができます。
最終的な GRUB2 の設定ファイルを生成するには、 grub-mkconfig コマンドを実行します:
root #
grub-mkconfig -o /boot/grub/grub.cfg
Generating grub.cfg ... Found linux image: /boot/vmlinuz-3.16.5-gentoo Found initrd image: /boot/initramfs-genkernel-amd64-3.16.5-gentoo done
このコマンドの出力を見て、ブートに必要な Linux イメージが見つかったという報告が少なくともひとつあることを確認してください。もし initramfs を使っているか genkernel でカーネルをビルドしている場合は、正しい initrd イメージが認識されていることも確認してください。もし確認できなかった場合、/boot/ にそれらのファイルが存在するかどうか ls コマンドで確かめてください。必要なファイルが存在していなければ、カーネルの設定とインストールをやり直さなければなりません。
接続されたドライブからほかのOSを検出するために、os-prober ユーティリティを使うこともできます。Windows 7、8.1、10、あるいはほかの Linux ディストリビューションが検出できるようになります。このようなデュアルブート環境を作るには、sys-boot/os-prober パッケージをインストールしてから grub-mkconfig コマンドを再実行するとよいでしょう。検出がうまくいかない時は、Gentoo コミュニティに助けを求める前に GRUB2 記事をよく読み直してみてください。
代替案1: LILO
Emerge
LILO (the LInuxLOader) は検証済みで、かつとても有用なLinuxのブートローダーです。しかしながら、GRUB と比べるといくつかの機能を欠いています。いくつかのシステムでは LILO は動作するものの GRUB は動作しないため、 LILO が今でも使われています。もちろん、 LILO をよく知っており使い続けたいと思っている人々もこれを使っています。どちらにしても、Gentoo は両方のブートローダーをサポートしています。
LILO のインストールは簡単です; emerge を使います。
root #
emerge --ask sys-boot/lilo
設定
LILO の設定をするにはまず、/etc/lilo.conf を作成します:
root #
nano -w /etc/lilo.conf
設定ファイルではブートできるカーネルを参照するためにセクションを使用しています。この設定ファイルで入力する必要があるので、カーネルファイル (カーネルバージョンも含む) や initramfs ファイルを確認しておいてください。
ルートファイルシステムが JFS の場合には読み書き可能なマウントの前にログをリプレイする必要があるため、
append="ro"
という行を各ブート項目の後に書き加えてください。/etc/lilo.conf
LILO の設定例boot=/dev/sda # Install LILO in the MBR prompt # Give the user the chance to select another section timeout=50 # Wait 5 (five) seconds before booting the default section default=gentoo # When the timeout has passed, boot the "gentoo" section image=/boot/vmlinuz-3.16.5-gentoo label=gentoo # Name we give to this section read-only # Start with a read-only root. Do not alter! root=/dev/sda4 # Location of the root filesystem image=/boot/vmlinuz-3.16.5-gentoo label=gentoo.rescue # Name we give to this section read-only # Start with a read-only root. Do not alter! root=/dev/sda4 # Location of the root filesystem append="init=/bin/bb" # Launch the Gentoo static rescue shell # The next two lines are for dual booting with a Windows system. # In this example, Windows is hosted on /dev/sda6. other=/dev/sda6 label=windows
異なるパーティション構成やカーネルイメージを使用している場合はそれに応じて調整してください。
initramfs が必要な場合、設定を変更してその initramfs ファイルを参照し、また initramfs に root デバイスの場所を渡すようにします:
/etc/lilo.conf
ブートエントリーに initramfs の情報を加えるimage=/boot/vmlinuz-3.16.5-gentoo label=gentoo read-only append="root=/dev/sda4" initrd=/boot/initramfs-genkernel-amd64-3.16.5-gentoo
追加のオプションをカーネルに渡す必要がある場合には append
文を使います。たとえばフレームバッファーを有効化するために video
文を追加するには:
/etc/lilo.conf
ブートオプションに video パラメータを追加するimage=/boot/vmlinuz-3.16.5-gentoo label=gentoo read-only root=/dev/sda4 append="video=uvesafb:mtrr,ywrap,1024x768-32@85"
genkernel を使用したユーザーは、そのカーネルがインストール CD に使われたのと同じブートオプションを使用することを知っておいてください。たとえば SCSI デバイスのサポートを有効化する必要がある時は doscsi
をカーネルオプションとして追加します。
それではファイルを保存して終了します。
インストール
仕上げに実行ファイル /sbin/lilo を起動して、LILO に /etc/lilo.conf の設定をシステムへ適用させます (つまり、自身をディスクにインストールさせます)。新しいカーネルをインストールしたりカーネルのファイル名が変更された際には、システムをブートさせるために lilo.conf ファイルに変更を加えるたびに /sbin/lilo を実行しなければならないことを覚えておいてください。
root #
/sbin/lilo
代替案2: efibootmgr
UEFI ベースのシステムでは、システムの UEFI ファームウェア (言い換えると最初のブートローダー) を直接操作して UEFI ブートエントリーを見つけ出すことができます。こうしたシステムでは GRUB2 のようなシステムのブートを補助する追加の (あるいは第二の) ブートローダーは必要ありません。それでも GRUB2 といった EFI ベースのブートローダーが存在しているのは、UEFI システムのブートプロセスにおける機能を拡張するためです。efibootmgr は、システムのブートについて最小限 (かつ厳格) なアプローチをとるユーザーにまさに適しています; ユーザーの多くにとっては (前に見た) GRUB2 を使用する方が簡単です。なぜなら GRUB2 は UEFI システムをブートする際に柔軟なアプローチを提供するからです。
sys-boot/efibootmgr アプリケーションはブートローダーではないということを覚えておいてください; これはインストール済みの Linux カーネルを(必要であれば)追加のオプションとともにブートさせたり複数のブートエントリーを使用したりできるように UEFI ファームウェアと対話して設定を更新するためのツールです。この対話は EFI 変数を介して行われます (したがって、EFI 変数のカーネルサポートが必要です)。
続ける前に EFI stub kernel の記事を必ず読んでください。カーネルをシステムの UEFI ファームウェアから直接ブートできるようにするには、特有のオプションを有効化しなければなりません。カーネルの再コンパイルが必要になる場合があります。また、efibootmgr の記事を見てみるのも良い考えです。
繰り返しますが、efibootmgr は UEFI システムのブートにおいて必須ではありません。Linux カーネルはそれ自体直接ブートさせることができ、また追加のカーネルコマンドラインオプションも Linux カーネルの中に組み込むことができます(ユーザーがブートパラメーターをコマンドラインオプションとして指定できるカーネルの設定オプションがあります)。initramfs でさえも、カーネルの中に'組み込む'ことができます。
この方法を選んだら、まず efibootmgr をインストールします。
root #
emerge --ask sys-boot/efibootmgr
そして /boot/efi/boot/ を作成してカーネルをその中に bootx64.efi という名前でコピーします:
root #
mkdir -p /boot/efi/boot
root #
cp /boot/vmlinuz-* /boot/efi/boot/bootx64.efi
つぎに、"Gentoo" という名称のブートエントリーが作成され、これは新規にコンパイルされたEFIスタブカーネルをブートするものであることを、UEFI ファームウェアに知らせます:
root #
efibootmgr --create --disk /dev/sda --part 2 --label "Gentoo" --loader "\efi\boot\bootx64.efi"
イニシャルRAMファイルシステム (initramfs)を用いるときには、適切なブートオプションを加えてください:
root #
efibootmgr -c -d /dev/sda -p 2 -L "Gentoo" -l "\efi\boot\bootx64.efi" initrd='\initramfs-genkernel-amd64-3.16.5-gentoo'
UEFI の定義には、ディレクトリーのセパレーターには \ を用いなければなりません。
これらの変更が完了したら、システムを再起動後から、"Gentoo" という名称のブートエントリーが利用可能になります。
代替案3: Syslinux
Syslinux は amd64 アーキテクチャ用のもう一つの代替ブートローダーです。MBR をサポートしており、バージョン 6.00 からは EFI ブートもサポートしています。また、PXE (ネットワーク) ブートやあまり知られていないオプションもサポートします。Syslinux は多くの人々に人気のあるブートローダーですが、このハンドブックではサポートしていません。このブートローダーの emerge やインストールに関する情報は Syslinux の記事で得ることができます。