「REFInd」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(コマンド名が古かった(?)ので最新パッケージに含まれるコマンドに更新)
(同期)
1行目: 1行目:
  +
{{Lowercase title}}
 
[[Category:ブートローダー]]
 
[[Category:ブートローダー]]
 
[[en:REFInd]]
 
[[en:REFInd]]
9行目: 10行目:
 
{{Related|EFISTUB}}
 
{{Related|EFISTUB}}
 
{{Related articles end}}
 
{{Related articles end}}
  +
rEFInd は [[UEFI]] のブートマネージャです。[[EFISTUB]] カーネルを起動することができます。既にメンテナンスされてない [http://refit.sourceforge.net/ rEFIt] のフォークであり、Mac 以外の UEFI ブートに関して多数の問題が修正されています。プラットフォームに依存せず、複数の OS を簡単に起動できるように設計されています。
{{Lowercase title}}
 
{{Lowercase title}}
 
rEFInd は [[UEFI]] のブートマネージャです。既にメンテナンスされてない [http://refit.sourceforge.net/ rEFIt] のフォークであり、Mac 以外の UEFI ブートに関して多数の問題が修正されています。プラットフォームに依存せず、複数の OS を簡単に起動できるように設計されています。
 
   
{{Note|この記事では [[UEFI#EFI System Partition|EFI System Partition]] (ESP) のマウントポイントを {{ic|$esp}} で示します。}}
+
{{Note|この記事では [[UEFI#EFI System Partition|EFI System Partition]] (ESP) のマウントポイントを {{ic|''esp''}} で示します。}}
   
 
== インストール ==
 
== インストール ==
   
[[公式リポジトリ]]から {{pkg|refind-efi}} をインストールしてください。
+
{{pkg|refind-efi}} パッケージをインストールしてください。
  +
  +
rEFInd には ReiserFS, Ext2, Ext4, Btrfs, ISO-9660, HFS+, NTFS の読み取り専用ドライバーが備わっています。さらに rEFInd は UEFI ファームウェアのドライバー (FAT あるいは Mac の場合 HFS+、一部の環境では ISO-9660) を使うことができます。
  +
  +
{{Note|カーネルと initramfs は rEFInd が読み込めるファイルシステム上に配置する必要があります。バージョン 0.10.4 以前では Ext4 ファイルシステムの {{ic|64bit}} 機能に対応していません。}}
  +
  +
他のドライバーについては [http://www.rodsbooks.com/refind/drivers.html#finding The rEFInd Boot Manager: Using EFI Drivers: Finding Additional EFI Drivers] を参照してください。
   
 
=== スクリプトによる設定 ===
 
=== スクリプトによる設定 ===
   
rEFInd パッケージには {{ic|/usr/bin/refind-install}} というスクリプトが含まれており、簡単に rEFInd をデフォルトの EFI ブートエントリに設定できます。このスクリプトにはオプションが存在し、様々なセットアップや UEFI 実装に対応していますが、大抵は次を実行するだけで設定が可能です:
+
rEFInd パッケージには {{ic|refind-install}} というスクリプトが含まれており、簡単に rEFInd をデフォルトの EFI ブートエントリに設定できます。詳しくは {{man|8|refind-install}} を参照してください。このスクリプトにはオプションが存在し、様々なセットアップや UEFI 実装に対応していますが、大抵は次を実行するだけで設定が可能です:
   
 
# refind-install
 
# refind-install
   
 
このコマンドは [[UEFI#EFI System Partition|EFI システムパーティション]]を検出して、rEFInd のファイルを ESP 上の {{ic|/EFI/refind/}} にコピーし、[[UEFI#efibootmgr|efibootmgr]] を使って rEFInd をデフォルトの EFI ブートエントリとして追加します。
 
このコマンドは [[UEFI#EFI System Partition|EFI システムパーティション]]を検出して、rEFInd のファイルを ESP 上の {{ic|/EFI/refind/}} にコピーし、[[UEFI#efibootmgr|efibootmgr]] を使って rEFInd をデフォルトの EFI ブートエントリとして追加します。
 
{{Note|デフォルトでは {{ic|refind-install}} は root ファイルシステムのドライバーだけをインストールします。他にもドライバーが必要な場合は [[#ファイルシステムのドライバー]] を見て下さい。}}
 
   
 
また、デフォルト/フォールバックのブートパスである {{ic|/EFI/BOOT/BOOT*.EFI}} に rEFInd をインストールすることもできます。ブータブルな USB フラッシュドライブや、efibootmgr による NVRAM の変更に問題を抱えているシステム等で有用です:
 
また、デフォルト/フォールバックのブートパスである {{ic|/EFI/BOOT/BOOT*.EFI}} に rEFInd をインストールすることもできます。ブータブルな USB フラッシュドライブや、efibootmgr による NVRAM の変更に問題を抱えているシステム等で有用です:
   
# refind-install --usedefault '''/dev/sdXY'''
+
# refind-install --usedefault ''/dev/sdXY''
   
'''/dev/sdXY''' は ESP のパーティションに置き換えて下さい。オプションについてはインストールスクリプトのコメントを見て下さい。
+
{{ic|''/dev/sdXY''}} は ESP のパーティションに置き換えて下さい。
  +
  +
オプションについてはインストールスクリプトのコメントを見て下さい。
  +
  +
{{Note|デフォルトでは {{ic|refind-install}} はカーネルが存在するファイルシステムのドライバーだけをインストールします。他にもドライバーが必要な場合は手動でインストールしてください。もしくは {{ic|--alldrivers}} おp0うションで全てのドライバーをインストールすることもできます。USB フラッシュドライブなどでは全てのドライバーをインストールすると便利です: {{ic|# refind-install --usedefault ''/dev/sdXY'' --alldrivers}}。}}
   
 
rEFInd のファイルを ESP にインストールしたら、rEFInd が作成した {{ic|refind_linux.conf}} (カーネルと同じディレクトリにあります) に必要な[[カーネルパラメータ]] (例: {{ic|1=root=}}) が含まれていることを確認してください。このファイルが作成されていない場合は、手動で [[#カーネルパラメータを指定]] する必要があります。そうしないと次の起動時にカーネルパニックが発生します。
 
rEFInd のファイルを ESP にインストールしたら、rEFInd が作成した {{ic|refind_linux.conf}} (カーネルと同じディレクトリにあります) に必要な[[カーネルパラメータ]] (例: {{ic|1=root=}}) が含まれていることを確認してください。このファイルが作成されていない場合は、手動で [[#カーネルパラメータを指定]] する必要があります。そうしないと次の起動時にカーネルパニックが発生します。
41行目: 48行目:
 
{{Tip|デフォルトのオプションが問題ないか確認するために ESP にあるデフォルト設定 {{ic|/EFI/refind/refind.conf}} を編集してみると良いでしょう。}}
 
{{Tip|デフォルトのオプションが問題ないか確認するために ESP にあるデフォルト設定 {{ic|/EFI/refind/refind.conf}} を編集してみると良いでしょう。}}
   
  +
{{Warning|chroot で refind-install を実行する場合 (Arch Linux をライブ環境でインストールする際など)、{{ic|/boot/refind-linux.conf}} が作られるときに実際にインストールされる環境ではなくライブ環境のカーネルオプションが使われます。そのため手動で {{ic|/boot/refind-linux.conf}} のカーネルオプションを調整する必要があります。}}
=== 手動設定 ===
 
{{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''' に置き換えてください。}}
 
   
  +
==== Secure Boot ====
{{ic|refind-install}} スクリプトが上手く動かない場合、rEFInd を手動で設定することができます。
 
   
  +
rEFInd における[[セキュアブート]]のサポートについては [http://www.rodsbooks.com/refind/secureboot.html Managing Secure Boot] を参照してください。
まず実行可能ファイルを ESP にコピーしてください:
 
   
  +
===== PreLoader を使う =====
# cp /usr/share/refind/refind_x64.efi $esp/EFI/refind/
 
   
  +
[[セキュアブート#PreLoader の設定]]を参照して署名済みの {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} バイナリを用意してください。
それから [[UEFI#efibootmgr|efibootmgr]] を使って UEFI の NVRAM にブートエントリを作成してください (X と Y はあなたの ESP のマウントポイントに合わせて置き換えて下さい)。rEFInd をデフォルトの UEFI のパス {{ic|/EFI/BOOT/BOOTX64.EFI}} にインストールした場合は、このステップは省略してもかまいません。
 
   
  +
{{ic|--preloader ''/path/to/preloader''}} オプションを付けて {{ic|refind-install}} を実行します:
# efibootmgr -c -d /dev/sdX -p Y -l /EFI/refind/refind_x64.efi -L "rEFInd Boot Manager"
 
   
  +
# refind-install --preloader /usr/share/preloader-signed/PreLoader.efi
この時点で rEFInd で起動することができるようになっているはずです。ただしカーネルを起動することはできません。カーネルが ESP にない場合、(適切なドライバーが存在するとき) rEFInd はパーティションをマウントしてカーネルを検索することができます:
 
   
  +
セキュアブートを有効にして起動すると、HashTool が起動するので rEFInd のハッシュ ({{ic|loader.efi}}) と rEFInd のドライバー (例: {{ic|ext4_x64.efi}}) そしてカーネルを登録してください。
# mkdir $esp/EFI/refind/drivers
 
# cp /usr/share/refind/drivers_x64/myrootfs_x64.efi $esp/EFI/refind/drivers
 
   
  +
詳しくは {{man|8|refind-install}} を見てください。
これで rEFInd はカーネルのブートエントリが用意できますが、適切なカーネルパラメータを指定しません。[[#カーネルパラメータの指定]] を行って下さい。それによって rEFInd を使ってカーネルを起動することができるようになります。この段階で起動ができない、または rEFInd の設定を変更したい場合、設定ファイルを使ってオプションを変更することができます:
 
   
  +
{{Tip|署名済み ''HashTool'' は起動されたパーティションだけにアクセスすることができます。カーネルが ESP 上にない場合、''HashTool'' からハッシュを登録することはできなくなります。MokList のハッシュを登録できる [[#KeyTool]] を使うことで問題を解決できます。''KeyTool'' は使用する前に必ずハッシュを登録するようにしてください。}}
# cp /usr/share/refind/refind.conf-sample $esp/EFI/refind/refind.conf
 
   
  +
===== shim を使う =====
サンプル設定ファイルにたくさんコメントが付いているので開いてみて下さい。
 
   
  +
{{AUR|shim-signed}} を[[インストール]]してください。[[セキュアブート#shim]] の通りに進めてください。ただしファイルのコピーは無視します。
設定ファイルに {{ic|textonly}} を設定していない場合、rEFInd のアイコンをコピーしないとプレースホルダが表示されます:
 
   
  +
''shim'' でハッシュを使うだけなら {{ic|--shim ''/path/to/shim''}} オプションを付けて {{ic|refind-install}} を実行します:
# cp -r /usr/share/refind/icons $esp/EFI/refind/
 
   
  +
# refind-install --shim /usr/share/shim-signed/shim.efi
フォントをコピーして {{ic|refind.conf}} の {{ic|font}} 設定を変更することで他のフォントを使うこともできます:
 
   
  +
セキュアブートを有効にして起動すると、MokManager が起動するので rEFInd のハッシュ ({{ic|loader.efi}}) と rEFInd のドライバー (例: {{ic|ext4_x64.efi}}) そしてカーネルを登録してください。
# cp -r /usr/share/refind/fonts $esp/EFI/refind/
 
   
  +
Machine Owner Key を使って rEFInd に署名するには {{Pkg|sbsigntools}} をインストールします。
{{tip|rEFInd のメニューで F10 を押すと ESP の一番上のディレクトリにスクリーンショットが保存されます。}}
 
   
  +
{{Tip|既に [[セキュアブート#shim で鍵を使う|MOK]] を作成しているのであればファイルを {{ic|refind_local.key}}, {{ic|refind_local.crt}}, {{ic|refind_local.cer}} という名前で {{ic|/etc/refind.d/keys}} ディレクトリに配置してください。}}
=== ファイルシステムのドライバー ===
 
   
  +
{{ic|--shim ''/path/to/shim''}} と {{ic|--localkeys}} オプションを付けて {{ic|refind-install}} を実行します:
{{Note|rEFInd ではカーネルを特定の場所に置く必要はありませんが、ESP 上にカーネルがない場合、rEFInd のファイルシステムドライバーを使って読みだす必要が出て来ます。}}
 
   
  +
# refind-install --shim /usr/share/shim-signed/shim.efi --localkeys
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] を見て下さい。}}
 
   
  +
''refind-install'' は鍵を作成して自分自身とドライバーに署名します。同じ鍵を使ってカーネルに署名する必要があります。例:
==== rEFInd にドライバーをインストール ====
 
   
  +
# sbsign --key /etc/refind.d/keys/refind_local.key --cert /etc/refind.d/keys/refind_local.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux
rEFInd は自動的にインストールディレクトリのサブディレクトリである {{ic|drivers}} と {{ic|drivers_''arch''}} (例: {{ic|drivers_x64}}) から全てのドライバーをロードします。
 
   
  +
MokManager で {{ic|refind_local.cer}} を MoKList に追加してください。{{ic|refind_local.cer}} は rEFInd のインストールディレクトリ ({{ic|''esp''/EFI/refind/keys/refind_local.cer}}) の {{ic|keys}} という名前のディレクトリに存在します。
# cp /usr/share/refind/drivers_x64/'''drivername'''_x64.efi $esp/EFI/refind/drivers_x64/
 
   
  +
詳しくは {{man|8|refind-install}} を参照してください。
{{Tip|rEFInd のスクリプトを使ってインストールする場合、{{ic|--alldrivers}} オプションを使って全てのドライバーをインストールできます。ブータブルな USB フラッシュドライブなどで有用です:
 
# refind-install --usedefault /dev/sdXY --alldrivers
 
}}
 
   
==== UEFI シェルでドライバーを使う ====
+
===== 自分の鍵を使う =====
   
  +
[[セキュアブート#自分で署名した鍵を使う]]に従って鍵を作成してください。
UEFI シェルで rEFInd のドライバーを使いたいときは {{ic|load}} コマンドを使ってロードし、{{ic|map -r}} でマップされたドライブをリフレッシュしてください。
 
   
  +
{{ic|/etc/refind.d/keys}} ディレクトリを作成して署名データベース ('''db''') 鍵と証明書を保存します。ファイルの名前は次のとおりにしてください: {{ic|refind_local.key}}, {{ic|refind_local.crt}}, {{ic|refind_local.cer}}。
# load FS0:\EFI\refind\drivers\ext4_x64.efi
 
# map -r
 
   
  +
インストールスクリプトの実行時に {{ic|--localkeys}} オプションを付け加えます:
これで UEFI シェルからファイルシステムにアクセスすることができるようになります。
 
   
  +
# refind-install --localkeys
== カーネルパラメータを指定 ==
 
   
  +
これで rEFInd の EFI バイナリが自分の鍵と証明書で署名されます。
rEFInd がカーネルに渡す[[カーネルパラメータ]]を設定する方法は2つあります。
 
   
  +
=== 手動設定 ===
=== rEFInd によってカーネルが自動で検出される場合 ===
 
  +
{{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 を手動で設定することができます。
rEFInd が自動的にカーネルを検出する場合、カーネルと同じディレクトリにカーネルパラメータを記述した {{ic|refind_linux.conf}} ファイルを配置することができます。ファイルのサンプルとしては {{ic|/usr/share/refind/refind_linux.conf-sample}} を見て下さい。{{ic|refind_linux.conf}} の最初のアンコメントした行がカーネルのデフォルトパラメータになります。それ以降の行は {{ic|+}}, {{ic|F2}}, {{ic|Insert}} を使ってアクセスできるサブメニューのエントリを作成します。
 
   
もしくは、次を実行してみて下さい:
+
まず実行可能ファイルを ESP にコピーしてください:
   
  +
# cp /usr/share/refind/refind_x64.efi ''esp''/EFI/refind/
# mkrlconf
 
   
  +
それから [[UEFI#efibootmgr|efibootmgr]] を使って UEFI の NVRAM にブートエントリを作成してください ({{ic|''/dev/sdX''}} と {{ic|''Y''}} はあなたの ESP のマウントポイントに合わせて置き換えて下さい)。rEFInd をデフォルトの UEFI のパス {{ic|/EFI/BOOT/BOOTX64.EFI}} にインストールした場合は、このステップは省略してもかまいません。
{{ic|/boot}} のカーネルを確認して自動的に {{ic|refind_linux.conf}} を生成します。基本的なカーネルパラメータしか設定しないので、作成されたファイルに問題がないか確認をしましょう。
 
   
  +
# efibootmgr --create --disk ''/dev/sdX'' --part ''Y'' --loader /EFI/refind/refind_x64.efi --label "rEFInd Boot Manager"
{{ic|1=initrd=}} パラメータを指定しなかった場合、rEFInd は自動的にカーネルと同じディレクトリにある RAM ディスクのファイル名を検索して追加します。{{ic|1=initrd=}} パラメータを複数設定する必要があるときは (例: [[マイクロコード]])、{{ic|refind_linux.conf}} で手動でパラメータを設定してください。
 
   
  +
この時点で rEFInd で起動することができるようになっているはずです。ただしカーネルを起動することはできません。カーネルが ESP にない場合、(適切なドライバーが存在するとき) rEFInd はパーティションをマウントしてカーネルを検索することができます。
=== 手動でブートエントリを記述 ===
 
   
  +
rEFInd はインストールディレクトリに存在する {{ic|drivers}} と {{ic|drivers_''arch''}} (例: {{ic|drivers_x64}}) サブディレクトリから全てのドライバーを自動的にロードします。
カーネルが自動検出されない場合、もしくはメニューエントリのオプションを自分で設定したい場合、手動で {{ic|refind.conf}} にブートエントリを作成することができます。{{ic|scanfor}} には {{ic|manual}} を含めて下さい、そうしないとエントリが rEFInd のメニューに表示されません。カーネルパラメータは {{ic|options}} キーワードで設定できます。rEFInd は {{ic|initrd}} キーワードで指定されたファイルを使って {{ic|1=initrd=}} パラメータを追加します。initrd を追加する必要がある場合 (例: [[マイクロコード]])、{{ic|options}} で指定してください ({{ic|initrd}} キーワードで指定された initrd が最後に追加されます)。
 
   
{{hc|$esp/EFI/refind/refind.conf|<nowiki>
+
# mkdir ''esp''/EFI/refind/drivers_x64
  +
# cp /usr/share/refind/drivers_x64/'''drivername'''_x64.efi ''esp''/EFI/refind/drivers_x64/
...
 
   
  +
これで rEFInd はカーネルのブートエントリが用意できますが、適切なカーネルパラメータを指定しません。[[#カーネルパラメータの指定]] を行って下さい。それによって rEFInd を使ってカーネルを起動することができるようになります。この段階で起動ができない、または rEFInd の設定を変更したい場合、設定ファイルを使ってオプションを変更することができます:
menuentry "Arch Linux" {
 
icon /EFI/refind/icons/os_arch.png
 
volume Boot
 
loader /boot/vmlinuz-linux
 
initrd /boot/initramfs-linux.img
 
options "root=PARTUUID=XXXXXXXX rootfstype=XXXX rw add_efi_memmap"
 
submenuentry "Boot using fallback initramfs" {
 
initrd /boot/initramfs-linux-fallback.img
 
}
 
}
 
</nowiki>}}
 
   
  +
# cp /usr/share/refind/refind.conf-sample ''esp''/EFI/refind/refind.conf
{{ic|volume}} はカーネルイメージがあるパーティションのファイルシステム LABEL, PARTLABEL, PARTUUID, ボリューム番号 (例: {{ic|0:}}) のどれかに変更する必要があります。ボリュームラベルの例は [[Ext3#Assigning a label]] を見て下さい。
 
   
  +
サンプル設定ファイルにたくさんコメントが付いているので開いてみて下さい。
== 既存の UEFI Windows 環境で rEFInd を使う ==
 
   
  +
設定ファイルに {{ic|textonly}} を設定していない場合、rEFInd のアイコンをコピーしないとプレースホルダが表示されます:
{{Note|基本的には [[Windows と Arch のデュアルブート]]に書かれていることが適用されます。}}
 
   
  +
# cp -r /usr/share/refind/icons ''esp''/EFI/refind/
rEFInd は UEFI の Windows をインストールしたときに作成される EFI システムパーティションに対応しているため、Windows と一緒に Arch をインストールする際にもうひとつ FAT32 パーティションを作成・フォーマットする必要はありません。Windows の ESP をマウントして通常通りに rEFInd をインストールするだけです。デフォルトで、rEFInd の自動検出機能が既存の Windows (リカバリ) ブートローダーを認識するはずです。
 
   
  +
フォントをコピーして {{ic|refind.conf}} の {{ic|font}} 設定を変更することで他のフォントを使うこともできます:
== rEFInd を更新する ==
 
   
  +
# cp -r /usr/share/refind/fonts ''esp''/EFI/refind/
refind パッケージの新しいバージョンを pacman でアップデートとしてインストールした場合、上のセクションにあるような refind.conf や refind_linux.conf を除いて、refind のディレクトリとファイルをコピーする必要があります。
 
   
  +
{{tip|rEFInd のメニューで F10 を押すと ESP の一番上のディレクトリにスクリーンショットが保存されます。}}
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
 
   
  +
=== アップグレード ===
Notice: Backed up existing icons directory as icons-backup.
 
Existing refind.conf file found; copying sample file as refind.conf-sample
 
to avoid overwriting your customizations.
 
   
  +
Pacman は {{ic|/usr/share/refind/}} にある rEFInd のファイルをアップデートしますが、ESP に新しいファイルをコピーしたりはしません。{{ic|refind-install}} で rEFInd のインストールが上手くいっているのであれば、再度実行することでアップデートされたファイルをコピーできます。新しい設定ファイルは {{ic|refind.conf-sample}} としてコピーされるので、差分ツールを使って設定ファイルをマージすることができます。rEFInd が[[#手動設定]]を必要とする場合、どのファイルが必要なのかは自分で判断してコピーする必要があります。
rEFInd has been set as the default boot manager.
 
Existing //boot/refind_linux.conf found; not overwriting.
 
   
  +
==== Pacman フック ====
Installation has completed successfully.
 
</nowiki>}}
 
   
  +
フックを使うことでアップデートを自動化できます:
=== Systemd による自動化 ===
 
   
  +
{{hc|/etc/pacman.d/hooks/refind.hook|2=[Trigger]
以下のスクリプトを使うことで、refind ファイルのコピーと (必要ならば) nvram の更新を自動化することができます。
 
  +
Operation=Upgrade
  +
Type=Package
  +
Target=refind-efi
   
  +
[Action]
{{Note|UEFISYS パーティションで refind をインストールするディレクトリを変更したい場合は、スクリプトの中の $refind_dir の値を変更してください。}}
 
  +
Description = Updating rEFInd on ESP
{{hc|/usr/lib/systemd/scripts/refind_name_patchv2|<nowiki>
 
  +
When=PostTransaction
#!/usr/bin/env bash
 
  +
Exec=/usr/bin/refind-install
## COPYRIGHT 2013 : MARK E. LEE (BLUERIDER) : mlee24@binghamton.edu; mark@markelee.com
 
  +
}}
   
  +
{{ic|1=Exec=}} のコマンドは環境にあわせて適当に書き換えてください。[[#手動設定]]を行った場合、フックから自分のアップデートスクリプトを呼び出すようにすることもできます。
## 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 の設定ファイル {{ic|refind.conf}} は rEFInd の EFI アプリケーションと同じディレクトリに存在します (大抵は {{ic|''esp''/EFI/refind}} あるいは {{ic|''esp''/EFI/BOOT}})。デフォルト設定にはオプションの詳細な説明が含まれており、さらに詳しい説明は [http://www.rodsbooks.com/refind/configfile.html Configuring the Boot Manager] に載っています。
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;
 
}
 
   
  +
=== カーネルパラメータを指定 ===
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)
 
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 \
 
echo "Found boot entry, no need to update nvram";
 
) || ( ## if boot entry is not in nvram; add it
 
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
 
echo "
 
Updated nvram with entry rEFInd to boot $ref_bin
 
Did not copy configuration files, please move refind.conf to $refind_dir/";
 
)
 
}
 
main; ## run the main insertion function
 
</nowiki>}}
 
   
  +
rEFInd がカーネルに渡す[[カーネルパラメータ]]を設定する方法は2つあります。
{{hc|/usr/lib/systemd/system/refind_update.path|<nowiki>
 
[Unit]
 
Description=Update rEFInd bootloader files
 
   
  +
=== rEFInd によってカーネルが自動で検出される場合 ===
[Path]
 
PathChanged=/usr/share/refind/refind_<arch>.efi
 
Unit=refind_update.service
 
   
  +
rEFInd が自動的にカーネルを検出する場合、カーネルと同じディレクトリにカーネルパラメータを記述した {{ic|refind_linux.conf}} ファイルを配置することができます。ファイルのサンプルとしては {{ic|/usr/share/refind/refind_linux.conf-sample}} を見て下さい。{{ic|refind_linux.conf}} の最初のアンコメントした行がカーネルのデフォルトパラメータになります。それ以降の行は {{ic|+}}, {{ic|F2}}, {{ic|Insert}} を使ってアクセスできるサブメニューのエントリを作成します。
[Install]
 
  +
WantedBy=multi-user.target
 
  +
{{hc|/boot/refind_linux.conf|<nowiki>
  +
"Boot using default options" "root=PARTUUID=XXXXXXXX rw add_efi_memmap"
  +
"Boot using fallback initramfs" "root=PARTUUID=XXXXXXXX rw add_efi_memmap initrd=/boot/initramfs-linux-fallback.img"
  +
"Boot to terminal" "root=PARTUUID=XXXXXXXX rw add_efi_memmap systemd.unit=multi-user.target"
 
</nowiki>}}
 
</nowiki>}}
   
  +
もしくは、次のコマンドを実行してみて下さい:
{{hc|/usr/lib/systemd/system/refind_update.service|<nowiki>
 
[Unit]
 
Description=Update rEFInd directories, binaries, and nvram
 
   
  +
# mkrlconf
[Service]
 
Type=oneshot
 
ExecStart=/usr/bin/bash /usr/lib/systemd/scripts/refind_name_patchv2
 
RemainAfterExit=no
 
</nowiki>}}
 
   
  +
{{ic|/boot}} のカーネルを確認して自動的に {{ic|refind_linux.conf}} を生成します。基本的なカーネルパラメータしか設定しないので、作成されたファイルに問題がないか確認をしましょう。
次を実行して systemd の path ユニットを有効にしてください:
 
# systemctl enable refind_update.path
 
   
  +
{{ic|1=initrd=}} パラメータを指定しなかった場合、rEFInd は自動的にカーネルと同じディレクトリにある RAM ディスクのファイル名を検索して追加します。{{ic|1=initrd=}} パラメータを複数設定する必要があるときは、{{ic|refind_linux.conf}} で手動でパラメータを設定してください。例えば initramfs の前に[[マイクロコード]]を指定するには: {{ic|1=... initrd=/boot/intel-ucode.img initrd=/boot/initramfs-linux.img}}。
== Apple Mac ==
 
   
  +
{{Warning|{{ic|initrd}} のパスはカーネルが存在するファイルシステムのルートディレクトリからの相対パスです。{{ic|1=initrd=/boot/initramfs-linux.img}} あるいは、ESP を {{ic|/boot}} にマウントしている場合 {{ic|1=initrd=/initramfs-linux.img}} になります。}}
[[AUR]] にある {{AUR|mactel-boot}} は Linux 用の実験的な "bless" ユーティリティです。これが動作しないときは、OSX の中から "bless" を使って rEFInd をデフォルトのブートローダに設定してください。OSX の中で UEFISYS パーティションが {{ic|/mnt/efi}} にマウントされている場合、次を実行します:
 
   
  +
=== 手動でブートエントリを記述 ===
# bless --setBoot --folder /mnt/efi/EFI/refind --file /mnt/efi/EFI/refind/refind_x64.efi
 
   
  +
カーネルが自動検出されない場合、もしくはメニューエントリのオプションを自分で設定したい場合、手動で {{ic|refind.conf}} にブートエントリを作成することができます。{{ic|scanfor}} には {{ic|manual}} を含めて下さい、そうしないとエントリが rEFInd のメニューに表示されません。カーネルパラメータは {{ic|options}} キーワードで設定できます。rEFInd は {{ic|initrd}} キーワードで指定されたファイルを使って {{ic|1=initrd=}} パラメータを追加します。initrd を追加する必要がある場合 (例: [[マイクロコード]])、{{ic|options}} で指定してください ({{ic|initrd}} キーワードで指定された initrd が最後に追加されます)。
== VirtualBox ==
 
   
  +
{{hc|''esp''/EFI/refind/refind.conf|<nowiki>
[[VirtualBox#Virtualbox の EFI モードで Arch を使う]] を参照してください。
 
  +
...
  +
  +
menuentry "Arch Linux" {
  +
icon /EFI/refind/icons/os_arch.png
  +
volume "Arch Linux"
  +
loader /boot/vmlinuz-linux
  +
initrd /boot/initramfs-linux.img
  +
options "root=PARTUUID=XXXXXXXX rw add_efi_memmap"
  +
submenuentry "Boot using fallback initramfs" {
  +
initrd /boot/initramfs-linux-fallback.img
  +
}
  +
submenuentry "Boot to terminal" {
  +
add_options "systemd.unit=multi-user.target"
  +
}
  +
}
  +
</nowiki>}}
  +
  +
{{ic|volume}} はカーネルイメージがあるパーティションのファイルシステム LABEL, PARTLABEL, PARTUUID, ボリューム番号 (例: {{ic|0:}}) のどれかに変更する必要があります。ボリュームラベルの例は [[Ext3#Assigning a label]] を見て下さい。
  +
  +
== 既存の UEFI Windows 環境で rEFInd を使う ==
  +
  +
{{Note|基本的には [[Windows と Arch のデュアルブート]]に書かれていることが適用されます。}}
  +
  +
rEFInd は UEFI の Windows をインストールしたときに作成される EFI システムパーティションに対応しているため、Windows と一緒に Arch をインストールする際にもうひとつ FAT32 パーティションを作成・フォーマットする必要はありません。Windows の ESP をマウントして通常通りに rEFInd をインストールするだけです。デフォルトで、rEFInd の自動検出機能が既存の Windows (リカバリ) ブートローダーを認識するはずです。
   
 
== ツール ==
 
== ツール ==
   
 
rEFInd は様々なサードパーティ製のツールをサポートしています。ツールは別個にインストールする必要があります。{{ic|refind.conf}} の {{ic|showtools}} を編集して表示したいツールを選択してください。
 
rEFInd は様々なサードパーティ製のツールをサポートしています。ツールは別個にインストールする必要があります。{{ic|refind.conf}} の {{ic|showtools}} を編集して表示したいツールを選択してください。
{{hc|$esp/EFI/refind/refind.conf|
+
{{hc|esp/EFI/refind/refind.conf|
 
...
 
...
 
# Which non-bootloader tools to show on the tools line, and in what
 
# Which non-bootloader tools to show on the tools line, and in what
308行目: 261行目:
   
 
=== Memtest86 ===
 
=== Memtest86 ===
[[AUR]] から {{AUR|memtest86-efi}} をインストールして {{ic|$esp/EFI/tools/}} にコピーしてください。
+
[[AUR]] から {{AUR|memtest86-efi}} をインストールして {{ic|esp/EFI/tools/}} にコピーしてください。
# cp /usr/share/memtest86-efi/bootx64.efi $esp/EFI/tools/memtest86.efi
+
# cp /usr/share/memtest86-efi/bootx64.efi esp/EFI/tools/memtest86.efi
   
 
=== iPXE ===
 
=== iPXE ===
 
{{Note|rEFInd における PXE のサポートはまだ実験段階です。}}
 
{{Note|rEFInd における PXE のサポートはまだ実験段階です。}}
{{pkg|refind-efi}} には iPXE UEFI バイナリが含まれており、{{ic|$esp/EFI/tools/}} にコピーするだけで使えます。
+
{{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
+
# cp /usr/share/refind/tools_x64/ipxe_discovery_x64.efi esp/EFI/tools/ipxe_discovery.efi
# cp /usr/share/refind/tools_x64/ipxe_x64.efi $esp/EFI/tools/ipxe.efi
+
# cp /usr/share/refind/tools_x64/ipxe_x64.efi esp/EFI/tools/ipxe.efi
  +
  +
== トラブルシューティング ==
  +
  +
=== UEFI シェルでドライバーを使う ===
  +
  +
UEFI シェルで rEFInd のドライバーを使いたいときは {{ic|load}} コマンドを使ってロードし、{{ic|map -r}} でマップされたドライブをリフレッシュしてください。
  +
  +
Shell> load FS0:\EFI\refind\drivers\ext4_x64.efi
  +
Shell> map -r
  +
  +
これで UEFI シェルからファイルシステムにアクセスすることができるようになります。
  +
  +
=== btrfs サブボリュームをルートにする ===
  +
  +
[[btrfs]] サブボリュームをルートとして起動する場合、{{ic|options}} 行に {{ic|rootflags<nowiki>=</nowiki>subvol<nowiki>=</nowiki><root subvolume>}} が必要です。以下の例では 'ROOT' という名前の btrfs サブボリュームとしてルートをマウントしています (例: {{ic|mount -o subvol<nowiki>=</nowiki>ROOT /dev/sdxY /mnt}}):
  +
  +
{{hc|''esp''/EFI/refind/refind.conf|<nowiki>
  +
...
  +
  +
menuentry "Arch Linux" {
  +
icon /EFI/refind/icons/os_arch.png
  +
volume Boot
  +
loader /boot/vmlinuz-linux
  +
initrd /boot/initramfs-linux.img
  +
options "root=PARTUUID=XXXXXXXX rw rootflags=subvol=ROOT"
  +
  +
...
  +
}
  +
</nowiki>}}
  +
  +
上記の設定を行わないと次のようなエラーが発生します: {{ic|ERROR: Root device mounted successfully, but /sbin/init does not exist}}。
  +
  +
=== Apple Macs ===
  +
  +
{{AUR|mactel-boot}} は Linux 用の実験的な "bless" ユーティリティです。これが動作しないときは、OSX の中から "bless" を使って rEFInd をデフォルトのブートローダに設定してください:
  +
  +
# bless --setBoot --folder ''esp''/EFI/refind --file ''esp''/EFI/refind/refind_x64.efi
  +
  +
=== VirtualBox ===
  +
  +
現在 VirtualBox はデフォルトの {{ic|/EFI/BOOT/BOOT*.EFI}} のみ起動するため、{{ic|refind-install}} を使うときに {{ic|--usedefault}} オプションが必要です。[[VirtualBox#Virtualbox の EFI モードで Arch を使う]] を参照してください。
   
 
== 参照 ==
 
== 参照 ==
   
 
* Roderick W. Smith による [http://www.rodsbooks.com/refind/ The rEFInd Boot Manager]
 
* Roderick W. Smith による [http://www.rodsbooks.com/refind/ The rEFInd Boot Manager]
  +
* [https://sourceforge.net/p/refind/discussion/ Sourceforge の rEFInd ディスカッションフォーラム]

2017年9月28日 (木) 00:16時点における版

関連記事

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

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

インストール

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

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

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

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

スクリプトによる設定

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

# refind-install

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

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

# refind-install --usedefault /dev/sdXY

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

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

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

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

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

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

Secure Boot

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

PreLoader を使う

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

自分の鍵を使う

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

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

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

# refind-install --localkeys

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

手動設定

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

アップグレード

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

Pacman フック

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

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

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

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

設定

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

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

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

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

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

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

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

# mkrlconf

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

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

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

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

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

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

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

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

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

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

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

ツール

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

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

UEFI シェル

UEFI シェルを見て下さい。

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

Memtest86

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

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

iPXE

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

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

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

トラブルシューティング

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

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

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

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

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

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

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

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

...
        }

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

Apple Macs

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

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

VirtualBox

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

参照