「REFInd」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(ユニファイドカーネルイメージに変更)
 
(6人の利用者による、間の27版が非表示)
1行目: 1行目:
  +
{{Lowercase title}}
 
[[Category:ブートローダー]]
 
[[Category:ブートローダー]]
  +
[[de:rEFInd]]
 
[[en:REFInd]]
 
[[en:REFInd]]
 
[[ru:REFInd]]
 
[[ru:REFInd]]
[[zh-CN:REFInd]]
+
[[zh-hans:REFInd]]
 
{{Related articles start}}
 
{{Related articles start}}
 
{{Related|Arch ブートプロセス}}
 
{{Related|Arch ブートプロセス}}
8行目: 10行目:
 
{{Related|Unified Extensible Firmware Interface}}
 
{{Related|Unified Extensible Firmware Interface}}
 
{{Related|EFISTUB}}
 
{{Related|EFISTUB}}
  +
{{Related|booster}}
 
{{Related articles end}}
 
{{Related articles end}}
{{Lowercase title}}
 
{{Lowercase title}}
 
rEFInd は [[UEFI]] のブートマネージャです。既にメンテナンスされてない [http://refit.sourceforge.net/ rEFIt] のフォークであり、Mac 以外の UEFI ブートに関して多数の問題が修正されています。プラットフォームに依存せず、複数の OS を簡単に起動できるように設計されています。
 
   
  +
[https://www.rodsbooks.com/refind/ rEFInd] は [[UEFI]] [[ブートマネージャー]]です。[[EFISTUB]] カーネルを起動することができます。既にメンテナンスされてない rEFIt のフォークであり、Mac 以外の UEFI ブートに関して多数の問題が修正されています。プラットフォームに依存せず、複数の OS を簡単に起動できるように設計されています。
{{Note|この記事では [[UEFI#EFI System Partition|EFI System Partition]] (ESP) のマウントポイントを {{ic|$esp}} で示します。}}
 
  +
  +
{{Note|この記事では [[EFI システムパーティション]]のマウントポイントを {{ic|''esp''}} で示します。}}
  +
  +
== サポートされているファイルシステム ==
  +
  +
rEFInd は、ファイルシステムのサポートを[[Arch ブートプロセス#UEFI|ファームウェアから]]継承します (つまり、少なくとも FAT12、FAT16、FAT32 はサポートされることを意味します)。加えて、rEFInd は、ESP 上の自身のインストールディレクトリ内のサブディレクトリ {{ic|drivers}} と {{ic|drivers_x64}} (例: {{ic|''esp''/EFI/refind/drivers_x64/}}) 内にある [[Unified Extensible Firmware Interface#UEFI ドライバ|UEFI ドライバ]]もロードします。
  +
  +
また、rEFInd には[https://www.rodsbooks.com/refind/drivers.html#selecting 少数の]読み取り専用 EFI ファイルシステムドライバ (特に [[ext4]] と [[Btrfs]]) も同梱されています。
   
 
== インストール ==
 
== インストール ==
   
[[公式リポジトリ]]から {{pkg|refind-efi}} をインストールしてください。
+
{{pkg|refind}} パッケージ[[インストール]]してください。
   
  +
== rEFInd ブートマネージャをインストールする ==
=== スクリプトによる設定 ===
 
   
  +
rEFInd には、ReiserFS (非推奨)、Ext2、Ext4、Btrfs、ISO-9660、HFS+ の '''読み取り専用''' サポートを実装する [[Unified Extensible Firmware Interface#UEFI ドライバ|UEFI ドライバ]]が同梱されています。さらに、rEFInd は、UEFI 自体によってアクセス可能な任意のファイルシステムにアクセスできます。これには、FAT (UEFI 仕様によって義務付けられています)、Mac の HFS+、一部のシステムでは ISO-9660 が含まれています。
rEFInd パッケージには {{ic|/usr/bin/refind-install}} というスクリプトが含まれており、簡単に rEFInd をデフォルトの EFI ブートエントリに設定できます。このスクリプトにはオプションが存在し、様々なセットアップや UEFI 実装に対応していますが、大抵は次を実行するだけで設定が可能です:
 
  +
  +
他のドライバーについては [https://www.rodsbooks.com/refind/drivers.html#finding The rEFInd Boot Manager: Using EFI Drivers: Finding Additional EFI Drivers] を参照してください。
  +
  +
rEFInd を使うには、[[#refind-install スクリプトによるインストール|refind-install スクリプト]] を使うか、[[#手動インストール|rEFInd のファイルをコピーし、ブートエントリを手動でセットアップ]]して、rEFInd を [[EFI システムパーティション]]にインストールしなければなりません。
  +
  +
{{Warning|カーネルと initramfs は、rEFInd によって読み込むことのできるファイルシステム上に存在していなければなりません。}}
  +
  +
=== refind-install スクリプトによるインストール ===
  +
  +
rEFInd パッケージには ''refind-install'' というスクリプトが含まれており、簡単に rEFInd をデフォルトの EFI ブートエントリに設定できます。このスクリプトにはオプションが存在し、様々なセットアップや UEFI 実装に対応しています。様々なインストールオプションの説明は、{{man|8|refind-install}} やインストールスクリプトのコメントを見てください。
  +
  +
多くのシステムでは以下を実行するだけで十分なはずです:
   
 
# refind-install
 
# refind-install
   
このコマンドは [[UEFI#EFI System Partition|EFI システムパーティション]]を検出し、rEFInd のファイルを ESP 上の {{ic|/EFI/refind/}} にコピーし、[[UEFI#efibootmgr|efibootmgr]] を使って rEFInd をデフォルトの EFI ブートエントとして追加します。
+
このコマンドは[[ESP]] を検出しマウントしようと試み、rEFInd のファイルを {{ic|''esp''/EFI/refind/}} にコピーし、[[efibootmgr]] を使って rEFInd をデフォルトの EFI ブートアプケーションにします。
  +
  +
または、デフォルト/フォールバックのブートパスである {{ic|''esp''/EFI/BOOT/bootx64.efi}} に rEFInd をインストールすることもできます。ブータブルな USB フラッシュドライブや、''efibootmgr'' による NVRAM の変更に問題を抱えているシステム等で有用です:
  +
  +
# refind-install --usedefault ''/dev/sdXY''
  +
  +
{{ic|''/dev/sdXY''}} は EFI システムパーティションです (マウントポイントではなく、ブロックデバイスを指定してください)。
  +
  +
{{Tip|デフォルトでは {{ic|refind-install}} はカーネルの存在するファイルシステムのドライバーだけをインストールします。他にもドライバーが必要な場合は、{{ic|/usr/share/refind/drivers_x64/}} から {{ic|''esp''/EFI/refind/drivers_x64/}} にドライバを手動でコピーしてインストールしてください。もしくは {{ic|--alldrivers}} オプションで全てのドライバーをインストールすることもできます。ブータブルな USB フラッシュドライブなどでは全てのドライバーをインストールすると便利です。}}
  +
  +
rEFInd のファイルを ESP にインストールしたら、rEFInd が作成した {{ic|refind_linux.conf}} (カーネルと同じディレクトリにあります) に必要な[[カーネルパラメータ]]が含まれていることを確認してください。{{ic|--usedefault}} オプションを使用した場合はこの設定ファイルは作成されません。root として {{ic|mkrlconf}} を実行して作成してください。
  +
  +
{{Warning|chroot で {{ic|refind-install}} を実行する場合 (Arch Linux をライブ環境でインストールする際など)、{{ic|/boot/refind_linux.conf}} が作られるときに実際にインストールされる環境ではなくライブ環境のカーネルオプションが使われます。そのため {{ic|/boot/refind_linux.conf}} を編集し、[[カーネルパラメータ]]がシステムにおいて正しいことを確認してください。さもないと、次回のブート時にカーネルパニックが発生する可能性があります。設定ファイルの例は [[#refind_linux.conf]] を見てください。}}
  +
  +
デフォルトでは、rEFInd は (rEFInd にそのドライブ用のドライバが存在する) すべてのドライブをスキャンし、発見した EFI ブートローダーのブートエントリを追加します。これにはカーネルも含まれているはずです (Arch Linux はデフォルトで [[EFISTUB]] が有効化されているからです)。なので、この時点でブータブルなシステムが出来上がっているでしょう。
  +
  +
==== Secure Boot ====
  +
  +
rEFInd における[[セキュアブート]]のサポートについては [https://www.rodsbooks.com/refind/secureboot.html Managing Secure Boot] を参照してください。
  +
  +
===== PreLoader を使う =====
  +
  +
[[セキュアブート#PreLoader をセットアップする]] を参照して署名済みの {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} バイナリを用意してください。
  +
  +
{{ic|--preloader ''/path/to/preloader''}} オプションを付けて {{ic|refind-install}} を実行します:
  +
  +
# refind-install --preloader /usr/share/preloader-signed/PreLoader.efi
  +
  +
セキュアブートを有効にして起動すると、HashTool が起動するので rEFInd のハッシュ ({{ic|loader.efi}}) と rEFInd のドライバー (例: {{ic|ext4_x64.efi}}) そしてカーネル (例: {{ic|vmlinuz-linux}}) を登録してください。
  +
  +
詳しくは {{man|8|refind-install}} を見てください。
  +
  +
{{Tip|署名済み ''HashTool'' は、''HashTool''が起動されたパーティションだけにアクセスすることができます。カーネルが ESP 上にない場合、''HashTool'' からハッシュを登録することはできなくなります。[[#KeyTool]] を使うことで問題を回避できます (KeyTool は MokList のハッシュを登録でき、さらに1つのパーティションに制限されないからです)。''KeyTool'' は使用する前に必ずハッシュを登録するようにしてください。}}
  +
  +
===== shim を使う =====
  +
  +
{{AUR|shim-signed}} を[[インストール]]してください。[[セキュアブート#shim]] を読んでください。ただし、ファイルをコピーする部分はすべてスキップしてください。
  +
  +
====== ハッシュを使う ======
  +
  +
''shim'' でハッシュだけを使うには、{{ic|refind-install}} を {{ic|--shim ''/path/to/shim''}} オプションで実行してください:
  +
  +
# refind-install --shim /usr/share/shim-signed/shimx64.efi
  +
  +
次回セキュアブートを有効化した状態で起動すると、MokManager が起動します。その時、rEFInd ({{ic|grubx64.efi}})、rEFInd のドライバ (例: {{ic|ext4_x64.efi}})、カーネル (例: {{ic|vmlinuz-linux}}) のハッシュを登録する必要があります。
  +
  +
====== Machine Owner Key を使う ======
  +
  +
rEFInd を Machine Owner Key (MOK) で署名するには、{{Pkg|sbsigntools}} をインストールしてください。
  +
  +
{{Tip|既に [[セキュアブート#shim で鍵を使う|MOK]] を作成しているのであればファイルを {{ic|refind_local.key}} (PEM 形式秘密鍵)、{{ic|refind_local.crt}} (PEM 形式証明書)、{{ic|refind_local.cer}} (DER 形式証明書) という名前で {{ic|/etc/refind.d/keys}} ディレクトリに配置してください。}}
  +
  +
{{ic|--shim ''/path/to/shim''}} と {{ic|--localkeys}} オプションを付けて {{ic|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
  +
  +
{{Tip|カーネルの署名は [[mkinitcpio]] のポストフックを使って自動化できます。[[Unified Extensible Firmware Interface/セキュアブート#mkinitcpio のポストフックでカーネルに署名する]] を見てください。}}
  +
  +
MokManager で {{ic|refind_local.cer}} を MoKList に追加してください。{{ic|refind_local.cer}} は rEFInd のインストールディレクトリ (例えば {{ic|''esp''/EFI/refind/keys/refind_local.cer}}) の {{ic|keys}} という名前のディレクトリに存在します。
  +
  +
詳しくは {{man|8|refind-install}} を参照してください。
   
  +
===== 自分の鍵を使う =====
{{Note|デフォルトでは {{ic|refind-install}} は root ファイルシステムのドライバーだけをインストールします。他にもドライバーが必要な場合は [[#ファイルシステムのドライバー]] を見て下さい。}}
 
   
  +
[[セキュアブート#自分の鍵を使う]] に従って鍵を作成してください。
また、デフォルト/フォールバックのブートパスである {{ic|/EFI/BOOT/BOOT*.EFI}} に rEFInd をインストールすることもできます。ブータブルな USB フラッシュドライブや、efibootmgr による NVRAM の変更に問題を抱えているシステム等で有用です:
 
   
  +
{{ic|/etc/refind.d/keys}} ディレクトリを作成して署名データベース ('''db''') 鍵と証明書を保存します。ファイルの名前は次のとおりにしてください: {{ic|refind_local.key}} (PEM 形式秘密鍵)、{{ic|refind_local.crt}} (PEM 形式証明書)、{{ic|refind_local.cer}} (DER 形式証明書)。
# refind-install --usedefault '''/dev/sdXY'''
 
   
'''/dev/sdXY''' は ESP のパーティションに置き換えて下さい。オプションについてはインストールスクリプトのコメ見て下さい
+
インストールスクリプトの実行時に {{ic|--localkeys}} オプションを付け加えます例:
   
  +
# refind-install --localkeys
rEFInd のファイルを ESP にインストールしたら、rEFInd が作成した {{ic|refind_linux.conf}} (カーネルと同じディレクトリにあります) に必要な[[カーネルパラメータ]] (例: {{ic|1=root=}}) が含まれていることを確認してください。このファイルが作成されていない場合は、手動で [[#カーネルパラメータを指定]] する必要があります。そうしないと次の起動時にカーネルパニックが発生します。
 
   
  +
これで rEFInd の EFI バイナリが自分の鍵と証明書で署名されます。
デフォルトでは、rEFInd は全てのドライブをスキャンして、発見した EFI ブートローダーのブートエントリを追加します。それにはカーネルも含まれます (Arch ではデフォルトで [[EFISTUB]] が有効になっているためです)。そのため、この時点でシステムを起動することができます。
 
   
  +
=== 手動インストール ===
{{Tip|デフォルトのオプションが問題ないか確認するために ESP にあるデフォルト設定 {{ic|/EFI/refind/refind.conf}} を編集してみると良いでしょう。}}
 
   
  +
{{Tip|rEFInd は様々な方法で Linux を起動することができます。[https://www.rodsbooks.com/refind/linux.html The rEFInd Boot Manager: Methods of Booting Linux] でそれらの方法が触れられています。}}
=== 手動設定 ===
 
{{Tip|rEFInd は様々な方法で Linux を起動することができます。[http://www.rodsbooks.com/refind/linux.html The rEFInd Boot Manager: Methods of Booting Linux] でそれらの方法が触れられています。このセクションでは [[EFISTUB]] を使用する場合の方法を説明しています。}}
 
{{Note|32ビットの IA32 EFI を使っている場合、下のコマンドにある '''x64''' は '''ia32''' に置き換えてください。}}
 
   
{{ic|refind-install}} スクリプトが上手く動かない場合、rEFInd を手動で設定することができます。
+
{{ic|refind-install}} スクリプトが上手く動かない場合、rEFInd を手動でセットアップすることができます。
   
 
まず実行可能ファイルを ESP にコピーしてください:
 
まず実行可能ファイルを ESP にコピーしてください:
   
# cp /usr/share/refind/refind_x64.efi $esp/EFI/refind/
+
# mkdir -p ''esp''/EFI/refind
  +
# cp /usr/share/refind/refind_x64.efi ''esp''/EFI/refind/
   
  +
rEFInd をデフォルト/フォールバックブートパスにインストールしたい場合は、以下の指示で {{ic|''esp''/EFI/refind/}} を {{ic|''esp''/EFI/BOOT/}} に置き換え、rEFInd の EFI 実行ファイルを {{ic|''esp''/EFI/BOOT/bootx64.efi}} にコピーしてください:
それから [[UEFI#efibootmgr|efibootmgr]] を使って UEFI の NVRAM にブートエントリを作成してください (X と Y はあなたの ESP のマウントポイントに合わせて置き換えて下さい)。rEFInd をデフォルトの UEFI のパス {{ic|/EFI/BOOT/BOOTX64.EFI}} にインストールした場合は、このステップは省略してもかまいません。
 
   
  +
# mkdir -p ''esp''/EFI/BOOT
# efibootmgr -c -d /dev/sdX -p Y -l /EFI/refind/refind_x64.efi -L "rEFInd Boot Manager"
 
  +
# cp /usr/share/refind/refind_x64.efi ''esp''/EFI/BOOT/bootx64.efi
   
  +
それから [[efibootmgr]] を使って UEFI の NVRAM にブートエントリを作成してください ({{ic|''/dev/sdX''}} と {{ic|''Y''}} はあなたの ESP のマウントポイントに合わせて置き換えて下さい)。rEFInd をデフォルト/フォールバックのブートパス {{ic|''esp''/EFI/BOOT/bootx64.efi}} にインストールした場合は、このステップは省略してもかまいません。
この時点で rEFInd で起動することができるようになっているはずです。ただしカーネルを起動することはできません。カーネルが ESP にない場合、(適切なドライバーが存在するとき) rEFInd はパーティションをマウントしてカーネルを検索することができます:
 
   
  +
# efibootmgr --create --disk ''/dev/sdX'' --part ''Y'' --loader /EFI/refind/refind_x64.efi --label "rEFInd Boot Manager" --unicode
# mkdir $esp/EFI/refind/drivers
 
# cp /usr/share/refind/drivers_x64/myrootfs_x64.efi $esp/EFI/refind/drivers
 
   
で rEFInd はカーネルのブートエントリ用意できますが、適切カーネルパラメータを指定しません。[[#カーネルパラメータの指定]] を行って下さい。それによって rEFInd を使ってカーネルを起動することできるようになりこの段階で起動できない、または rEFInd の設定を変更したい場合、設定ファルを使ってオプションを変更することができます:
+
の時点で rEFInd で起動することができるようになっているはずですただしカーネルを起動することできませんカーネルESP にない場合、(適切なドラバーが存在するとき) rEFInd はパーティションをマウントしてカーネルを検索することができます
   
  +
rEFInd はインストールディレクトリに存在する {{ic|drivers}} と {{ic|drivers_''arch''}} (例: {{ic|drivers_x64}}) サブディレクトリから全てのドライバーを自動的にロードします。
# cp /usr/share/refind/refind.conf-sample $esp/EFI/refind/refind.conf
 
  +
  +
# 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
   
 
サンプル設定ファイルにたくさんコメントが付いているので開いてみて下さい。
 
サンプル設定ファイルにたくさんコメントが付いているので開いてみて下さい。
68行目: 158行目:
 
設定ファイルに {{ic|textonly}} を設定していない場合、rEFInd のアイコンをコピーしないとプレースホルダが表示されます:
 
設定ファイルに {{ic|textonly}} を設定していない場合、rEFInd のアイコンをコピーしないとプレースホルダが表示されます:
   
# cp -r /usr/share/refind/icons $esp/EFI/refind/
+
# cp -r /usr/share/refind/icons ''esp''/EFI/refind/
   
 
フォントをコピーして {{ic|refind.conf}} の {{ic|font}} 設定を変更することで他のフォントを使うこともできます:
 
フォントをコピーして {{ic|refind.conf}} の {{ic|font}} 設定を変更することで他のフォントを使うこともできます:
   
# cp -r /usr/share/refind/fonts $esp/EFI/refind/
+
# cp -r /usr/share/refind/fonts ''esp''/EFI/refind/
   
{{tip|rEFInd のメニューで F10 を押すと ESP の一番上のディレクトリにスクリーンショットが保存されます。}}
+
{{tip|rEFInd のメニューで {{ic|F10}} を押すと ESP の一番上のディレクトリにスクリーンショットが保存されます。}}
   
=== ファイルシステムのドライバー ===
+
=== アップグレ ===
   
  +
Pacman は {{ic|/usr/share/refind/}} にある rEFInd のファイルをアップデートしますが、ESP に新しいファイルをコピーしたりはしません。{{ic|refind-install}} で rEFInd のインストールが上手くいっているのであれば、再度実行することでアップデートされたファイルをコピーできます。新しい設定ファイルは {{ic|refind.conf-sample}} としてコピーされるので、[[diff|差分]]ツールを使って設定ファイルをマージすることができます。rEFInd が[[#手動インストール]]を必要とする場合、どのファイルが必要なのかは自分で判断してコピーする必要があります。
{{Note|rEFInd ではカーネルを特定の場所に置く必要はありませんが、ESP 上にカーネルがない場合、rEFInd のファイルシステムドライバーを使って読みだす必要が出て来ます。}}
 
   
  +
==== Pacman フック ====
rEFInd は現在以下のファイルシステムの'''読み取り専用'''ドライバーを備えています:
 
* ReiserFS
 
* Ext2
 
* [[Ext4]]
 
* [[Btrfs]]
 
* ISO-9660
 
* HFS+
 
* [[NTFS]]
 
{{Tip|追加できるドライバーについては [http://www.rodsbooks.com/refind/drivers.html#finding The rEFInd Boot Manager: Using EFI Drivers: Finding Additional EFI Drivers] を見て下さい。}}
 
   
  +
[[Pacman フック]]を使うことでアップデートの処理を自動化することができます:
==== rEFInd にドライバーをインストール ====
 
   
  +
{{hc|/etc/pacman.d/hooks/refind.hook|2=[Trigger]
rEFInd は自動的にインストールディレクトリのサブディレクトリである {{ic|drivers}} と {{ic|drivers_''arch''}} (例: {{ic|drivers_x64}}) から全てのドライバーをロードします。
 
  +
Operation=Upgrade
  +
Type=Package
  +
Target=refind
   
  +
[Action]
# cp /usr/share/refind/drivers_x64/'''drivername'''_x64.efi $esp/EFI/refind/drivers_x64/
 
  +
Description = Updating rEFInd on ESP
  +
When=PostTransaction
  +
Exec=/usr/bin/refind-install
  +
}}
   
  +
{{ic|1=Exec=}} の部分は、あなたの環境で正しく動作するアップデートコマンドに変更する必要があるかもしれません。[[#手動インストール]]を行った場合は、フックから呼び出す独自のアップデートスクリプトを作成することで、アップデートを自動化できます。
{{Tip|rEFInd のスクリプトを使ってインストールする場合、{{ic|--alldrivers}} オプションを使って全てのドライバーをインストールできます。ブータブルな USB フラッシュドライブなどで有用です:
 
  +
# refind-install --usedefault /dev/sdXY --alldrivers
 
  +
{{Tip|[[#Secure Boot]] で rEFInd をセットアップした場合、{{ic|--localkeys}} を追加することに加えて、{{ic|--yes}} オプションも {{ic|refind-install}} コマンドに追加する必要があるかもしれません。このオプションは、Secure Boot が無効化されているときにこのコマンドが実行された場合に、コマンドの実行が失敗するのを防ぐことができます。詳細は、{{man|8|refind-install}} を見てください。}}
  +
  +
{{Note|ESP が {{ic|/boot}} にマウントされておらず、ESP の自動マウントに頼っている場合、[[EFI システムパーティション#代替のマウントポイント]] で説明されているように、{{ic|vfat}} モジュールをプリロードしてください。さもないと、{{Pkg|refind}} がカーネルと共にアップグレードされた場合に、ESP にアクセスできなくなってしまいます。}}
  +
  +
== 設定 ==
  +
  +
rEFInd の設定ファイル {{ic|refind.conf}} は rEFInd の EFI アプリケーションと同じディレクトリに存在します (大抵は {{ic|''esp''/EFI/refind}} あるいは {{ic|''esp''/EFI/BOOT}})。デフォルト設定ファイルにはオプションの詳細な説明が含まれており、さらに詳しい説明は [https://www.rodsbooks.com/refind/configfile.html Configuring the Boot Manager] に載っています。
  +
  +
=== カーネルパラメータを渡す ===
  +
  +
rEFInd によってカーネルに渡される[[カーネルパラメータ]]を設定する方法は2つあります。
  +
  +
==== rEFInd によって自動的に検出されたカーネルの場合 ====
  +
  +
自動的に検出されたカーネルの場合、{{ic|/boot/refind_linux.conf}} に明示的にカーネルパラメータを指定したり、あるいはルータパーティションとカーネルパラメータを特定する rEFInd の機能に頼ったりできます。詳細は [https://www.rodsbooks.com/refind/linux.html#easiest Methods of Booting Linux: For Those With Foresight or Luck: The Easiest Method] を見てください。
  +
  +
{{Tip|
  +
* {{ic|/etc/os-release}} がカーネルと同じパーティションに存在する場合、rEFInd は自動的にブートエントリのアイコンとして Arch Linux のアイコン ({{ic|os_arch.png}}) を選択します。{{ic|/boot}} が別のパーティションにある場合は、[https://www.rodsbooks.com/refind/configfile.html#icons Configuring the Boot Manager: Setting OS Icons] を見てください。
  +
* rEFInd は [https://sourceforge.net/p/refind/discussion/general/thread/c3865a4e3a/ ユニファイドカーネルイメージのディストリビューションの検出をサポートしていません]。[[ユニファイドカーネルイメージ]]のアイコンを表示するには、{{ic|/usr/share/refind/icons/os_arch.png}} を {{ic|''esp''/EFI/Linux/}} にコピーし、ファイル名が一致していることを確認してください。例えば、{{ic|''esp''/EFI/Linux/arch-linux.efi}} が存在する場合、アイコンの名前を {{ic|''esp''/EFI/Linux/arch-linux.png}} としてください。
 
}}
 
}}
   
  +
rEFInd で Arch Linux [[カーネル]]の命名規則をサポートし、カーネルとそれぞれの initramfs イメージがマッチするようにするには、{{ic|refind.conf}} 内の {{ic|extra_kernel_version_strings}} をアンコメントし編集する必要があります。例えば:
==== UEFI シェルでドライバーを使う ====
 
   
  +
{{hc|''esp''/EFI/refind/refind.conf|
UEFI シェルで rEFInd のドライバーを使いたいときは {{ic|load}} コマンドを使ってロードし、{{ic|map -r}} でマップされたドライブをリフレッシュしてください。
 
  +
...
  +
extra_kernel_version_strings linux-hardened,linux-rt-lts,linux-zen,linux-lts,linux-rt,linux
  +
...
  +
}}
   
  +
{{Note|
# load FS0:\EFI\refind\drivers\ext4_x64.efi
 
  +
* rEFInd はカーネルごとに1つの initramfs しか検出しません。つまり、フォールバック initramfs や[[マイクロコード]]のイメージは検出されないことになります。それらは手動で指定しなければなりません。
# map -r
 
  +
* 上記の {{ic|extra_kernel_version_strings}} 行が無いと、{{ic|refind_linux.conf}} 内の {{ic|%v}} 変数は Arch Linux [[カーネル]]において機能しません。
  +
}}
   
  +
===== refind_linux.conf =====
これで UEFI シェルからファイルシステムにアクセスすることができるようになります。
 
   
  +
rEFInd が自動的にカーネルを検出する場合、カーネルパラメータの含まれている {{ic|refind_linux.conf}} ファイルはそのカーネルと同じディレクトリに置くことができます。{{ic|/usr/share/refind/refind_linux.conf-sample}} を設定ファイルのベースにすることができます。{{ic|refind_linux.conf}} の1つ目のアンコメントされている行がカーネルのデフォルトパラメータとなります。それ以降の行は {{ic|+}}、{{ic|F2}}、{{ic|Insert}} を使ってアクセスできるサブメニュー内にエントリを作成します。
== カーネルパラメータを指定 ==
 
   
  +
あるいは、{{ic|mkrlconf}} を root として実行してみてください。このスクリプトは、{{ic|/boot}} 内からカーネルを探し、自動的に {{ic|refind_linux.conf}} を生成しようと試みます。このスクリプトは、最も基本的なカーネルパラメータしか設定しませんので、作成されたファイルが正しいかを確認してください。
There are two methods for setting the [[kernel parameters]] that rEFInd will pass to the kernel.
 
   
  +
{{ic|1=initrd=}} パラメータを指定しない場合、カーネルと同じディレクトリから一般的な RAM ディスクのファイル名を探索して自動的にそのパラメータを追加します。複数の {{ic|1=initrd=}} パラメータが必要な場合、手動でそれらを {{ic|refind_linux.conf}} で指定しなければなりません。例えば、initramfs の前に[[マイクロコード]]を渡す場合:
=== rEFInd によってカーネルが自動で検出される場合 ===
 
   
  +
{{hc|/boot/refind_linux.conf|2=
rEFInd が自動的にカーネルを検出する場合、カーネルと同じディレクトリにカーネルパラメータを記述した {{ic|refind_linux.conf}} ファイルを配置することができます。ファイルのサンプルとしては {{ic|/usr/share/refind/refind_linux.conf-sample}} を見て下さい。{{ic|refind_linux.conf}} の最初のアンコメントした行がカーネルのデフォルトパラメータになります。それ以降の行は {{ic|+}}, {{ic|F2}}, {{ic|Insert}} を使ってアクセスできるサブメニューのエントリを作成します。
 
  +
"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"
  +
}}
   
  +
{{Warning|
もしくは、次を実行してみて下さい:
 
  +
* {{ic|initrd}} のパスは、カーネルの存在するファイルシステムのルートディレクトリからの相対パスです。これは {{ic|1=initrd=\boot\initramfs-%v.img}} だったり、({{ic|/boot}} が ESP などの別のパーティションに存在する場合) {{ic|1=initrd=initramfs-%v.img}} だったりします。
  +
* {{ic|initrd}} パラメータではパスのセパレータとしてバックスラッシュ ({{ic|\}}) を使用してください。さもないと、カーネルは initramfs イメージを見つけることができないかもしれません: {{ic|EFI stub: ERROR: Failed to open file: /boot/intel-ucode.img}}。
  +
* [[Booster]] によって生成された initramfs イメージを使用する場合は、initramfs ファイルの名前の {{ic|initramfs}} を {{ic|booster}} に置き換えてください。例: {{ic|1=initrd=\boot\booster-%v.img}}。
  +
}}
   
  +
{{Note|
# refind-mkrlconf
 
  +
* 引用符は、繰り返すことによりエスケープできます (つまり、{{ic|""}} は {{ic|"}} のエスケープ版です)。例えば、上記の {{ic|refind_linux.conf}} の最初のブートエントリにオプション {{ic|1="acpi_osi=Windows 2015"}} を渡すには: {{bc|1="Boot using default options" "... initrd=boot\initramfs-%v.img '''acpi_osi=""Windows 2015""''' "}}
  +
* rEFInd は、(カーネルのファイル名から抽出することにより) {{ic|refind_linux.conf}} 内の {{ic|%v}} をカーネルのバージョンに置き換えます。rEFInd で Arch Linux カーネルをサポートするには、{{ic|esp/EFI/refind/refind.conf}} 内の {{ic|extra_kernel_version_strings}} を [[#rEFInd によって自動的に検出されたカーネルの場合]] で説明されているように編集しなければなりません。
  +
}}
   
  +
===== 設定しない =====
{{ic|/boot}} のカーネルを確認して自動的に {{ic|refind_linux.conf}} を生成します。基本的なカーネルパラメータしか設定しないので、作成されたファイルに問題がないか確認をしましょう。
 
   
  +
rEFInd を ESP 上にインストールしただけで、それ以上の操作をせずに (例えば、UEFI シェルや KeyTool、ファームウェアから直接) rEFInd を起動すると、(なんの設定もせずに) 自動検出によって作成されたブートメニュが表示されます。
{{ic|1=initrd=}} パラメータを指定しなかった場合、rEFInd は自動的にカーネルと同じディレクトリにある RAM ディスクのファイル名を検索して追加します。{{ic|1=initrd=}} パラメータを複数設定する必要があるときは (例: [[マイクロコード]])、{{ic|refind_linux.conf}} で手動でパラメータを設定してください。
 
   
  +
これがうまく行くのは、rEFInd にフォールバック機構があるからです。この機能は以下のようなことができます:
=== 手動でブートエントリを記述 ===
 
  +
  +
* [https://uapi-group.org/specifications/specs/discoverable_partitions_specification/ Discoverable Partitions Specification] や {{ic|/etc/fstab}} を使って ({{ic|1=root=}} パラメータ用に) ルートパーティションを特定する。
  +
* [[Wikipedia:GUID Partition Table#Partition entries (LBA 2-33)|GPT パーティション属性]] (属性 {{ic|60}} "read-only" を使用) や {{ic|/etc/fstab}} を使ってカーネルオプション ({{ic|ro}} や {{ic|rw}}) を検出する。
  +
  +
{{Note|rEFInd はエスケープコードをサポートしていません (例えば、{{ic|/etc/fstab}} での[[fstab#|ファイルパスのスペース]])。}}
  +
  +
==== 手動でブートエントリを記述する ====
   
 
カーネルが自動検出されない場合、もしくはメニューエントリのオプションを自分で設定したい場合、手動で {{ic|refind.conf}} にブートエントリを作成することができます。{{ic|scanfor}} には {{ic|manual}} を含めて下さい、そうしないとエントリが rEFInd のメニューに表示されません。カーネルパラメータは {{ic|options}} キーワードで設定できます。rEFInd は {{ic|initrd}} キーワードで指定されたファイルを使って {{ic|1=initrd=}} パラメータを追加します。initrd を追加する必要がある場合 (例: [[マイクロコード]])、{{ic|options}} で指定してください ({{ic|initrd}} キーワードで指定された initrd が最後に追加されます)。
 
カーネルが自動検出されない場合、もしくはメニューエントリのオプションを自分で設定したい場合、手動で {{ic|refind.conf}} にブートエントリを作成することができます。{{ic|scanfor}} には {{ic|manual}} を含めて下さい、そうしないとエントリが rEFInd のメニューに表示されません。カーネルパラメータは {{ic|options}} キーワードで設定できます。rEFInd は {{ic|initrd}} キーワードで指定されたファイルを使って {{ic|1=initrd=}} パラメータを追加します。initrd を追加する必要がある場合 (例: [[マイクロコード]])、{{ic|options}} で指定してください ({{ic|initrd}} キーワードで指定された initrd が最後に追加されます)。
   
  +
手動でのブートエントリの記述については [https://www.rodsbooks.com/refind/configfile.html#stanzas Creating Manual Boot Stanzas] で説明されています。
{{hc|$esp/EFI/refind/refind.conf|<nowiki>
 
  +
  +
{{hc|''esp''/EFI/refind/refind.conf|2=
 
...
 
...
   
 
menuentry "Arch Linux" {
 
menuentry "Arch Linux" {
icon /EFI/refind/icons/os_arch.png
+
icon /EFI/refind/icons/os_arch.png
  +
volume "Arch Linux"
volume Boot
 
loader /boot/vmlinuz-linux
+
loader /boot/vmlinuz-linux
initrd /boot/initramfs-linux.img
+
initrd /boot/initramfs-linux.img
options "root=PARTUUID=XXXXXXXX rootfstype=XXXX rw add_efi_memmap"
+
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" {
+
submenuentry "Boot using fallback initramfs" {
initrd /boot/initramfs-linux-fallback.img
+
initrd /boot/initramfs-linux-fallback.img
  +
}
}
 
  +
submenuentry "Boot to terminal" {
  +
add_options "systemd.unit=multi-user.target"
  +
}
 
}
 
}
  +
}}
</nowiki>}}
 
   
{{ic|volume}} はカーネルイメージがあるパーティションのファイルシステム LABEL, PARTLABEL, PARTUUID, ボリューム番号 (例: {{ic|0:}}) のどれかに変更する必要があります。ボリュームラベルの例は [[Ext3#Assigning a label]] を見てさい。
+
カーネルの存在するパーティションのファイルシステム [[LABEL]]、[[PARTLABEL]]、[[PARTUUID]] のどれかとマッチするように {{ic|volume}} 変更する必要があるでしょう。PARTUUID は大文字である必要があります。ボリュームラベルの割当の例は [[永続的なブロックデバイスの命名#by-label]] を見てください。{{ic|volume}} が指定されていない場合、rEFInd が起動したパーティション (典型的には EFI システムパーティション) のボリュームをデフォルトとして使用します
  +
  +
{{Warning|
  +
* {{ic|loader}} と {{ic|initrd}} のパスは、カーネルの存在するファイルシステムのルートディレクトリからの相対パスです。{{ic|/boot}} が ESP などの別のパーティションに存在する場合、loader と initrd のパスはそれぞれ {{ic|/vmlinuz-linux}} と {{ic|/initramfs-linux.img}} となります。
  +
* 引用符で囲まれた {{ic|initrd}} パラメータすべてで、パスのセパレータとしてバックスラッシュ ({{ic|\}}) を使用してください。さもないと、カーネルは initramfs イメージを見つけることができないかもしれません: {{ic|EFI stub: ERROR: Failed to open file: /boot/initramfs-linux.img}}。
  +
* [[Booster]] によって生成された initramfs イメージを使用する場合は、initramfs ファイルの名前の {{ic|initramfs}} を {{ic|booster}} に置き換えてください。例: {{ic|initrd /boot/booster-linux.img}}。
  +
}}
  +
  +
{{Note|引用符は、繰り返すことによりエスケープできます (つまり、{{ic|""}} は {{ic|"}} のエスケープ版です)。例えば、オプション {{ic|1="acpi_osi=Windows 2015"}} を上記のブートエントリ {{ic|"Arch Linux"}} に渡すには: {{bc|1=options "... initrd=boot\amd-ucode.img '''acpi_osi=""Windows 2015""''' "}}
  +
}}
   
 
== 既存の UEFI Windows 環境で rEFInd を使う ==
 
== 既存の UEFI Windows 環境で rEFInd を使う ==
152行目: 298行目:
 
rEFInd は UEFI の Windows をインストールしたときに作成される EFI システムパーティションに対応しているため、Windows と一緒に Arch をインストールする際にもうひとつ FAT32 パーティションを作成・フォーマットする必要はありません。Windows の ESP をマウントして通常通りに rEFInd をインストールするだけです。デフォルトで、rEFInd の自動検出機能が既存の Windows (リカバリ) ブートローダーを認識するはずです。
 
rEFInd は UEFI の Windows をインストールしたときに作成される EFI システムパーティションに対応しているため、Windows と一緒に Arch をインストールする際にもうひとつ FAT32 パーティションを作成・フォーマットする必要はありません。Windows の ESP をマウントして通常通りに rEFInd をインストールするだけです。デフォルトで、rEFInd の自動検出機能が既存の Windows (リカバリ) ブートローダーを認識するはずです。
   
  +
{{Note|一部のケースで、Windows は異なった挙動をします (低解像度の起動画面、OEM ロゴが Windows のロゴに置き換わる、起動画面のあとに黒画面、アーティファクト)。そのような問題に遭遇した場合、{{ic|''esp''/EFI/refind/refind.conf}} で {{ic|use_graphics_for +,windows}} を設定するか、Windows のブート設定に {{ic|graphics on}} を追加してみてください。}}
== rEFInd を更新する ==
 
   
  +
== ツール ==
refind パッケージの新しいバージョンを pacman でアップデートとしてインストールした場合、上のセクションにあるような refind.conf や refind_linux.conf を除いて、refind のディレクトリとファイルをコピーする必要があります。
 
   
  +
rEFInd は、様々な[https://www.rodsbooks.com/refind/installing.html#addons サードパーティーツール]の実行をサポートしています。ツールは別途インストールする必要があります。{{ic|refind.conf}} 内の {{ic|showtools}} を編集して表示したいツールを選択してください。
rEFInd を自動で最新バージョンに更新するために、(cronjob で) refind-install を実行することができます。もしくは下で記述しているように systemd のスクリプトを使います。
 
以下のようにコマンドは実行されます:
 
{{hc|/usr/bin/refind-install|<nowiki>
 
Installing rEFInd on Linux....
 
ESP was found at /boot/efi using vfat
 
Found rEFInd installation in /boot/efi/EFI/refind; upgrading it.
 
Installing driver for ext4 (ext4_x64.efi)
 
Copied rEFInd binary files
 
   
  +
{{hc|''esp''/EFI/refind/refind.conf|
Notice: Backed up existing icons directory as icons-backup.
 
  +
...
Existing refind.conf file found; copying sample file as refind.conf-sample
 
  +
showtools [[#UEFI シェル|shell]], [[#Memtest86+|memtest]], [[#鍵管理ツール|mok_tool]], [[#GPT fdisk (gdisk)|gdisk]], [[#fwupd|fwupdate]] ...
to avoid overwriting your customizations.
 
  +
...
  +
}}
   
  +
=== UEFI シェル ===
rEFInd has been set as the default boot manager.
 
Existing //boot/refind_linux.conf found; not overwriting.
 
   
  +
[[Unified Extensible Firmware Interface#UEFI シェル]] を見てください。
Installation has completed successfully.
 
</nowiki>}}
 
   
  +
[[EFI システムパーティション]]のルートに {{ic|shellx64.efi}} をコピーしてください。
=== Systemd による自動化 ===
 
   
  +
=== Memtest86+ ===
以下のスクリプトを使うことで、refind ファイルのコピーと (必要ならば) nvram の更新を自動化することができます。
 
   
{{Note|UEFISYS パーティションで refind をインストールするディレクトリを変更たい場合はスクリプトの中の $refind_dir の値を変更してください。}}
+
{{Pkg|memtest86+-efi}} をインストールし、それを {{ic|''esp''/EFI/tools/}} にコピーしてください。
{{hc|/usr/lib/systemd/scripts/refind_name_patchv2|<nowiki>
 
#!/usr/bin/env bash
 
## COPYRIGHT 2013 : MARK E. LEE (BLUERIDER) : mlee24@binghamton.edu; mark@markelee.com
 
   
  +
# cp /boot/memtest86+/memtest.efi ''esp''/EFI/tools/memtest86.efi
## LOG
 
## 1/17/2013 : Version 2 of refind_name_patch is released
 
## : Supports long subdirectory location for refind
 
## : Updates nvram when needed
 
## : 10% speed boost
 
## 7/15/2013 : Changed arch to match 32-bit (ia32) and 64-bit (x64) naming scheme
 
## : Changed directory copying in update-efi-dir to copy tools and drivers directories explicitly
 
## : Changed efibootmgr writing code to be more concise and added (-w) to write the entry as per dusktreader's excellent guide : https://docs.google.com/document/d/1pvgm3BprpXoadsQi38FxqMOCUZhcSqFhZ26FZBkmn9I/edit
 
## : Function to check if NVRAM boot entry was already listed was fixed to use awk and an if then clause
 
## : ref_bin_escape was modified from : ref_bin_escape=${ref_bin//\//\\\\} to remove extra backslashes (error does not show up when using cmdline)
 
## 7/29/2013 : Changed location of tools,drivers, and binary directory to match capricious upstream move to /usr/share/refind
 
   
  +
=== 鍵管理ツール ===
function main () { ## main insertion function
 
declare -r refind_dir="/boot/efi/EFI/refind"; ## set the refind directory
 
arch=$(uname -m | awk -F'_' '{if ($1 == "x86") {print "x"$2} else if ($1 == "i686") {print "ia32"}}') && ## get bit architecture
 
update-efi-dir; ## updates or creates the refind directory
 
update-efi-nvram; ## updates nvram if needed
 
}
 
   
  +
rEFInd can detect Secure Boot key management tools if they are placed in rEFInd's directory on ESP, {{ic|''esp''/}} or {{ic|''esp''/EFI/tools/}}.
function update-efi-dir () { ## setup the refind directory
 
if [ ! -d $refind_dir ]; then ## check if refind directory exists
 
echo "Couldn't find $refind_dir";
 
mkdir $refind_dir && ## make the refind directory if needed
 
echo "Made $refind_dir";
 
fi;
 
if [ "$arch" ]; then ## check if anything was stored in $arch
 
cp -r /usr/share/refind/{refind_$arch.efi,keys,images,icons,fonts,docs,{tools,drivers}_$arch} $refind_dir/ && ## update the bins and dirs
 
echo "Updated binaries and directory files for refind at $refind_dir";
 
else
 
echo "Failed to detect an x86 architecture";
 
exit;
 
fi;
 
}
 
   
  +
==== HashTool ====
function update-efi-nvram () { ## update the nvram with efibootmgr
 
  +
declare -r ref_bin=${refind_dir/\/boot\/efi}/refind_$arch.efi; ## get path of refind binary (without /boot/efi)
 
  +
[[#PreLoader を使う]] に従ってください。{{ic|HashTool.efi}} は rEFInd のディレクトリに配置されます。
declare -r ref_bin_escape=${ref_bin//\//\\}; ## insert escape characters into $ref_bin
 
  +
[ "$(efibootmgr -v | awk "/${ref_bin_escape//\\/\\\\}/")" ] && ( ## check if boot entry is in nvram \
 
  +
==== MokManager ====
echo "Found boot entry, no need to update nvram";
 
  +
) || ( ## if boot entry is not in nvram; add it
 
  +
[[#shim を使う]] に従ってください。MokManager は rEFInd のディレクトリに配置されます。
declare -r esp=$(mount -l | awk '/ESP/ {print $1}') && ## get ESP partition
 
  +
efibootmgr -cgw -d ${esp:0:8} -p ${esp:8} -L "rEFInd" -l $ref_bin_escape && ## update nvram
 
  +
==== KeyTool ====
echo "
 
  +
Updated nvram with entry rEFInd to boot $ref_bin
 
  +
{{Pkg|efitools}} をインストールしてください。
Did not copy configuration files, please move refind.conf to $refind_dir/";
 
  +
)
 
  +
KeyTool EFI バイナリを {{ic|KeyTool.efi}} か {{ic|KeyTool-signed.efi}} という名前で {{ic|''esp''/}} か {{ic|''esp''/EFI/tools/}} に配置してください。
  +
  +
{{ic|KeyTool.efi}} を署名する方法については [[セキュアブート#KeyTool を使う]] を見てください。
  +
  +
=== GPT fdisk (gdisk) ===
  +
  +
[[gdisk#gdisk EFI アプリケーション|gdisk EFI アプリケーション]]をダウンロードし、{{ic|gdisk_x64.efi}} を {{ic|''esp''/EFI/tools/}} にコピーしてください。
  +
  +
=== fwupd ===
  +
  +
{{Pkg|fwupd-efi}} をインストールし、[[fwupd]] をセットアップしてください。
  +
  +
{{ic|fwupdx64.efi}} バイナリとファームウェアファイルを {{ic|''esp''/EFI/tools/}} にコピーしてください:
  +
  +
# cp /usr/lib/fwupd/efi/fwupdx64.efi ''esp''/EFI/tools/
  +
  +
=== 電源オフや再起動 ===
  +
  +
rEFInd には電源オフと再起動のメニューエントリが組み込まれていると報告されています。このツールのリストはこの Wiki ではとても広範囲なものなので、UEFI や他の UEFI ブートマネージャ (例えば [[systemd-boot]]) のユーザは、{{aur|powerofforreboot.efi}} に興味を持つかもしれません。
  +
  +
== ヒントとテクニック ==
  +
  +
=== UEFI シェルでドライバを使用する ===
  +
  +
rEFInd のドライバを UEFI シェル内で使用するには、{{ic|load}} コマンドを使ってロードし、マッピングされたドライバを {{ic|map -r}} コマンドを使ってリフレッシュしてください。
  +
  +
Shell> load FS0:\EFI\refind\drivers\ext4_x64.efi
  +
Shell> map -r
  +
  +
これで、UEFI シェルからファイルシステムにアクセスできるようになりました。
  +
  +
=== efifb の解像度を設定する ===
  +
  +
{{ic|refind.conf}} で解像度が間違った値に設定されている場合、Apple [[Mac]] を除くすべてのシステムで rEFInd は、サポートされている解像度のリストを表示します。Apple Mac の場合は、rEFInd はサイレントにデフォルトの解像度を使用します。
  +
  +
[https://docs.kernel.org/fb/efifb.html efifb] によってサポートされているフレームバッファの解像度を判断するには、{{ic|/usr/share/gnu-efi/apps/x86_64/modelist.efi}} を {{Pkg|gnu-efi}} から [[ESP]] のルートディレクトリにコピーしてください。[[UEFI シェル]] に入り、{{ic|modelist.efi}} を実行してください。
  +
  +
{{hc|Shell> FS0:\modelist.efi|
  +
GOP reports MaxMode 3
  +
0: 640x480 BGRR pitch 640
  +
*1: 800x600 BGRR pitch 800
  +
2: 1024x768 BGRR pitch 1024
  +
}}
  +
  +
どれかの解像度を {{ic|refind.conf}} で設定してください。再起動し、{{ic|dmesg {{!}} grep efifb}} を root として実行して設定が反映されていることを確認してください。
  +
  +
=== Btrfs サブボリュームのサポート ===
  +
  +
{{Tip|{{ic|btrfs_x64.efi}} ドライバがインストールされていることを確認してください。{{ic|/usr/share/refind/drivers_x64/btrfs_x64.efi}} から {{ic|''esp''/EFI/refind/drivers_x64/btrfs_x64.efi}} にコピーすることで手動でインストールできます。または、{{ic|refind-install /dev/sdx --alldrivers}} オプションですべてのドライバをインストールできます。}}
  +
  +
{{Warning|{{ic|btrfs_x64.efi}} は {{ic|raid1c3/4}} をサポートしていません。}}
  +
  +
==== 自動検出 ====
  +
  +
Btrfs ボリューム上でカーネルの自動検出を有効にするには、{{ic|refind.conf}} 内の {{ic|also_scan_dirs}} をアンコメントしてください。
  +
  +
{{hc|''esp''/EFI/refind/refind.conf|
  +
...
  +
also_scan_dirs +,''subvolume''/boot
  +
...
  +
}}
  +
  +
次に、{{ic|refind_linux.conf}} 内の {{ic|1=rootflags}} に {{ic|1=subvol=''subvolume''}} を追加してください。そして、initrd のパスの先頭に {{ic|''subvolume''}} を追加してください。
  +
  +
{{hc|/boot/refind_linux.conf|2=
  +
"Boot using standard options" "root=PARTUUID=''XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'' rw '''rootflags=subvol=''subvolume''''' initrd='''''subvolume'''''\boot\initramfs-%v.img"
  +
}}
  +
  +
==== マニュアルブートの設定 ====
  +
  +
[[btrfs]] サブボリュームをルートとして起動する場合、サブボリュームへのパスをローダーと initrd のパスの先頭に追加し、{{ic|options}} の行を {{ic|1=rootflags=subvol=''root_subvolume''}} のように変更してください。以下の例では、ルートは 'ROOT' という名前で btrfs サブボリュームとしてマウントされています (例: {{ic|1=mount -o subvol=ROOT /dev/sdxY /mnt}}):
  +
  +
{{hc|''esp''/EFI/refind/refind.conf|2=
  +
...
  +
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'''"
  +
...
 
}
 
}
  +
}}
main; ## run the main insertion function
 
</nowiki>}}
 
   
  +
そうしないと、次のようなエラーが発生します: {{ic|ERROR: Root device mounted successfully, but /sbin/init does not exist.}}
{{hc|/usr/lib/systemd/system/refind_update.path|<nowiki>
 
[Unit]
 
Description=Update rEFInd bootloader files
 
   
  +
=== LoaderDevicePartUUID ===
[Path]
 
PathChanged=/usr/share/refind/refind_<arch>.efi
 
Unit=refind_update.service
 
   
  +
バージョン 0.13.1 以降、rEFInd は UEFI 変数 [https://systemd.io/BOOT_LOADER_INTERFACE/ LoaderDevicePartUUID] の設定をサポートしています 。これを有効化すると、{{man|8|systemd-gpt-auto-generator}} が EFI システムパーティションを、{{ic|/etc/fstab}} で指定せずに自動マウントできるようになります。[[systemd#GPT パーティションの自動マウント]] を見てください。
[Install]
 
WantedBy=multi-user.target
 
</nowiki>}}
 
   
  +
rEFInd が {{ic|LoaderDevicePartUUID}} を設定できるようにするには、{{ic|refind.conf}} を編集して {{ic|write_systemd_vars true}} をアンコメントしてください:
{{hc|/usr/lib/systemd/system/refind_update.service|<nowiki>
 
[Unit]
 
Description=Update rEFInd directories, binaries, and nvram
 
   
  +
{{hc|''esp''/EFI/refind/refind.conf|2=
[Service]
 
  +
...
Type=oneshot
 
  +
write_systemd_vars true
ExecStart=/usr/bin/bash /usr/lib/systemd/scripts/refind_name_patchv2
 
  +
...
RemainAfterExit=no
 
  +
}}
</nowiki>}}
 
   
  +
{{ic|cat /sys/firmware/efi/efivars/LoaderDevicePartUUID-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f}} で値を確認するか、{{ic|bootctl}} の出力の "Boot loader sets ESP information" の状態を見ることで、この変数が設定されていることを確認できます。
次を実行して systemd の path ユニットを有効にしてください:
 
# systemctl enable refind_update.path
 
   
  +
== トラブルシューティング ==
== Apple Mac ==
 
   
  +
=== Apple Mac ===
[[AUR]] にある {{AUR|mactel-boot}} は Linux 用の実験的な "bless" ユーティリティです。これが動作しないときは、OSX の中から "bless" を使って rEFInd をデフォルトのブートローダに設定してください。OSX の中で UEFISYS パーティションが {{ic|/mnt/efi}} にマウントされている場合、次を実行します:
 
   
  +
{{AUR|mactel-boot}} は Linux 用の実験的な ''bless'' ユーティリティです。これが動作しないときは、OSX の中から ''bless'' を使って rEFInd をデフォルトのブートローダに設定してください:
# bless --setBoot --folder /mnt/efi/EFI/refind --file /mnt/efi/EFI/refind/refind_x64.efi
 
   
  +
# bless --setBoot --folder ''esp''/EFI/refind --file ''esp''/EFI/refind/refind_x64.efi
== VirtualBox ==
 
   
  +
=== 空の rEFInd メニュースクリーン ===
[[VirtualBox#Virtualbox の EFI モードで Arch を使う]] を参照してください。
 
   
  +
{{ic|drivers_x64}} フォルダにファイルシステムドライバが複数存在すると ([[#rEFInd ブートマネージャをインストールする]] を参照)、ファイルシステムドライバのバグによって rEFInd が正しく機能しなくなり、rEFInd のロゴだけの空白画面 (カスタムテーマの場合は、背景画像) が表示されることがあります。これを修正するには、'''カーネルの存在するファイルシステム用のドライバ以外'''のすべてのドライバを削除してください。
== ツール ==
 
   
  +
また、Windows とデュアルブートしている場合に rEFInd が他のディスク上の EFI システムパーティションの自動スキャンに失敗して、空白画面が発生することもあります。これを修正するには、''blkid'' を使って Windows パーティションを特定し、それぞれの Windows パーティションの [[PARTUUID]] を {{ic|refind.conf}} 内の {{ic|dont_scan_volumes}} 変数にコンマで区切って追加してください。例えば:
rEFInd は様々なサードパーティ製のツールをサポートしています。ツールは別個にインストールする必要があります。{{ic|refind.conf}} の {{ic|showtools}} を編集して表示したいツールを選択してください。
 
  +
{{hc|$esp/EFI/refind/refind.conf|
 
  +
{{hc|# blkid|2=
  +
/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'''"
  +
}}
  +
  +
{{hc|''esp''/EFI/refind/refind.conf|2=
 
...
 
...
  +
dont_scan_volumes 13aa9955-1234-5678-9098-006c334b5088,4eced110-0987-6543-2123-b0ab8576869b
# 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 シェル ===
 
[[Unified_Extensible_Firmware_Interface#UEFI_シェル|UEFI シェル]]を見て下さい。
 
   
  +
Arch のロゴではなく [[Wikipedia:ja:タックス|Tux]] が表示される場合、[https://sourceforge.net/p/refind/discussion/general/thread/767ddd52/ この問題]によるものであるかもしれません (ルートパーティションのタイプが ''Linux filesystem'' ではなく ''Linux x86-64 root (/)'' である場合)。
[[Unified_Extensible_Firmware_Interface#EFI_System_Partition|EFI System Partition]] のルートに {{ic|shellx64.efi}} をコピーして下さい。
 
   
  +
[[fdisk#パーティションタイプの変更|パーティションタイプを変更する]]ことで、この問題を解決することができます。
=== Memtest86 ===
 
[[AUR]] から {{AUR|memtest86-efi}} をインストールして {{ic|$esp/EFI/tools/}} にコピーしてください。
 
# cp /usr/share/memtest86-efi/bootx64.efi $esp/EFI/tools/memtest86.efi
 
   
  +
加えて、ルートパーティションのラベルが "Linux" であったり、"linux," という単語が含まれている場合にも、Tux が表示される場合があります。ディストリビューションの名前に合ったパーティションラベルに変更することを検討してください
=== iPXE ===
 
  +
{{Note|rEFInd における PXE のサポートはまだ実験段階です。}}
 
  +
この問題は、[[永続的なブロックデバイスの命名#by-label|ファイルシステムラベル]]を使用することで解決できます。
{{pkg|refind-efi}} には iPXE UEFI バイナリが含まれており、{{ic|$esp/EFI/tools/}} にコピーするだけで使えます。
 
  +
# cp /usr/share/refind/tools_x64/ipxe_discovery_x64.efi $esp/EFI/tools/ipxe_discovery.efi
 
  +
Tux ではなく Arch のロゴを表示させるもう一つの方法は、Arch のロゴ画像をカーネル (例えば {{ic|vmlinuz-linux}}) と同じ場所にコピーし、画像ファイルの名前をカーネルイメージのファイル名と同じにすることです:
# cp /usr/share/refind/tools_x64/ipxe_x64.efi $esp/EFI/tools/ipxe.efi
 
  +
  +
# cp /usr/share/refind/icons/os_arch.png /boot/vmlinuz-linux.png
   
 
== 参照 ==
 
== 参照 ==
   
* Roderick W. Smith による [http://www.rodsbooks.com/refind/ The rEFInd Boot Manager]
+
* Roderick W. Smith による [https://www.rodsbooks.com/refind/ The rEFInd Boot Manager]
  +
* [[Wikipedia:rEFInd]]
  +
* {{ic|/usr/share/refind/docs/README.txt}}
  +
* [https://sourceforge.net/p/refind/discussion/ Sourceforge の rEFInd ディスカッションフォーラム]
  +
  +
{{TranslationStatus|rEFInd|2023-11-11|792041}}

2024年4月24日 (水) 20:25時点における最新版

関連記事

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

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

サポートされているファイルシステム

rEFInd は、ファイルシステムのサポートをファームウェアから継承します (つまり、少なくとも FAT12、FAT16、FAT32 はサポートされることを意味します)。加えて、rEFInd は、ESP 上の自身のインストールディレクトリ内のサブディレクトリ driversdrivers_x64 (例: esp/EFI/refind/drivers_x64/) 内にある UEFI ドライバもロードします。

また、rEFInd には少数の読み取り専用 EFI ファイルシステムドライバ (特に ext4Btrfs) も同梱されています。

インストール

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 を使う

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

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-rt-lts,linux-zen,linux-lts,linux-rt,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+-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.efiKeyTool-signed.efi という名前で esp/esp/EFI/tools/ に配置してください。

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

GPT fdisk (gdisk)

gdisk EFI アプリケーションをダウンロードし、gdisk_x64.efiesp/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.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 で値を確認するか、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 パーティションの 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
...

ディストリビューションのロゴを表示してくれない

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

参照

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