rEFInd

提供: ArchWiki
2018年10月19日 (金) 15:48時点におけるYuisyo (トーク | 投稿記録)による版 (typoの修正)
ナビゲーションに移動 検索に移動

関連記事

rEFInd は UEFI のブートマネージャです。EFISTUB カーネルを起動することができます。既にメンテナンスされてない rEFIt のフォークであり、Mac 以外の UEFI ブートに関して多数の問題が修正されています。プラットフォームに依存せず、複数の OS を簡単に起動できるように設計されています。

ノート: この記事では EFI System Partition (ESP) のマウントポイントを esp で示します。

インストール

refind-efi パッケージをインストールしてください。

rEFInd には ReiserFS, Ext2, Ext4, Btrfs, ISO-9660, HFS+, NTFS の読み取り専用ドライバーが備わっています。さらに rEFInd は UEFI ファームウェアのドライバー (FAT あるいは Mac の場合 HFS+、一部の環境では ISO-9660) を使うことができます。

ノート: カーネルと initramfs は rEFInd が読み込めるファイルシステム上に配置する必要があります。バージョン 0.10.4 以前では Ext4 ファイルシステムの 64bit 機能に対応していません。

他のドライバーについては The rEFInd Boot Manager: Using EFI Drivers: Finding Additional EFI Drivers を参照してください。

スクリプトによる設定

rEFInd パッケージには refind-install というスクリプトが含まれており、簡単に rEFInd をデフォルトの EFI ブートエントリに設定できます。詳しくは refind-install(8) を参照してください。このスクリプトにはオプションが存在し、様々なセットアップや UEFI 実装に対応していますが、大抵は次を実行するだけで設定が可能です:

# refind-install

このコマンドは EFI システムパーティションを検出して、rEFInd のファイルを ESP 上の /EFI/refind/ にコピーし、efibootmgr を使って rEFInd をデフォルトの EFI ブートエントリとして追加します。

また、デフォルト/フォールバックのブートパスである /EFI/BOOT/BOOT*.EFI に rEFInd をインストールすることもできます。ブータブルな USB フラッシュドライブや、efibootmgr による NVRAM の変更に問題を抱えているシステム等で有用です:

# refind-install --usedefault /dev/sdXY

/dev/sdXY は ESP のパーティションに置き換えて下さい。

オプションについてはインストールスクリプトのコメントを見て下さい。

ノート: デフォルトでは refind-install はカーネルが存在するファイルシステムのドライバーだけをインストールします。他にもドライバーが必要な場合は手動でインストールしてください。もしくは --alldrivers オプションで全てのドライバーをインストールすることもできます。USB フラッシュドライブなどでは全てのドライバーをインストールすると便利です: # refind-install --usedefault /dev/sdXY --alldrivers

rEFInd のファイルを ESP にインストールしたら、rEFInd が作成した refind_linux.conf (カーネルと同じディレクトリにあります) に必要なカーネルパラメータ (例: root=) が含まれていることを確認してください。このファイルが作成されていない場合は、手動で #カーネルパラメータを指定 する必要があります。そうしないと次の起動時にカーネルパニックが発生します。

デフォルトでは、rEFInd は全てのドライブをスキャンして、発見した EFI ブートローダーのブートエントリを追加します。それにはカーネルも含まれます (Arch ではデフォルトで EFISTUB が有効になっているためです)。そのため、この時点でシステムを起動することができます。

ヒント: デフォルトのオプションが問題ないか確認するために ESP にあるデフォルト設定 /EFI/refind/refind.conf を編集してみると良いでしょう。
警告: chroot で refind-install を実行する場合 (Arch Linux をライブ環境でインストールする際など)、/boot/refind-linux.conf が作られるときに実際にインストールされる環境ではなくライブ環境のカーネルオプションが使われます。そのため手動で /boot/refind-linux.conf のカーネルオプションを調整する必要があります。

Secure Boot

rEFInd におけるセキュアブートのサポートについては Managing Secure Boot を参照してください。

PreLoader を使う

セキュアブート#PreLoader の設定を参照して署名済みの PreLoader.efiHashTool.efi バイナリを用意してください。

--preloader /path/to/preloader オプションを付けて refind-install を実行します:

# refind-install --preloader /usr/share/preloader-signed/PreLoader.efi

セキュアブートを有効にして起動すると、HashTool が起動するので rEFInd のハッシュ (loader.efi) と rEFInd のドライバー (例: ext4_x64.efi) そしてカーネルを登録してください。

詳しくは refind-install(8) を見てください。

ヒント: 署名済み HashTool は起動されたパーティションだけにアクセスすることができます。カーネルが ESP 上にない場合、HashTool からハッシュを登録することはできなくなります。MokList のハッシュを登録できる #KeyTool を使うことで問題を解決できます。KeyTool は使用する前に必ずハッシュを登録するようにしてください。
shim を使う

shim-signedAURインストールしてください。セキュアブート#shim の通りに進めてください。ただしファイルのコピーは無視します。

shim でハッシュを使うだけなら --shim /path/to/shim オプションを付けて refind-install を実行します:

# refind-install --shim /usr/share/shim-signed/shim.efi

セキュアブートを有効にして起動すると、MokManager が起動するので rEFInd のハッシュ (loader.efi) と rEFInd のドライバー (例: ext4_x64.efi) そしてカーネルを登録してください。

Machine Owner Key を使って rEFInd に署名するには sbsigntools をインストールします。

ヒント: 既に MOK を作成しているのであればファイルを refind_local.key, refind_local.crt, refind_local.cer という名前で /etc/refind.d/keys ディレクトリに配置してください。

--shim /path/to/shim--localkeys オプションを付けて refind-install を実行します:

# refind-install --shim /usr/share/shim-signed/shim.efi --localkeys

refind-install は鍵を作成して自分自身とドライバーに署名します。同じ鍵を使ってカーネルに署名する必要があります。例:

# sbsign --key /etc/refind.d/keys/refind_local.key --cert /etc/refind.d/keys/refind_local.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux

MokManager で refind_local.cer を MoKList に追加してください。refind_local.cer は rEFInd のインストールディレクトリ (esp/EFI/refind/keys/refind_local.cer) の keys という名前のディレクトリに存在します。

詳しくは refind-install(8) を参照してください。

自分の鍵を使う

セキュアブート#自分で署名した鍵を使うに従って鍵を作成してください。

/etc/refind.d/keys ディレクトリを作成して署名データベース (db) 鍵と証明書を保存します。ファイルの名前は次のとおりにしてください: refind_local.key, refind_local.crt, refind_local.cer

インストールスクリプトの実行時に --localkeys オプションを付け加えます:

# refind-install --localkeys

これで rEFInd の EFI バイナリが自分の鍵と証明書で署名されます。

手動設定

ヒント: rEFInd は様々な方法で Linux を起動することができます。The rEFInd Boot Manager: Methods of Booting Linux でそれらの方法が触れられています。このセクションでは EFISTUB を使用する場合の方法を説明しています。
ノート: 32ビットの IA32 EFI を使っている場合、下のコマンドにある x64ia32 に置き換えてください。

refind-install スクリプトが上手く動かない場合、rEFInd を手動で設定することができます。

まず実行可能ファイルを ESP にコピーしてください:

# cp /usr/share/refind/refind_x64.efi esp/EFI/refind/

それから efibootmgr を使って UEFI の NVRAM にブートエントリを作成してください (/dev/sdXY はあなたの ESP のマウントポイントに合わせて置き換えて下さい)。rEFInd をデフォルトの UEFI のパス /EFI/BOOT/BOOTX64.EFI にインストールした場合は、このステップは省略してもかまいません。

# efibootmgr --create --disk /dev/sdX --part Y --loader /EFI/refind/refind_x64.efi --label "rEFInd Boot Manager"

この時点で rEFInd で起動することができるようになっているはずです。ただしカーネルを起動することはできません。カーネルが ESP にない場合、(適切なドライバーが存在するとき) rEFInd はパーティションをマウントしてカーネルを検索することができます。

rEFInd はインストールディレクトリに存在する driversdrivers_arch (例: drivers_x64) サブディレクトリから全てのドライバーを自動的にロードします。

# mkdir esp/EFI/refind/drivers_x64
# cp /usr/share/refind/drivers_x64/drivername_x64.efi esp/EFI/refind/drivers_x64/

これで rEFInd はカーネルのブートエントリが用意できますが、適切なカーネルパラメータを指定しません。#カーネルパラメータの指定 を行って下さい。それによって rEFInd を使ってカーネルを起動することができるようになります。この段階で起動ができない、または rEFInd の設定を変更したい場合、設定ファイルを使ってオプションを変更することができます:

# cp /usr/share/refind/refind.conf-sample esp/EFI/refind/refind.conf

サンプル設定ファイルにたくさんコメントが付いているので開いてみて下さい。

設定ファイルに textonly を設定していない場合、rEFInd のアイコンをコピーしないとプレースホルダが表示されます:

# cp -r /usr/share/refind/icons esp/EFI/refind/

フォントをコピーして refind.conffont 設定を変更することで他のフォントを使うこともできます:

# cp -r /usr/share/refind/fonts esp/EFI/refind/
ヒント: rEFInd のメニューで F10 を押すと ESP の一番上のディレクトリにスクリーンショットが保存されます。

アップグレード

Pacman は /usr/share/refind/ にある rEFInd のファイルをアップデートしますが、ESP に新しいファイルをコピーしたりはしません。refind-install で rEFInd のインストールが上手くいっているのであれば、再度実行することでアップデートされたファイルをコピーできます。新しい設定ファイルは refind.conf-sample としてコピーされるので、差分ツールを使って設定ファイルをマージすることができます。rEFInd が#手動設定を必要とする場合、どのファイルが必要なのかは自分で判断してコピーする必要があります。

Pacman フック

フックを使うことでアップデートを自動化できます:

/etc/pacman.d/hooks/refind.hook
[Trigger]
Operation=Upgrade
Type=Package
Target=refind-efi

[Action]
Description = Updating rEFInd on ESP
When=PostTransaction
Exec=/usr/bin/refind-install

Exec= のコマンドは環境にあわせて適当に書き換えてください。#手動設定を行った場合、フックから自分のアップデートスクリプトを呼び出すようにすることもできます。

設定

rEFInd の設定ファイル refind.conf は rEFInd の EFI アプリケーションと同じディレクトリに存在します (大抵は esp/EFI/refind あるいは esp/EFI/BOOT)。デフォルト設定にはオプションの詳細な説明が含まれており、さらに詳しい説明は Configuring the Boot Manager に載っています。

カーネルパラメータを指定

rEFInd がカーネルに渡すカーネルパラメータを設定する方法は2つあります。

rEFInd によってカーネルが自動で検出される場合

rEFInd が自動的にカーネルを検出する場合、カーネルと同じディレクトリにカーネルパラメータを記述した refind_linux.conf ファイルを配置することができます。ファイルのサンプルとしては /usr/share/refind/refind_linux.conf-sample を見て下さい。refind_linux.conf の最初のアンコメントした行がカーネルのデフォルトパラメータになります。それ以降の行は +, F2, Insert を使ってアクセスできるサブメニューのエントリを作成します。

/boot/refind_linux.conf
"Boot using default options"     "root=PARTUUID=XXXXXXXX rw add_efi_memmap"
"Boot using fallback initramfs"  "root=PARTUUID=XXXXXXXX rw add_efi_memmap initrd=/boot/initramfs-linux-fallback.img"
"Boot to terminal"               "root=PARTUUID=XXXXXXXX rw add_efi_memmap systemd.unit=multi-user.target"

もしくは、次のコマンドを実行してみて下さい:

# mkrlconf

/boot のカーネルを確認して自動的に refind_linux.conf を生成します。基本的なカーネルパラメータしか設定しないので、作成されたファイルに問題がないか確認をしましょう。

initrd= パラメータを指定しなかった場合、rEFInd は自動的にカーネルと同じディレクトリにある RAM ディスクのファイル名を検索して追加します。initrd= パラメータを複数設定する必要があるときは、refind_linux.conf で手動でパラメータを設定してください。例えば initramfs の前にマイクロコードを指定するには: ... initrd=/boot/intel-ucode.img initrd=/boot/initramfs-linux.img

警告: initrd のパスはカーネルが存在するファイルシステムのルートディレクトリからの相対パスです。initrd=/boot/initramfs-linux.img あるいは、ESP を /boot にマウントしている場合 initrd=/initramfs-linux.img になります。

手動でブートエントリを記述

カーネルが自動検出されない場合、もしくはメニューエントリのオプションを自分で設定したい場合、手動で refind.conf にブートエントリを作成することができます。scanfor には manual を含めて下さい、そうしないとエントリが rEFInd のメニューに表示されません。カーネルパラメータは options キーワードで設定できます。rEFInd は initrd キーワードで指定されたファイルを使って initrd= パラメータを追加します。initrd を追加する必要がある場合 (例: マイクロコード)、options で指定してください (initrd キーワードで指定された initrd が最後に追加されます)。

esp/EFI/refind/refind.conf
...

menuentry "Arch Linux" {
	icon     /EFI/refind/icons/os_arch.png
	volume   "Arch Linux"
	loader   /boot/vmlinuz-linux
	initrd   /boot/initramfs-linux.img
	options  "root=PARTUUID=XXXXXXXX rw add_efi_memmap"
	submenuentry "Boot using fallback initramfs" {
		initrd /boot/initramfs-linux-fallback.img
	}
	submenuentry "Boot to terminal" {
		add_options "systemd.unit=multi-user.target"
	}
}

volume はカーネルイメージがあるパーティションのファイルシステム LABEL, PARTLABEL, PARTUUID, ボリューム番号 (例: 0:) のどれかに変更する必要があります。ボリュームラベルの例は Ext3#Assigning a label を見て下さい。

既存の UEFI Windows 環境で rEFInd を使う

ノート: 基本的には Windows と Arch のデュアルブートに書かれていることが適用されます。

rEFInd は UEFI の Windows をインストールしたときに作成される EFI システムパーティションに対応しているため、Windows と一緒に Arch をインストールする際にもうひとつ FAT32 パーティションを作成・フォーマットする必要はありません。Windows の ESP をマウントして通常通りに rEFInd をインストールするだけです。デフォルトで、rEFInd の自動検出機能が既存の Windows (リカバリ) ブートローダーを認識するはずです。

ツール

rEFInd は様々なサードパーティ製のツールをサポートしています。ツールは別個にインストールする必要があります。refind.confshowtools を編集して表示したいツールを選択してください。

esp/EFI/refind/refind.conf
...
# Which non-bootloader tools to show on the tools line, and in what
# order to display them:
#  shell            - the EFI shell (requires external program; see rEFInd
#                     documentation for details)
#  memtest          - the memtest86 program, in EFI/tools, EFI/memtest86,
#                     EFI/memtest, EFI/tools/memtest86, or EFI/tools/memtest
#  gptsync          - the (dangerous) gptsync.efi utility (requires external
#                     program; see rEFInd documentation for details)
#  gdisk            - the gdisk partitioning program
#  apple_recovery   - boots the Apple Recovery HD partition, if present
#  windows_recovery - boots an OEM Windows recovery tool, if present
#                     (see also the windows_recovery_files option)
#  mok_tool         - makes available the Machine Owner Key (MOK) maintenance
#                     tool, MokManager.efi, used on Secure Boot systems
#  about            - an "about this program" option
#  exit             - a tag to exit from rEFInd
#  shutdown         - shuts down the computer (a bug causes this to reboot
#                     many UEFI systems)
#  reboot           - a tag to reboot the computer
#  firmware         - a tag to reboot the computer into the firmware's
#                     user interface (ignored on older computers)
#  netboot          - launch the ipxe.efi tool for network (PXE) booting
# Default is shell,memtest,gdisk,apple_recovery,windows_recovery,mok_tool,about,shutdown,reboot,firmware
#
showtools shell, memtest, netboot, about, reboot, firmware
...

UEFI シェル

UEFI シェルを見て下さい。

EFI System Partition のルートに shellx64.efi をコピーして下さい。

Memtest86

AUR から memtest86-efiAUR をインストールして esp/EFI/tools/ にコピーしてください。

# cp /usr/share/memtest86-efi/bootx64.efi esp/EFI/tools/memtest86.efi

iPXE

ノート: rEFInd における PXE のサポートはまだ実験段階です。

refind-efi には iPXE UEFI バイナリが含まれており、esp/EFI/tools/ にコピーするだけで使えます。

# cp /usr/share/refind/tools_x64/ipxe_discovery_x64.efi esp/EFI/tools/ipxe_discovery.efi
# cp /usr/share/refind/tools_x64/ipxe_x64.efi esp/EFI/tools/ipxe.efi

トラブルシューティング

UEFI シェルでドライバーを使う

UEFI シェルで rEFInd のドライバーを使いたいときは load コマンドを使ってロードし、map -r でマップされたドライブをリフレッシュしてください。

Shell> load FS0:\EFI\refind\drivers\ext4_x64.efi
Shell> map -r

これで UEFI シェルからファイルシステムにアクセスすることができるようになります。

btrfs サブボリュームをルートにする

btrfs サブボリュームをルートとして起動する場合、options 行に rootflags=subvol=<root subvolume> が必要です。以下の例では 'ROOT' という名前の btrfs サブボリュームとしてルートをマウントしています (例: mount -o subvol=ROOT /dev/sdxY /mnt):

esp/EFI/refind/refind.conf
...

menuentry "Arch Linux" {
        icon     /EFI/refind/icons/os_arch.png
        volume   Boot
        loader   /boot/vmlinuz-linux
        initrd   /boot/initramfs-linux.img
        options  "root=PARTUUID=XXXXXXXX rw rootflags=subvol=ROOT"

...
        }

上記の設定を行わないと次のようなエラーが発生します: ERROR: Root device mounted successfully, but /sbin/init does not exist

Apple Macs

mactel-bootAUR は Linux 用の実験的な "bless" ユーティリティです。これが動作しないときは、OSX の中から "bless" を使って rEFInd をデフォルトのブートローダに設定してください:

# bless --setBoot --folder esp/EFI/refind --file esp/EFI/refind/refind_x64.efi

VirtualBox

現在 VirtualBox はデフォルトの /EFI/BOOT/BOOT*.EFI のみ起動するため、refind-install を使うときに --usedefault オプションが必要です。VirtualBox#Virtualbox の EFI モードで Arch を使う を参照してください。

参照