rEFInd
update 2020-03-27

環境
Windows、Fedora

要約
rEFIndは UEFI対応 Boot Managerである。
EFI環境を 自動的に探索してブートメニュー(Main Menu)に表示してくれる。
※マルチブート環境で使うと便利である。
ホームページ : http://www.rodsbooks.com/refind/

rEFInd Boot Manager のブートメニュー(Main Menu)
OSのアイコンをクリックすればOSを起動できる。
ツール アイコン(操作用アイコン)でrEFIndの操作ができる。
main_menu.jpg

rEFInd をCD/DVDに組み込んで使用する。

Contentsの中の「Getting rEFInd」のリンク先より 「A CD-R image file」 (refind-cd-x.xx.x.zip)をダウンロード、展開するとrefind-cd-x.xx.x.isoファイルが作成される。
refind-cd-x.xx.x.isoをCD/DVDに書き込めばrEFInd CD/DVDを作成できる。
作成したメディアでPC起動すればブートマネージャとして使用できる。
※rEFIndブートマネージャ画面の「端末アイコン」を選択すれば shell.efi としても使用できる。

rEFInd をUSBスティックに組み込んで使用する。

「A USB flash drive image file」(refind-flashdrive-x.xx.x.zip)ダウンロード、展開するとrefind-flashdrive-x.xx.x.imgファイルが作成される。
Linux環境では ddコマンドでUSBスティック(例: /dev/sdbであるものとする)にイメージコピーする。
dd if=refind-flashdrive-x.xx.x.img of=/dev/sdb

Windows環境ではフリーソフト Rufus を使用すればいい。
「ブートの種類」の「選択」ボタンで img ファイル を選択して「スタート」ボタンをクリックする。
作成したUSBスティックでPC起動すればUEFIブートマネージャとして使用できる。
※shell.efi としても使用できる。
rufus.jpg

Windows にインストールしてブートマネージャとして使用する。

Windows環境での使用は下記サイト参照。
「uefi-dualboot」ページ の「Windows-uefi から fedora-uefi を起動する」の「方法2」の
「Windows環境に rEFInd Boot Managerをインストールして使用する」
http://hrn25.sakura.ne.jp/win/uefi-dualboot/uefi-dualboot.html

Fedora にインストールしてブートマネージャとして使用する。

参照ページ:Installing rEFInd
http://www.rodsbooks.com/refind/installing.html

※fedora環境でrEFIndをインストールすると自動的にセットされ、PC起動するとrEFInd Boot Managerが表示される。

「A binary RPM file」をクリックして、refind-x.xx.x-1.x86_64.rpm をダウンロード。
インストール( rpm -ivh は新規install、rpm -uvh はupdate)
rpm -ivh refind-x.xx.x-1.x86_64.rpm

※ 「A binary zip file」をクリックして refind-bin-x.xx.x.zipをダウンロード、展開して ./install.sh を実行してインストールしても同じ結果が得られる。

インストールした時点で次のようになっていて、自動的にデフォルトの設定が行なわれている。
NVRAMに"rEFInd Boot Manager"が登録されている。( NVRAM:不揮発性ランダム アクセス メモリ)
/usr/share/refind-x.xx.x フォルダ内にファイルが作成されている。
/boot/efi/EFI/refind フォルダ内にファイルが作成されている。
/boot/refind_linux.conf ファイルが作成されている。
efibootmgr --verbose で確認するとrEFInd Boot Managerが作成されている。
PC再起動するとrEFInd Boot Managerが表示される。

NVRAMに登録しない方法 (NVRAMを使わないので動作がわかりやすい)
※ 起動デバイスの選択画面からEFIシステムパーティションの存在するHDDを選択すれば rEFIndのbootx64.efi が起動することになる。
※ efibootmgr --verbose で確認してもNVRAMにはrEFIndは存在しない。

rEFIndを導入する前に /boot/efi/EFI/BOOT フォルダが存在しないように BOOT_bak などとリネームして、現在の BOOTフォルダの内容を保存しておく。
./install.sh を実行すると自動的に BOOTフォルダが追加され rEFIndのbootx64.efi が作成される。

EFIシステムパーティション(ここでは /dev/sda1であるものとする)へインストールする。
./install.sh  --alldrivers --usedefault /dev/sda1
※ --alldrivers の指定ですべてのドライバーが作成される。(作成後に32bitドライバーが不要な場合は削除していい)
※ --usedefault の指定で EFI/BOOT/bootx64.efi が作成される。
※ install.sh のパラメータはrEFIndのマニュアル参照。
この作業で /boot/efi/EFI/BOOTフォルダへ bootx64.efi がインストールされる。
BOOTフォルダは新規に作成され、refindのすべてのファイルが作成されている。(不要なフォルダ、ファイルは削除していい)

手作業で環境を作成する場合は下記のようにする。
※ESP:EFI System Partition(UEFI-ベースのPCでは /boot/efi フォルダのことをESPと呼ぶ)
ESPが/boot/efi にマウントされているものとする。
df /boot/efi コマンドでマウント状況を確認することができる。
たとえば /dev/sda1 が /boot/efi にマウントされていることがわかる。

rEFInd files を次のように作業してrefindが動作する環境を作成する。
パッケージ展開した refindフォルダは /usr/share/refind-x.xx.xにあるものとする。

1.refindフォルダのすべてのファイルをコピーする。
cp -r /usr/share/refind-x.xx.x/refind /boot/efi/EFI/

2. refindフォルダに移って作業する。
cd /boot/efi/EFI/refind
 
3.不要なファイルを削除する。
x86-64 (64-bit) 環境なら
rm refind_ia32.efi (refind_x64.efiがあればいい)

4. 不要なドライバーフォルダを削除する。
rm -r drivers_ia32 (drivers_x64があればいい)

5. 設定ファイルをリネームする。
mv refind.conf-sample refind.conf
設定説明は事例も含めてrefind.confに記述してある。
設定内容の説明サイトは下記参照。
http://www.rodsbooks.com/refind/configfile.html

6. efibootmgrコマンドで rEFIndを追加する。
efibootmgr を使用する場合のpathセパレータは「\\」(バックスラッシュ)でなくても「/」でも構わないようだ。
※efibootmgrをオプションなし、で実行すれば現在のブートマネージャの状況が表示される。

efibootmgr -c -l /EFI/refind/refind_x64.efi -L rEFInd
efibootmgr -c -d /dev/sdX -p Y -l /EFI/refind/refind_x64.efi -L "rEFInd"

これでrEFIndが追加された。(順番は先頭に設定されている)
※efibootmgrでUEFI boot menu にbootエントリを作成する作業は次のようになる。
EFIパーティションを確認する。
# gdisk -l /dev/sdX
# gdisk -l /dev/sda
EFIパーティションを確認したらパーティションのUUIDを確認する
# blkid /dev/sdaY
# blkid /dev/sda1
# efibootmgr -c -d /dev/sdX -p Y -l /EFI/refind/refind_x64.efi -L "rEFInd"
# efibootmgr -c -d /dev/sda -p 1 -l /EFI/refind/refind_x64.efi -L "rEFInd"

7. 他にもブートローダがある場合はブート順を調整しておく。
たとえば、ブートローダの#3番目、#7番目、#2番目のようにしたい場合は hex値で
efibootmgr -o 3,7,2
のように指定する。
先頭に指定したブートローダがdefaultブートになる。

※NVRAMのエントリを削除する場合
# efibootmgr --verbose で内容を確認する。
たとえばrEFIndがBoot0000* と表示されている場合は boot番号を指定して削除できる。
# efibootmgr --delete-bootnum --bootnum 0000

8. 以上の設定後にPC再起動すればrEFIndブートマネージャが起動する。

9. rEFIndの設定ファイルは /boot/efi/EFI/refind/refind.conf である。
refind.confのひな型に合わせて記述する。

refindをSSD(HDD)に組み込む

USBメモリにrefindを組み込んでもいいが、refindをSSD(またはHDD)に組み込んでSSDをEFIブートマネージャーとして使用する。

例えばVirtualboxのストレージ(vdiファイル)にrefindを組み込んで使用すると、任意のEFIストレージのOSを選択起動できて便利である。

(1)GPTディスクに2GB程度のパーティションを作成しFAT32でフォーマットする。
このパーティションがEFIパーティションとなる。
(2)refindの「A CD-R image file」:refind-cd-x.xx.x.zipをダウンロードする。
(3)refind-cd-x.xx.x.zipを「すべて展開」すると refind-cd-x.xx.x.iso を取得できる。
(4)refind-cd-x.xx.x.iso をマウントして、全てのフォルダ、ファイルを SSDにコピーする。
Windowsで作業する場合は
エクスプローラで refind-cd-x.xx.x.iso を右クリック「マウント」で全てのフォルダ、ファイルをコピーできる。
fedora(Linux)で作業する場合は
mount -t iso9660 refind-cd-x.xx.x.iso /mnt のようにすれば /mnt フォルダに全てのフォルダ、ファイルをコピーできる。
(5)作成したSSD優先でPC起動すれば refind ブートマネージャーが起動する。

rEFIndアンインストール

Windows
mountvol b: /S のようにb:ドライブにEFIパーティションをマウントして
b:\EFIフォルダ内のrefind フォルダを削除する。

Fedora
# rm -f -r /boot/efi/EFI/refind
# rm -f /boot/refind_linux.conf も削除する。(/etc/refind.d フォルダがある場合は削除する)

※パッケージのアンインストールはeraseコマンド -e --erase
rpm -e refind-x.xx.x まで指定すればいい。



refindカスタマイズ

refind の設定ファイルは refind.conf である。
refind.conf ファイルの説明は下記サイト参照
「The rEFInd Boot Manager:Configuring the Boot Manager」
https://www.rodsbooks.com/refind/configfile.html

例えば fedora環境で作業するものとする
2つのストレージがあるものとする
/dev/sda にはfedora インストールされているものとする
/dev/sdb にはrefind がインストールされているものとする

fedoraを起動して fdisk -l でdeviceとpartitionを確認する。

refind.confファイルは /dev/sdb2にあるので/dev/sdb2をマウントする。
mount /dev/sdb2 /mnt

refind.confファイルは /mnt/EFI/boot/refind.conf にある

refind起動時には refind.conf を読み込むので、直接編集すれば反映される。

たとえば WindowsのUSBメモリ起動環境で refind.conf ファイルを編集するには次のようにする。
1.
USBメモリにFAT32のパーティション(64MBでOK) を作成して、
FAT32でフォーマットして、ドライブ文字を割り当てておく。
2.
refindサイトから「A CD-R image file」 (refind-cd-x.xx.x.zip)をダウンロードして、
refind-cd-x.xx.x.zip を右クリック > 「すべて展開」するとrefind-cd-x.xx.x.isoファイルが作成される。
3.
refind-cd-x.xx.x.isoを右クリック > マウント する。
4.
マウントされた内容を、すべてUSBメモリのFAT32領域にコピーする。
5.
以上で作成完了。
refind.confファイルは EFI\boot\refind.conf にある。

テキストメニュー表示のrefindにするには・・・
147行の #textonly となっているコメントを外せば、テキストメニュー表示のrefind が起動する。
グラフィック メニューの内容がテキスト表示になっている。

refind_textonly.jpg

メニューに表示されているアイコンを非表示にする

shim.efi などの efiファイルのアイコンを表示しないようにするには、scanしないようにファイル名を指定する。
refind_conf_dont_scan_files.png

vmlinuzを表示しないようにするには scan_all_linux_kernels false を指定する。
refind_conf_scan_all_linux_kernels.png

アイコンファイルは EFI\boot\icons フォルダ内にある

たとえばos_win8.png はWindowsアイコンである。
したがってos_win8.pngの画像を置き換えればWindowsアイコンも変わる。

refindがアイコンを判定できない場合は os_unknown.png というアイコンが表示される。

menuentryを使用した起動メニューの記述

自分独自のアイコン表示にするにはmenuentryを使って設定する。

たとえば、refindのデフォルト メニューでは同じOSは同じアイコン表示になってしまう。
このような場合は volume (デバイスのGUID)で区別する必要がある。
menuentryを記述する方法で作成すれば、volume(GUID)ごとのアイコンを指定することができるようになる。

menuentry記述でrefind起動メニューに表示するには refind.conf ファイルに scanfor manual と記述追加しておけばいい。
scanfor manual の記述はrefindのサイトに下記のような事例がある。( https://www.rodsbooks.com/refind/configfile.html )
scanfor_manual.png

各項目の説明
menuentry で指定している MyFedora という名前は refindのメニューの名前として反映される。
volume は GUID で デバイスを指定する。(下記の「GUIDの調べ方は・・・」参照)
loader には アプリケーションファイルである efiを /EFI/fedora/grubx64.efi のように指定する。

icon のPATHは refind の /EFI/refind/icons フォルダ内に置いたicon ファイルを os_myfedora.png のように指定する。
icon ファイル( png , jpg ) は任意に作成すればいい。(OSを表示するiconは 128 x128 pixcels , ツールを表示するiconは 48 x 48 pixcels で作成する)
icon 行は先頭行に記述しておく。 先頭行でない場合は、反映されないことがある(原因不明)

disabled は menuentryのテストに使用すると便利である。
コメント扱いにしたmenuentryはrefindメニューに表示される。(コメントを外すと disabledなので表示されない)

menuentry MyFedora {
    icon /EFI/refind/icons/os_myfedora.png
    volume 59EF2EB1-D339-4858-8C25-92A6531EC89C
    loader /EFI/fedora/grubx64.efi
#    disabled
}

Windowsの場合は loader \EFI\Microsoft\Boot\bootmgfw.efi のように \(バックスラッシュ)で記述する。
loaderのPATHは mountvol r: /s のように EFIパーティションにドライブレター r を割り当てて dir コマンドで dir r: \EFI\Microsoft\Boot内を探す。
(割り当てたドライブレターを削除するには mountvol r: /d )
menuentry MyWindows {
    icon /EFI/refind/icons/os_mywindows.png
    volume 9e172660-6747-4b50-beac-3834480caf79
    loader \EFI\Microsoft\Boot\bootmgfw.efi
#    disabled
}

menuentry MyPuppy {
    icon /EFI/refind/icons/os_puppy.png
    volume 0FC0AD3E-834B-4721-A4DA-C77AE7919CA2
    loader /EFI/boot/bootx64.efi
#    disabled
}

パーティションのGUIDの調べ方は・・・
Linux コマンドで調べる場合
sgdisk の場合は sgdisk -i 1 /dev/sda のように -i オプション と partition番号 と デバイスを指定して調べる。
gdisk の場合は gdisk /dev/sda のように デバイスを指定して Command 「i 」、partition 「1 」のように i オプション と partition番号の入力要求に応えていく。
どちらの場合も「Partition unique GUID」と表示されたコードを使う。(Partition GUID code ではない)

Windpws Powershell で調べる場合 ( mountvol コマンドで一覧表示することもできる)
例) 全てのディスクの Label(ドライブ名)、ドライブレター、DeviceID を表示する。
GWMI -namespace root\cimv2 -class win32_volume | FL -property Label,DriveLetter,DeviceID

結果は下記のように表示される。
EFI パーティションはドライブレターが表示されない。(ドライブレターを割り当てても空白で表示される)
下記の場合は 9e172660-6747-4b50-beac-3834480caf79 のデバイスがEFI パーティションである。

Label       :
DriveLetter : C:
DeviceID    : \\?\Volume{58b079aa-89f5-41ce-929c-53032940dd8f}\

Label       :
DriveLetter : D:
DeviceID    : \\?\Volume{91a79e00-1123-469e-923f-72b2791fc150}\

Label       :
DriveLetter :
DeviceID    : \\?\Volume{9e172660-6747-4b50-beac-3834480caf79}\

menuentry を使用して、目的のOSだけを表示するようにしたメニュー例である。
refind_custum_menu_2.png


end of list