ハンドブック:X86/ブロック/ブートローダー

From Gentoo Wiki
Jump to: navigation, search
This page is a translated version of the page Handbook:X86/Blocks/Bootloader and the translation is 100% complete.


32ビット CPU 用にインストールする場合でも、UEFI をサポートしているほぼすべての x86 マザーボード(2006-2007年頃から現在までのもの)は 64ビット UEFI ファームウェア を持っています。以下の節で "64" が設定やファイル名に出てくることに気付いたユーザーもいるかもしれません。これはほぼすべてのケースにおいて意図されたものです。

この64ビットファームウェアの法則にはいくつかのごくわずかな例外があります。というのは、ごく一部の初期の Apple Mac と、Intel Atom を搭載した Dell のタブレット PC のいくつかは32ビットファームウェアをサポートしています。読者のほとんどは、32ビット UEFI ファームウェアに実際に出会うことはないでしょう。そのため32ビット UEFI ファームウェアは x86 ハンドブックでは扱いません。


ブートローダーを選ぶ

これまでLinuxカーネルを設定すると共に、システムツールをインストールし、設定ファイルを修正してきました。そして今、最も重要なLinuxインストールの最後の一片をインストールします。それがブートローダーです。

ブートローダーは、ブート中にLinuxカーネルを起動することに責任を負っています。ブートローダーがないと、システムは電源ボタンが押されたときに、どう事を進めればいいのかわからなくなってしまいます。

x86 に対して私たちは、 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.confGRUB_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_installCould 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/grubGRUB_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-x86-3.16.5-gentoo
done

このコマンドの出力を見て、ブートに必要な Linux イメージが見つかったという報告が少なくともひとつあることを確認してください。もし initramfs を使っているか genkernel でカーネルをビルドしている場合は、正しい initrd イメージが認識されていることも確認してください。もし確認できなかった場合、/boot/ にそれらのファイルが存在するかどうか ls コマンドで確かめてください。必要なファイルが存在していなければ、カーネルの設定とインストールをやり直さなければなりません。

Tip
接続されたドライブからほかの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 ファイルを確認しておいてください。

Note
ルートファイルシステムが JFS の場合には読み書き可能なマウントの前にログをリプレイする必要があるため、append="ro" という行を各ブート項目の後に書き加えてください。
FILE /etc/lilo.confLILO の設定例
boot=/dev/sda             # MBRにLILOをインストールする
prompt                    # ユーザに他のセクションを選択させる機会を与える
timeout=50                # デフォルトのセクションを起動する前に5秒間待つ
default=gentoo            # タイムアウトに達した場合、"gentoo"セクションを起動する
compact                   # これは劇的にロード時間を減らし、マップファイルをより小さくし続ける。いくつかのシステムでは失敗する場合がある。
  
image=/boot/vmlinuz-3.16.5-gentoo
  label=gentoo            # このセクションの名前
  read-only               # ルートを読み込み専用で始める。変えないこと!
  root=/dev/sda4          # ルートファイルシステムの場所
  
image=/boot/vmlinuz-3.16.5-gentoo
  label=gentoo.rescue     # このセクションの名前
  read-only               # ルートを読み込み専用で始める。変えないこと!
  root=/dev/sda4         # ルートファイルシステムの場所
  append="init=/bin/bb"   # Gentooの静的レスキューシェルを起動する
  
# 次の2行はWindowsとのデュアルブートのための行です。
# この例では、Windowsは/dev/sda6に格納されているとします。
other=/dev/sda6
  label=windows
Note
異なるパーティション構成やカーネルイメージを使用している場合はそれに応じて調整してください。

initramfs が必要な場合、設定を変更してその initramfs ファイルを参照し、また initramfs に root デバイスの場所を渡すようにします:

FILE /etc/lilo.confブートエントリーに initramfs の情報を加える
image=/boot/vmlinuz-3.16.5-gentoo
  label=gentoo
  read-only
  append="root=/dev/sda4"
  initrd=/boot/initramfs-genkernel-x86-3.16.5-gentoo

追加のオプションをカーネルに渡す必要がある場合には append 文を使います。たとえばフレームバッファーを有効化するために video 文を追加するには:

FILE /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 の記事を見てみるのも良い考えです。

Note
繰り返しますが、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-x86-3.16.5-gentoo'
注意
UEFI の定義には、ディレクトリーのセパレーターには \ を用いなければなりません。

これらの変更が完了したら、システムを再起動後から、"Gentoo" という名称のブートエントリーが利用可能になります。

代替案3: Syslinux

Syslinux は x86 アーキテクチャ用のもう一つの代替ブートローダーです。MBR をサポートしており、バージョン 6.00 からは EFI ブートもサポートしています。また、PXE (ネットワーク) ブートやあまり知られていないオプションもサポートします。Syslinux は多くの人々に人気のあるブートローダーですが、このハンドブックではサポートしていません。このブートローダーの emerge やインストールに関する情報は Syslinux の記事で得ることができます。