「REFInd」の版間の差分
細 (→スクリプトによる設定) |
|||
111行目: | 111行目: | ||
== カーネルパラメータを指定 == |
== カーネルパラメータを指定 == |
||
+ | rEFInd がカーネルに渡す[[カーネルパラメータ]]を設定する方法は2つあります。 |
||
− | There are two methods for setting the [[kernel parameters]] that rEFInd will pass to the kernel. |
||
=== rEFInd によってカーネルが自動で検出される場合 === |
=== rEFInd によってカーネルが自動で検出される場合 === |
2015年6月24日 (水) 23:46時点における版
rEFInd は UEFI のブートマネージャです。既にメンテナンスされてない rEFIt のフォークであり、Mac 以外の UEFI ブートに関して多数の問題が修正されています。プラットフォームに依存せず、複数の OS を簡単に起動できるように設計されています。
目次
インストール
公式リポジトリから refind-efi をインストールしてください。
スクリプトによる設定
rEFInd パッケージには /usr/bin/refind-install
というスクリプトが含まれており、簡単に rEFInd をデフォルトの EFI ブートエントリに設定できます。このスクリプトにはオプションが存在し、様々なセットアップや 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 が有効になっているためです)。そのため、この時点でシステムを起動することができます。
手動設定
refind-install
スクリプトが上手く動かない場合、rEFInd を手動で設定することができます。
まず実行可能ファイルを ESP にコピーしてください:
# cp /usr/share/refind/refind_x64.efi $esp/EFI/refind/
それから efibootmgr を使って UEFI の NVRAM にブートエントリを作成してください (X と Y はあなたの ESP のマウントポイントに合わせて置き換えて下さい)。rEFInd をデフォルトの UEFI のパス /EFI/BOOT/BOOTX64.EFI
にインストールした場合は、このステップは省略してもかまいません。
# efibootmgr -c -d /dev/sdX -p Y -l /EFI/refind/refind_x64.efi -L "rEFInd Boot Manager"
この時点で rEFInd で起動することができるようになっているはずです。ただしカーネルを起動することはできません。カーネルが ESP にない場合、(適切なドライバーが存在するとき) rEFInd はパーティションをマウントしてカーネルを検索することができます:
# mkdir $esp/EFI/refind/drivers # cp /usr/share/refind/drivers_x64/myrootfs_x64.efi $esp/EFI/refind/drivers
これで 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/
ファイルシステムのドライバー
rEFInd は現在以下のファイルシステムの読み取り専用ドライバーを備えています:
rEFInd にドライバーをインストール
rEFInd は自動的にインストールディレクトリのサブディレクトリである drivers
と drivers_arch
(例: drivers_x64
) から全てのドライバーをロードします。
# cp /usr/share/refind/drivers_x64/drivername_x64.efi $esp/EFI/refind/drivers_x64/
UEFI シェルでドライバーを使う
UEFI シェルで rEFInd のドライバーを使いたいときは load
コマンドを使ってロードし、map -r
でマップされたドライブをリフレッシュしてください。
# load FS0:\EFI\refind\drivers\ext4_x64.efi # map -r
これで UEFI シェルからファイルシステムにアクセスすることができるようになります。
カーネルパラメータを指定
rEFInd がカーネルに渡すカーネルパラメータを設定する方法は2つあります。
rEFInd によってカーネルが自動で検出される場合
rEFInd が自動的にカーネルを検出する場合、カーネルと同じディレクトリにカーネルパラメータを記述した refind_linux.conf
ファイルを配置することができます。ファイルのサンプルとしては /usr/share/refind/refind_linux.conf-sample
を見て下さい。refind_linux.conf
の最初のアンコメントした行がカーネルのデフォルトパラメータになります。それ以降の行は +
, F2
, Insert
を使ってアクセスできるサブメニューのエントリを作成します。
もしくは、次を実行してみて下さい:
# refind-mkrlconf
/boot
のカーネルを確認して自動的に refind_linux.conf
を生成します。基本的なカーネルパラメータしか設定しないので、作成されたファイルに問題がないか確認をしましょう。
initrd=
パラメータを指定しなかった場合、rEFInd は自動的にカーネルと同じディレクトリにある RAM ディスクのファイル名を検索して追加します。initrd=
パラメータを複数設定する必要があるときは (例: マイクロコード)、refind_linux.conf
で手動でパラメータを設定してください。
手動でブートエントリを記述
カーネルが自動検出されない場合、もしくはメニューエントリのオプションを自分で設定したい場合、手動で 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 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 } }
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 パッケージの新しいバージョンを pacman でアップデートとしてインストールした場合、上のセクションにあるような refind.conf や refind_linux.conf を除いて、refind のディレクトリとファイルをコピーする必要があります。
rEFInd を自動で最新バージョンに更新するために、(cronjob で) refind-install を実行することができます。もしくは下で記述しているように systemd のスクリプトを使います。 以下のようにコマンドは実行されます:
/usr/bin/refind-install
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. rEFInd has been set as the default boot manager. Existing //boot/refind_linux.conf found; not overwriting. Installation has completed successfully.
Systemd による自動化
以下のスクリプトを使うことで、refind ファイルのコピーと (必要ならば) nvram の更新を自動化することができます。
/usr/lib/systemd/scripts/refind_name_patchv2
#!/usr/bin/env bash ## COPYRIGHT 2013 : MARK E. LEE (BLUERIDER) : mlee24@binghamton.edu; mark@markelee.com ## 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 } 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
/usr/lib/systemd/system/refind_update.path
[Unit] Description=Update rEFInd bootloader files [Path] PathChanged=/usr/share/refind/refind_<arch>.efi Unit=refind_update.service [Install] WantedBy=multi-user.target
/usr/lib/systemd/system/refind_update.service
[Unit] Description=Update rEFInd directories, binaries, and nvram [Service] Type=oneshot ExecStart=/usr/bin/bash /usr/lib/systemd/scripts/refind_name_patchv2 RemainAfterExit=no
次を実行して systemd の path ユニットを有効にしてください:
# systemctl enable refind_update.path
Apple Mac
AUR にある mactel-bootAUR は Linux 用の実験的な "bless" ユーティリティです。これが動作しないときは、OSX の中から "bless" を使って rEFInd をデフォルトのブートローダに設定してください。OSX の中で UEFISYS パーティションが /mnt/efi
にマウントされている場合、次を実行します:
# bless --setBoot --folder /mnt/efi/EFI/refind --file /mnt/efi/EFI/refind/refind_x64.efi
VirtualBox
VirtualBox#Virtualbox の EFI モードで Arch を使う を参照してください。
ツール
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 には 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
参照
- Roderick W. Smith による The rEFInd Boot Manager