rEFInd
rEFInd は UEFI ブートマネージャーです。EFISTUB カーネルを起動することができます。既にメンテナンスされてない rEFIt のフォークであり、Mac 以外の UEFI ブートに関して多数の問題が修正されています。プラットフォームに依存せず、複数の OS を簡単に起動できるように設計されています。
目次
サポートされているファイルシステム
rEFInd は、ファイルシステムのサポートをファームウェアから継承します (つまり、少なくとも FAT12、FAT16、FAT32 はサポートされることを意味します)。加えて、rEFInd は、ESP 上の自身のインストールディレクトリ内のサブディレクトリ drivers
と drivers_x64
(例: esp/EFI/refind/drivers_x64/
) 内にある UEFI ドライバもロードします。
また、rEFInd には少数の読み取り専用 EFI ファイルシステムドライバ (特に ext4 と Btrfs) も同梱されています。
インストール
rEFInd ブートマネージャをインストールする
rEFInd には、ReiserFS (非推奨)、Ext2、Ext4、Btrfs、ISO-9660、HFS+ の 読み取り専用 サポートを実装する UEFI ドライバが同梱されています。さらに、rEFInd は、UEFI 自体によってアクセス可能な任意のファイルシステムにアクセスできます。これには、FAT (UEFI 仕様によって義務付けられています)、Mac の HFS+、一部のシステムでは ISO-9660 が含まれています。
他のドライバーについては The rEFInd Boot Manager: Using EFI Drivers: Finding Additional EFI Drivers を参照してください。
rEFInd を使うには、refind-install スクリプト を使うか、rEFInd のファイルをコピーし、ブートエントリを手動でセットアップして、rEFInd を EFI システムパーティションにインストールしなければなりません。
refind-install スクリプトによるインストール
rEFInd パッケージには refind-install というスクリプトが含まれており、簡単に rEFInd をデフォルトの EFI ブートエントリに設定できます。このスクリプトにはオプションが存在し、様々なセットアップや UEFI 実装に対応しています。様々なインストールオプションの説明は、refind-install(8) やインストールスクリプトのコメントを見てください。
多くのシステムでは以下を実行するだけで十分なはずです:
# refind-install
このコマンドは、ESP を検出しマウントしようと試み、rEFInd のファイルを esp/EFI/refind/
にコピーし、efibootmgr を使って rEFInd をデフォルトの EFI ブートアプリケーションにします。
または、デフォルト/フォールバックのブートパスである esp/EFI/BOOT/bootx64.efi
に rEFInd をインストールすることもできます。ブータブルな USB フラッシュドライブや、efibootmgr による NVRAM の変更に問題を抱えているシステム等で有用です:
# refind-install --usedefault /dev/sdXY
/dev/sdXY
は EFI システムパーティションです (マウントポイントではなく、ブロックデバイスを指定してください)。
rEFInd のファイルを ESP にインストールしたら、rEFInd が作成した refind_linux.conf
(カーネルと同じディレクトリにあります) に必要なカーネルパラメータが含まれていることを確認してください。--usedefault
オプションを使用した場合はこの設定ファイルは作成されません。root として mkrlconf
を実行して作成してください。
デフォルトでは、rEFInd は (rEFInd にそのドライブ用のドライバが存在する) すべてのドライブをスキャンし、発見した EFI ブートローダーのブートエントリを追加します。これにはカーネルも含まれているはずです (Arch Linux はデフォルトで EFISTUB が有効化されているからです)。なので、この時点でブータブルなシステムが出来上がっているでしょう。
Secure Boot
rEFInd におけるセキュアブートのサポートについては Managing Secure Boot を参照してください。
PreLoader を使う
セキュアブート#PreLoader をセットアップする を参照して署名済みの PreLoader.efi
と HashTool.efi
バイナリを用意してください。
--preloader /path/to/preloader
オプションを付けて refind-install
を実行します:
# refind-install --preloader /usr/share/preloader-signed/PreLoader.efi
セキュアブートを有効にして起動すると、HashTool が起動するので rEFInd のハッシュ (loader.efi
) と rEFInd のドライバー (例: ext4_x64.efi
) そしてカーネル (例: vmlinuz-linux
) を登録してください。
詳しくは refind-install(8) を見てください。
shim を使う
shim-signedAUR をインストールしてください。セキュアブート#shim を読んでください。ただし、ファイルをコピーする部分はすべてスキップしてください。
ハッシュを使う
shim でハッシュだけを使うには、refind-install
を --shim /path/to/shim
オプションで実行してください:
# refind-install --shim /usr/share/shim-signed/shimx64.efi
次回セキュアブートを有効化した状態で起動すると、MokManager が起動します。その時、rEFInd (grubx64.efi
)、rEFInd のドライバ (例: ext4_x64.efi
)、カーネル (例: vmlinuz-linux
) のハッシュを登録する必要があります。
Machine Owner Key を使う
rEFInd を Machine Owner Key (MOK) で署名するには、sbsigntools をインストールしてください。
--shim /path/to/shim
と --localkeys
オプションを付けて refind-install
を実行します:
# refind-install --shim /usr/share/shim-signed/shimx64.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
(PEM 形式秘密鍵)、refind_local.crt
(PEM 形式証明書)、refind_local.cer
(DER 形式証明書)。
インストールスクリプトの実行時に --localkeys
オプションを付け加えます。例:
# refind-install --localkeys
これで rEFInd の EFI バイナリが自分の鍵と証明書で署名されます。
手動インストール
refind-install
スクリプトが上手く動かない場合、rEFInd を手動でセットアップすることができます。
まず実行可能ファイルを ESP にコピーしてください:
# mkdir -p esp/EFI/refind # cp /usr/share/refind/refind_x64.efi esp/EFI/refind/
rEFInd をデフォルト/フォールバックブートパスにインストールしたい場合は、以下の指示で esp/EFI/refind/
を esp/EFI/BOOT/
に置き換え、rEFInd の EFI 実行ファイルを esp/EFI/BOOT/bootx64.efi
にコピーしてください:
# mkdir -p esp/EFI/BOOT # cp /usr/share/refind/refind_x64.efi esp/EFI/BOOT/bootx64.efi
それから efibootmgr を使って UEFI の NVRAM にブートエントリを作成してください (/dev/sdX
と Y
はあなたの ESP のマウントポイントに合わせて置き換えて下さい)。rEFInd をデフォルト/フォールバックのブートパス esp/EFI/BOOT/bootx64.efi
にインストールした場合は、このステップは省略してもかまいません。
# efibootmgr --create --disk /dev/sdX --part Y --loader /EFI/refind/refind_x64.efi --label "rEFInd Boot Manager" --unicode
この時点で rEFInd で起動することができるようになっているはずです。ただしカーネルを起動することはできません。カーネルが ESP にない場合、(適切なドライバーが存在するとき) rEFInd はパーティションをマウントしてカーネルを検索することができます。
rEFInd はインストールディレクトリに存在する drivers
と drivers_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.conf
の font
設定を変更することで他のフォントを使うこともできます:
# cp -r /usr/share/refind/fonts esp/EFI/refind/
アップグレード
Pacman は /usr/share/refind/
にある rEFInd のファイルをアップデートしますが、ESP に新しいファイルをコピーしたりはしません。refind-install
で rEFInd のインストールが上手くいっているのであれば、再度実行することでアップデートされたファイルをコピーできます。新しい設定ファイルは refind.conf-sample
としてコピーされるので、差分ツールを使って設定ファイルをマージすることができます。rEFInd が#手動インストールを必要とする場合、どのファイルが必要なのかは自分で判断してコピーする必要があります。
Pacman フック
Pacman フックを使うことでアップデートの処理を自動化することができます:
/etc/pacman.d/hooks/refind.hook
[Trigger] Operation=Upgrade Type=Package Target=refind [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 によって自動的に検出されたカーネルの場合
自動的に検出されたカーネルの場合、/boot/refind_linux.conf
に明示的にカーネルパラメータを指定したり、あるいはルータパーティションとカーネルパラメータを特定する rEFInd の機能に頼ったりできます。詳細は Methods of Booting Linux: For Those With Foresight or Luck: The Easiest Method を見てください。
rEFInd で Arch Linux カーネルの命名規則をサポートし、カーネルとそれぞれの initramfs イメージがマッチするようにするには、refind.conf
内の extra_kernel_version_strings
をアンコメントし編集する必要があります。例えば:
esp/EFI/refind/refind.conf
... extra_kernel_version_strings linux-hardened,linux-rt-lts,linux-zen,linux-lts,linux-rt,linux ...
refind_linux.conf
rEFInd が自動的にカーネルを検出する場合、カーネルパラメータの含まれている refind_linux.conf
ファイルはそのカーネルと同じディレクトリに置くことができます。/usr/share/refind/refind_linux.conf-sample
を設定ファイルのベースにすることができます。refind_linux.conf
の1つ目のアンコメントされている行がカーネルのデフォルトパラメータとなります。それ以降の行は +
、F2
、Insert
を使ってアクセスできるサブメニュー内にエントリを作成します。
あるいは、mkrlconf
を root として実行してみてください。このスクリプトは、/boot
内からカーネルを探し、自動的に refind_linux.conf
を生成しようと試みます。このスクリプトは、最も基本的なカーネルパラメータしか設定しませんので、作成されたファイルが正しいかを確認してください。
initrd=
パラメータを指定しない場合、カーネルと同じディレクトリから一般的な RAM ディスクのファイル名を探索して自動的にそのパラメータを追加します。複数の initrd=
パラメータが必要な場合、手動でそれらを refind_linux.conf
で指定しなければなりません。例えば、initramfs の前にマイクロコードを渡す場合:
/boot/refind_linux.conf
"Boot using default options" "root=PARTUUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX rw add_efi_memmap initrd=boot\intel-ucode.img initrd=boot\amd-ucode.img initrd=boot\initramfs-%v.img" "Boot using fallback initramfs" "root=PARTUUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX rw add_efi_memmap initrd=boot\intel-ucode.img initrd=boot\amd-ucode.img initrd=boot\initramfs-%v-fallback.img" "Boot to terminal" "root=PARTUUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX rw add_efi_memmap initrd=boot\intel-ucode.img initrd=boot\amd-ucode.img initrd=boot\initramfs-%v.img systemd.unit=multi-user.target"
設定しない
rEFInd を ESP 上にインストールしただけで、それ以上の操作をせずに (例えば、UEFI シェルや KeyTool、ファームウェアから直接) rEFInd を起動すると、(なんの設定もせずに) 自動検出によって作成されたブートメニュが表示されます。
これがうまく行くのは、rEFInd にフォールバック機構があるからです。この機能は以下のようなことができます:
- Discoverable Partitions Specification や
/etc/fstab
を使って (root=
パラメータ用に) ルートパーティションを特定する。 - GPT パーティション属性 (属性
60
"read-only" を使用) や/etc/fstab
を使ってカーネルオプション (ro
やrw
) を検出する。
手動でブートエントリを記述する
カーネルが自動検出されない場合、もしくはメニューエントリのオプションを自分で設定したい場合、手動で refind.conf
にブートエントリを作成することができます。scanfor
には manual
を含めて下さい、そうしないとエントリが rEFInd のメニューに表示されません。カーネルパラメータは options
キーワードで設定できます。rEFInd は initrd
キーワードで指定されたファイルを使って initrd=
パラメータを追加します。initrd を追加する必要がある場合 (例: マイクロコード)、options
で指定してください (initrd
キーワードで指定された initrd が最後に追加されます)。
手動でのブートエントリの記述については Creating Manual Boot Stanzas で説明されています。
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-XXXX-XXXX-XXXX-XXXXXXXXXXXX rw add_efi_memmap initrd=boot\intel-ucode.img initrd=boot\amd-ucode.img" submenuentry "Boot using fallback initramfs" { initrd /boot/initramfs-linux-fallback.img } submenuentry "Boot to terminal" { add_options "systemd.unit=multi-user.target" } }
カーネルの存在するパーティションのファイルシステム LABEL、PARTLABEL、PARTUUID のどれかとマッチするように volume
を変更する必要があるでしょう。PARTUUID は大文字である必要があります。ボリュームラベルの割当の例は 永続的なブロックデバイスの命名#by-label を見てください。volume
が指定されていない場合、rEFInd が起動したパーティション (典型的には EFI システムパーティション) のボリュームをデフォルトとして使用します。
既存の UEFI Windows 環境で rEFInd を使う
rEFInd は UEFI の Windows をインストールしたときに作成される EFI システムパーティションに対応しているため、Windows と一緒に Arch をインストールする際にもうひとつ FAT32 パーティションを作成・フォーマットする必要はありません。Windows の ESP をマウントして通常通りに rEFInd をインストールするだけです。デフォルトで、rEFInd の自動検出機能が既存の Windows (リカバリ) ブートローダーを認識するはずです。
ツール
rEFInd は、様々なサードパーティーツールの実行をサポートしています。ツールは別途インストールする必要があります。refind.conf
内の showtools
を編集して表示したいツールを選択してください。
esp/EFI/refind/refind.conf
... showtools shell, memtest, mok_tool, gdisk, fwupdate ... ...
UEFI シェル
Unified Extensible Firmware Interface#UEFI シェル を見てください。
EFI システムパーティションのルートに shellx64.efi
をコピーしてください。
Memtest86+
memtest86+-efi をインストールし、それを esp/EFI/tools/
にコピーしてください。
# cp /boot/memtest86+/memtest.efi esp/EFI/tools/memtest86.efi
鍵管理ツール
rEFInd can detect Secure Boot key management tools if they are placed in rEFInd's directory on ESP, esp/
or esp/EFI/tools/
.
HashTool
#PreLoader を使う に従ってください。HashTool.efi
は rEFInd のディレクトリに配置されます。
MokManager
#shim を使う に従ってください。MokManager は rEFInd のディレクトリに配置されます。
KeyTool
efitools をインストールしてください。
KeyTool EFI バイナリを KeyTool.efi
か KeyTool-signed.efi
という名前で esp/
か esp/EFI/tools/
に配置してください。
KeyTool.efi
を署名する方法については セキュアブート#KeyTool を使う を見てください。
GPT fdisk (gdisk)
gdisk EFI アプリケーションをダウンロードし、gdisk_x64.efi
を esp/EFI/tools/
にコピーしてください。
fwupd
fwupd-efi をインストールし、fwupd をセットアップしてください。
fwupdx64.efi
バイナリとファームウェアファイルを esp/EFI/tools/
にコピーしてください:
# cp /usr/lib/fwupd/efi/fwupdx64.efi esp/EFI/tools/
電源オフや再起動
rEFInd には電源オフと再起動のメニューエントリが組み込まれていると報告されています。このツールのリストはこの Wiki ではとても広範囲なものなので、UEFI や他の UEFI ブートマネージャ (例えば systemd-boot) のユーザは、powerofforreboot.efiAUR に興味を持つかもしれません。
ヒントとテクニック
UEFI シェルでドライバを使用する
rEFInd のドライバを UEFI シェル内で使用するには、load
コマンドを使ってロードし、マッピングされたドライバを map -r
コマンドを使ってリフレッシュしてください。
Shell> load FS0:\EFI\refind\drivers\ext4_x64.efi Shell> map -r
これで、UEFI シェルからファイルシステムにアクセスできるようになりました。
efifb の解像度を設定する
refind.conf
で解像度が間違った値に設定されている場合、Apple Mac を除くすべてのシステムで rEFInd は、サポートされている解像度のリストを表示します。Apple Mac の場合は、rEFInd はサイレントにデフォルトの解像度を使用します。
efifb によってサポートされているフレームバッファの解像度を判断するには、/usr/share/gnu-efi/apps/x86_64/modelist.efi
を gnu-efi から ESP のルートディレクトリにコピーしてください。UEFI シェル に入り、modelist.efi
を実行してください。
Shell> FS0:\modelist.efi
GOP reports MaxMode 3 0: 640x480 BGRR pitch 640 *1: 800x600 BGRR pitch 800 2: 1024x768 BGRR pitch 1024
どれかの解像度を refind.conf
で設定してください。再起動し、dmesg | grep efifb
を root として実行して設定が反映されていることを確認してください。
Btrfs サブボリュームのサポート
自動検出
Btrfs ボリューム上でカーネルの自動検出を有効にするには、refind.conf
内の also_scan_dirs
をアンコメントしてください。
esp/EFI/refind/refind.conf
... also_scan_dirs +,subvolume/boot ...
次に、refind_linux.conf
内の rootflags
に subvol=subvolume
を追加してください。そして、initrd のパスの先頭に subvolume
を追加してください。
/boot/refind_linux.conf
"Boot using standard options" "root=PARTUUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX rw rootflags=subvol=subvolume initrd=subvolume\boot\initramfs-%v.img"
マニュアルブートの設定
btrfs サブボリュームをルートとして起動する場合、サブボリュームへのパスをローダーと initrd のパスの先頭に追加し、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 "[bootdevice]" loader /ROOT/boot/vmlinuz-linux initrd /ROOT/boot/initramfs-linux.img options "root=PARTUUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX rw rootflags=subvol=ROOT" ... }
そうしないと、次のようなエラーが発生します: ERROR: Root device mounted successfully, but /sbin/init does not exist.
LoaderDevicePartUUID
バージョン 0.13.1 以降、rEFInd は UEFI 変数 LoaderDevicePartUUID の設定をサポートしています 。これを有効化すると、systemd-gpt-auto-generator(8) が EFI システムパーティションを、/etc/fstab
で指定せずに自動マウントできるようになります。systemd#GPT パーティションの自動マウント を見てください。
rEFInd が LoaderDevicePartUUID
を設定できるようにするには、refind.conf
を編集して write_systemd_vars true
をアンコメントしてください:
esp/EFI/refind/refind.conf
... write_systemd_vars true ...
cat /sys/firmware/efi/efivars/LoaderDevicePartUUID-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f
で値を確認するか、bootctl
の出力の "Boot loader sets ESP information" の状態を見ることで、この変数が設定されていることを確認できます。
トラブルシューティング
Apple Mac
mactel-bootAUR は Linux 用の実験的な bless ユーティリティです。これが動作しないときは、OSX の中から bless を使って rEFInd をデフォルトのブートローダに設定してください:
# bless --setBoot --folder esp/EFI/refind --file esp/EFI/refind/refind_x64.efi
空の rEFInd メニュースクリーン
drivers_x64
フォルダにファイルシステムドライバが複数存在すると (#rEFInd ブートマネージャをインストールする を参照)、ファイルシステムドライバのバグによって rEFInd が正しく機能しなくなり、rEFInd のロゴだけの空白画面 (カスタムテーマの場合は、背景画像) が表示されることがあります。これを修正するには、カーネルの存在するファイルシステム用のドライバ以外のすべてのドライバを削除してください。
また、Windows とデュアルブートしている場合に rEFInd が他のディスク上の EFI システムパーティションの自動スキャンに失敗して、空白画面が発生することもあります。これを修正するには、blkid を使って Windows パーティションを特定し、それぞれの Windows パーティションの PARTUUID を refind.conf
内の dont_scan_volumes
変数にコンマで区切って追加してください。例えば:
# blkid
/dev/nvme0n1p1: LABEL="SYSTEM" UUID="4CE7-C215" BLOCK_SIZE="512" TYPE="vfat" PARTLABEL="EFI system partition" PARTUUID="13aa9955-1234-5678-9098-006c334b5088" /dev/nvme0n1p5: LABEL="Windows RE Tools" BLOCK_SIZE="512" UUID="08C4E6C5C4E6B45A" TYPE="ntfs" PARTLABEL="Basic data partition" PARTUUID="4eced110-0987-6543-2123-b0ab8576869b"
esp/EFI/refind/refind.conf
... dont_scan_volumes 13aa9955-1234-5678-9098-006c334b5088,4eced110-0987-6543-2123-b0ab8576869b ...
ディストリビューションのロゴを表示してくれない
Arch のロゴではなく Tux が表示される場合、この問題によるものであるかもしれません (ルートパーティションのタイプが Linux filesystem ではなく Linux x86-64 root (/) である場合)。
パーティションタイプを変更することで、この問題を解決することができます。
加えて、ルートパーティションのラベルが "Linux" であったり、"linux," という単語が含まれている場合にも、Tux が表示される場合があります。ディストリビューションの名前に合ったパーティションラベルに変更することを検討してください
この問題は、ファイルシステムラベルを使用することで解決できます。
Tux ではなく Arch のロゴを表示させるもう一つの方法は、Arch のロゴ画像をカーネル (例えば vmlinuz-linux
) と同じ場所にコピーし、画像ファイルの名前をカーネルイメージのファイル名と同じにすることです:
# cp /usr/share/refind/icons/os_arch.png /boot/vmlinuz-linux.png
参照
- Roderick W. Smith による The rEFInd Boot Manager
- Wikipedia:rEFInd
/usr/share/refind/docs/README.txt
- Sourceforge の rEFInd ディスカッションフォーラム