rEFInd

提供: ArchWiki
2023年5月2日 (火) 16:01時点におけるKusanaginoturugi (トーク | 投稿記録)による版 (→‎参照: 空行)
ナビゲーションに移動 検索に移動

関連記事

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

ノート: この記事では EFI システムパーティションのマウントポイントを esp で示します。

インストール

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

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 システムパーティションにインストールしなければなりません。

警告: カーネルと initramfs は、rEFInd によって読み込むことのできるファイルシステム上に存在していなければなりません。

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-install はカーネルの存在するファイルシステムのドライバーだけをインストールします。他にもドライバーが必要な場合は、/usr/share/refind/drivers_x64/ から esp/EFI/refind/drivers_x64/ にドライバを手動でコピーしてインストールしてください。もしくは --alldrivers オプションで全てのドライバーをインストールすることもできます。ブータブルな USB フラッシュドライブなどでは全てのドライバーをインストールすると便利です。

rEFInd のファイルを ESP にインストールしたら、rEFInd が作成した refind_linux.conf (カーネルと同じディレクトリにあります) に必要なカーネルパラメータが含まれていることを確認してください。--usedefault オプションを使用した場合はこの設定ファイルは作成されません。root として mkrlconf を実行して作成してください。

警告: chroot で refind-install を実行する場合 (Arch Linux をライブ環境でインストールする際など)、/boot/refind_linux.conf が作られるときに実際にインストールされる環境ではなくライブ環境のカーネルオプションが使われます。そのため /boot/refind_linux.conf を編集し、カーネルパラメータがシステムにおいて正しいことを確認してください。さもないと、次回のブート時にカーネルパニックが発生する可能性があります。設定ファイルの例は #refind_linux.conf を見てください。

デフォルトでは、rEFInd は (rEFInd にそのドライブ用のドライバが存在する) すべてのドライブをスキャンし、発見した EFI ブートローダーのブートエントリを追加します。これにはカーネルも含まれているはずです (Arch Linux はデフォルトで EFISTUB が有効化されているからです)。なので、この時点でブータブルなシステムが出来上がっているでしょう。

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) そしてカーネル (例: vmlinuz-linux) を登録してください。

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

ヒント: 署名済み HashTool は、HashToolが起動されたパーティションだけにアクセスすることができます。カーネルが ESP 上にない場合、HashTool からハッシュを登録することはできなくなります。#KeyTool を使うことで問題を回避できます (KeyTool は MokList のハッシュを登録でき、さらに1つのパーティションに制限されないからです)。KeyTool は使用する前に必ずハッシュを登録するようにしてください。
shim を使う
警告: バージョン 15.3 以降、有効な .sbat セクションを持たない EFI バイナリは、shim によって起動されなくなりました。これは、rEFInd によってまたサポートされていません。詳細は SBAT のドキュメントrEFInd に関する議論 を見てください。

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 をインストールしてください。

ヒント: 既に MOK を作成しているのであればファイルを refind_local.key (PEM 形式秘密鍵)、refind_local.crt (PEM 形式証明書)、refind_local.cer (DER 形式証明書) という名前で /etc/refind.d/keys ディレクトリに配置してください。

--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
ヒント: カーネルの署名は pacman フックを使って自動化できます。セキュアブート#pacman フックでカーネルに署名する を見てください。

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 は様々な方法で Linux を起動することができます。The rEFInd Boot Manager: Methods of Booting Linux でそれらの方法が触れられています。

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/sdXY はあなたの 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 はインストールディレクトリに存在する 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 フック

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= の部分は、あなたの環境で正しく動作するアップデートコマンドに変更する必要があるかもしれません。#手動インストールを行った場合は、フックから呼び出す独自のアップデートスクリプトを作成することで、アップデートを自動化できます。

ヒント: #Secure Boot で rEFInd をセットアップした場合、--localkeys を追加することに加えて、--yes オプションも refind-install コマンドに追加する必要があるかもしれません。このオプションは、Secure Boot が無効化されているときにこのコマンドが実行された場合に、コマンドの実行が失敗するのを防ぐことができます。詳細は、refind-install(8) を見てください。
ノート: ESP が /boot にマウントされておらず、ESP の自動マウントに頼っている場合、EFI システムパーティション#代替のマウントポイント で説明されているように、vfat モジュールをプリロードしてください。さもないと、refind がカーネルと共にアップグレードされた場合に、ESP にアクセスできなくなってしまいます。

設定

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-zen,linux-lts,linux
...
ノート:
  • rEFInd はカーネルごとに1つの initramfs しか検出しません。つまり、フォールバック initramfs やマイクロコードのイメージは検出されないことになります。それらは手動で指定しなければなりません。
  • 上記の extra_kernel_version_strings 行が無いと、refind_linux.conf 内の %v 変数は Arch Linux カーネルにおいて機能しません。
refind_linux.conf

rEFInd が自動的にカーネルを検出する場合、カーネルパラメータの含まれている refind_linux.conf ファイルはそのカーネルと同じディレクトリに置くことができます。/usr/share/refind/refind_linux.conf-sample を設定ファイルのベースにすることができます。refind_linux.conf の1つ目のアンコメントされている行がカーネルのデフォルトパラメータとなります。それ以降の行は +F2Insert を使ってアクセスできるサブメニュー内にエントリを作成します。

あるいは、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"
警告:
  • initrd のパスは、カーネルの存在するファイルシステムのルートディレクトリからの相対パスです。これは initrd=\boot\initramfs-%v.img だったり、(/boot が ESP などの別のパーティションに存在する場合) initrd=initramfs-%v.img だったりします。
  • initrd パラメータではパスのセパレータとしてバックスラッシュ (\) を使用してください。さもないと、カーネルは initramfs イメージを見つけることができないかもしれません: EFI stub: ERROR: Failed to open file: /boot/intel-ucode.img
  • Booster によって生成された initramfs イメージを使用する場合は、initramfs ファイルの名前の initramfsbooster に置き換えてください。例: initrd=\boot\booster-%v.img
ノート:
  • 引用符は、繰り返すことによりエスケープできます (つまり、""" のエスケープ版です)。例えば、上記の refind_linux.conf の最初のブートエントリにオプション "acpi_osi=Windows 2015" を渡すには:
    "Boot using default options"     "... initrd=boot\initramfs-%v.img ""acpi_osi=Windows 2015"" "
  • rEFInd は、(カーネルのファイル名から抽出することにより) refind_linux.conf 内の %v をカーネルのバージョンに置き換えます。rEFInd で Arch Linux カーネルをサポートするには、esp/EFI/refind/refind.conf 内の extra_kernel_version_strings#rEFInd によって自動的に検出されたカーネルの場合 で説明されているように編集しなければなりません。
設定しない

rEFInd を ESP 上にインストールしただけで、それ以上の操作をせずに (例えば、UEFI シェルや KeyTool、ファームウェアから直接) rEFInd を起動すると、(なんの設定もせずに) 自動検出によって作成されたブートメニュが表示されます。

これがうまく行くのは、rEFInd にフォールバック機構があるからです。この機能は以下のようなことができます:

ノート: rEFInd はエスケープコードをサポートしていません (例えば、/etc/fstab でのファイルパスのスペース)。

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

カーネルが自動検出されない場合、もしくはメニューエントリのオプションを自分で設定したい場合、手動で 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"
	}
}

カーネルの存在するパーティションのファイルシステム LABELPARTLABELPARTUUID のどれかとマッチするように volume を変更する必要があるでしょう。PARTUUID は大文字である必要があります。ボリュームラベルの割当の例は 永続的なブロックデバイスの命名#by-label を見てください。volume が指定されていない場合、rEFInd が起動したパーティション (典型的には EFI システムパーティション) のボリュームをデフォルトとして使用します。

警告:
  • loaderinitrd のパスは、カーネルの存在するファイルシステムのルートディレクトリからの相対パスです。/boot が ESP などの別のパーティションに存在する場合、loader と initrd のパスはそれぞれ /vmlinuz-linux/initramfs-linux.img となります。
  • 引用符で囲まれた initrd パラメータすべてで、パスのセパレータとしてバックスラッシュ (\) を使用してください。さもないと、カーネルは initramfs イメージを見つけることができないかもしれません: EFI stub: ERROR: Failed to open file: /boot/initramfs-linux.img
  • Booster によって生成された initramfs イメージを使用する場合は、initramfs ファイルの名前の initramfsbooster に置き換えてください。例: initrd /boot/booster-linux.img
ノート: 引用符は、繰り返すことによりエスケープできます (つまり、""" のエスケープ版です)。例えば、オプション "acpi_osi=Windows 2015" を上記のブートエントリ "Arch Linux" に渡すには:
options  "... initrd=boot\amd-ucode.img ""acpi_osi=Windows 2015"" "

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

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

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

ノート: 一部のケースで、Windows は異なった挙動をします (低解像度の起動画面、OEM ロゴが Windows のロゴに置き換わる、起動画面のあとに黒画面、アーティファクト)。そのような問題に遭遇した場合、esp/EFI/refind/refind.confuse_graphics_for +,windows を設定するか、Windows のブート設定に graphics on を追加してみてください。

ツール

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-efiAUR をインストールし、それを esp/EFI/tools/ にコピーしてください。

# cp /usr/share/memtest86-efi/bootx64.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.efiKeyTool-signed.efi という名前で esp/esp/EFI/tools/ に配置してください。

KeyTool.efi を署名する方法については セキュアブート#KeyTool を使う を見てください。

GPT fdisk (gdisk)

gdisk EFI アプリケーションをダウンロードし、gdisk_x64.efiesp/EFI/tools/ にコピーしてください。

fwupdate

fwupd をインストール・セットアップしてください。

fwupx64.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.efignu-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_x64.efi ドライバがインストールされていることを確認してください。/usr/share/refind/drivers_x64/btrfs_x64.efi から esp/EFI/refind/drivers_x64/btrfs_x64.efi にコピーすることで手動でインストールできます。または、refind-install /dev/sdx --alldrivers オプションですべてのドライバをインストールできます。
警告: btrfs_x64.efiraid1c3/4 をサポートしていません。

自動検出

Btrfs ボリューム上でカーネルの自動検出を有効にするには、refind.conf 内の also_scan_dirs をアンコメントしてください。

esp/EFI/refind/refind.conf
...
also_scan_dirs +,subvolume/boot
...

次に、refind_linux.conf 内の rootflagssubvol=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 で値を確認するか、bootclt の出力の "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 パーティションの PARTUUIDrefind.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
...

参照

翻訳ステータス: このページは en:rEFInd の翻訳バージョンです。最後の翻訳日は 2022-10-12 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。