「REFInd」の版間の差分
(→インストール: 追加) |
(→参照: 同期) |
||
319行目: | 319行目: | ||
== 参照 == |
== 参照 == |
||
− | * Roderick W. Smith による [ |
+ | * 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 ディスカッションフォーラム] |
* [https://sourceforge.net/p/refind/discussion/ Sourceforge の rEFInd ディスカッションフォーラム] |
2022年10月11日 (火) 14:59時点における版
rEFInd は UEFI ブートマネージャーです。EFISTUB カーネルを起動することができます。既にメンテナンスされてない rEFIt のフォークであり、Mac 以外の UEFI ブートに関して多数の問題が修正されています。プラットフォームに依存せず、複数の OS を簡単に起動できるように設計されています。
目次
インストール
rEFInd ブートマネージャをインストールする
refind-efi[リンク切れ: 置換パッケージ: refind] パッケージをインストールしてください。
rEFInd には ReiserFS, Ext2, Ext4, Btrfs, ISO-9660, HFS+, NTFS の読み取り専用ドライバーが備わっています。さらに rEFInd は UEFI ファームウェアのドライバー (FAT あるいは Mac の場合 HFS+、一部の環境では ISO-9660) を使うことができます。
他のドライバーについては 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 のファイルを ESP にインストールしたら、rEFInd が作成した refind_linux.conf
(カーネルと同じディレクトリにあります) に必要なカーネルパラメータ (例: root=
) が含まれていることを確認してください。このファイルが作成されていない場合は、手動で #カーネルパラメータを指定 する必要があります。そうしないと次の起動時にカーネルパニックが発生します。
デフォルトでは、rEFInd は全てのドライブをスキャンして、発見した EFI ブートローダーのブートエントリを追加します。それにはカーネルも含まれます (Arch ではデフォルトで EFISTUB が有効になっているためです)。そのため、この時点でシステムを起動することができます。
Secure Boot
rEFInd におけるセキュアブートのサポートについては Managing Secure Boot を参照してください。
PreLoader を使う
セキュアブート#PreLoader の設定を参照して署名済みの PreLoader.efi
と HashTool.efi
バイナリを用意してください。
--preloader /path/to/preloader
オプションを付けて refind-install
を実行します:
# refind-install --preloader /usr/share/preloader-signed/PreLoader.efi
セキュアブートを有効にして起動すると、HashTool が起動するので rEFInd のハッシュ (loader.efi
) と rEFInd のドライバー (例: ext4_x64.efi
) そしてカーネルを登録してください。
詳しくは refind-install(8) を見てください。
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 をインストールします。
--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-install
スクリプトが上手く動かない場合、rEFInd を手動で設定することができます。
まず実行可能ファイルを ESP にコピーしてください:
# cp /usr/share/refind/refind_x64.efi esp/EFI/refind/
それから efibootmgr を使って UEFI の NVRAM にブートエントリを作成してください (/dev/sdX
と Y
はあなたの 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 はインストールディレクトリに存在する drivers
と drivers_arch
(例: drivers_x64
) サブディレクトリから全てのドライバーを自動的にロードします。
# mkdir esp/EFI/refind/drivers_x64 # cp /usr/share/refind/drivers_x64/drivername_x64.efi esp/EFI/refind/drivers_x64/
これで rEFInd はカーネルのブートエントリが用意できますが、適切なカーネルパラメータを指定しません。#カーネルパラメータの指定 を行って下さい。それによって rEFInd を使ってカーネルを起動することができるようになります。この段階で起動ができない、または rEFInd の設定を変更したい場合、設定ファイルを使ってオプションを変更することができます:
# cp /usr/share/refind/refind.conf-sample esp/EFI/refind/refind.conf
サンプル設定ファイルにたくさんコメントが付いているので開いてみて下さい。
設定ファイルに textonly
を設定していない場合、rEFInd のアイコンをコピーしないとプレースホルダが表示されます:
# cp -r /usr/share/refind/icons esp/EFI/refind/
フォントをコピーして refind.conf
の font
設定を変更することで他のフォントを使うこともできます:
# cp -r /usr/share/refind/fonts esp/EFI/refind/
アップグレード
Pacman は /usr/share/refind/
にある rEFInd のファイルをアップデートしますが、ESP に新しいファイルをコピーしたりはしません。refind-install
で rEFInd のインストールが上手くいっているのであれば、再度実行することでアップデートされたファイルをコピーできます。新しい設定ファイルは refind.conf-sample
としてコピーされるので、差分ツールを使って設定ファイルをマージすることができます。rEFInd が#手動設定を必要とする場合、どのファイルが必要なのかは自分で判断してコピーする必要があります。
Pacman フック
フックを使うことでアップデートを自動化できます:
/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
。
手動でブートエントリを記述
カーネルが自動検出されない場合、もしくはメニューエントリのオプションを自分で設定したい場合、手動で 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 を使う
rEFInd は UEFI の Windows をインストールしたときに作成される EFI システムパーティションに対応しているため、Windows と一緒に Arch をインストールする際にもうひとつ FAT32 パーティションを作成・フォーマットする必要はありません。Windows の ESP をマウントして通常通りに rEFInd をインストールするだけです。デフォルトで、rEFInd の自動検出機能が既存の Windows (リカバリ) ブートローダーを認識するはずです。
ツール
rEFInd は様々なサードパーティ製のツールをサポートしています。ツールは別個にインストールする必要があります。refind.conf
の showtools
を編集して表示したいツールを選択してください。
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-efi[リンク切れ: 置換パッケージ: refind] には 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 を使う を参照してください。
参照
- Roderick W. Smith による The rEFInd Boot Manager
- Wikipedia:rEFInd
/usr/share/refind/docs/README.txt
- Sourceforge の rEFInd ディスカッションフォーラム