Difference between revisions of "UEFI Bootloaders (日本語)"

From ArchWiki
Jump to: navigation, search
(Created page with "Category:Boot loaders (日本語) en:UEFI Bootloaders zh-CN:UEFI Bootloaders このページには Linux カーネルを起動することができる様々な U...")
 
(fix double redirect)
 
(2 intermediate revisions by one other user not shown)
Line 1: Line 1:
[[Category:Boot loaders (日本語)]]
+
#REDIRECT [[ja:ブートローダー]]
[[en:UEFI Bootloaders]]
 
[[zh-CN:UEFI Bootloaders]]
 
このページには Linux カーネルを起動することができる様々な [[Unified Extensible Firmware Interface (日本語)|UEFI]] ブートローダの情報が含まれています。このページを読む前に [[Unified Extensible Firmware Interface (日本語)|UEFI]] と [[GUID Partition Table (日本語)|GPT]] のページを読むことを推奨します。ここでは以下の[[Boot Loader|ブートローダ]]が説明されています:
 
 
 
== Linux Kernel EFISTUB ==
 
{{Warning|1=カーネルバージョンとマザーボードのモデルによっては EFISTUB の起動が失敗するというバグが報告されています。詳しくは [https://bbs.archlinux.org/viewtopic.php?id=156670&p=1] を見て下さい。}}
 
 
 
Linux カーネル ({{Pkg|linux}}>=3.3) は {{ic|EFISTUB (EFI BOOT STUB)}} ブートをサポートしています。カーネル設定で {{ic|CONFIG_EFI_STUB=y}} を設定することで有効にすることができ、Arch Linux のカーネルではデフォルトに有効にされています (詳しくは [https://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=blob_plain;f=Documentation/x86/efi-stub.txt;hb=HEAD The EFI Boot Stub] を参照してください)。
 
 
 
EFISTUB カーネルだけでは他のカーネルを起動することはできません。よってブートメニューエントリごとに EFISTUB カーネル + Initramfs のペアが必要です。このため、複数のカーネルを使う場合は、UEFI Boot Manager を使うことが推奨されています。
 
 
 
=== EFISTUB の設定 ===
 
 
 
# [[Unified Extensible Firmware Interface#EFI System Partition|EFI System Partition]] を作成してください。
 
# {{ic|/boot}} (Gummiboot を使用するか、ブートマネージャを使わないときに推奨) かどこか好きなところに (他のディストロやツールは大抵 {{ic|/boot/efi}} を使っています) EFI System Partition をマウントしてください。以後このマウントポイントは {{ic|$esp}} として示します。
 
 
 
==== ファイルを適切な場所に移動する ====
 
{{Warning|以下の手順は EFISYS のマウントポイントとして {{ic|/boot}} を使って''いない''場合にのみ必要です。マウントポイントとして {{ic|/boot}} を選んだ時は、[[#EFISTUB の起動]] に進むことができます。}}
 
 
 
# {{ic|$esp/EFI/arch/}} を作成してください
 
# 以下のファイルを移動元から移動先にコピーしてください
 
{| border="1"
 
!ブートファイルの移動元!!UEFI の移動先
 
|-
 
| /boot/vmlinuz-linux  || $esp/EFI/arch/vmlinuz-arch.efi
 
|-
 
| /boot/initramfs-linux.img || $esp/EFI/arch/initramfs-arch.img
 
|-
 
| /boot/initramfs-linux-fallback.img  || $esp/EFI/arch/initramfs-arch-fallback.img
 
|}
 
 
 
{{Warning|カーネルがアップデートされる度に EFISTUB カーネルを更新する必要があります ([[#EFISTUB の設定]] にある手順4に従って下さい。失敗すると起動が出来なくなります。また、以下の方法のどれか一つを使うことで EFISTUB カーネルを自動で更新することができます:}}
 
 
 
===== Systemd =====
 
 
 
[[systemd (日本語)|Systemd]] にはイベントトリガータスク機能があります。ここで、パス上の変更を検知する能力を使って、{{ic|boot}} にある EFISTUB カーネルと initramfs のファイルが更新されたときにそれらを同期させることが可能です。
 
 
 
{{Warning|mkinitcpio がカーネルスタブと initramfs を作成するのには時間がかかるので、以下の systemd サービスが新しいカーネルスタブと initramfs の代わりに古いものをコピーしてしまう可能性があります。このエラーを減らすために、(mkinitcpio によって最後に作成される) initramfs-linux-fallback.img が更新されたか確認する efistub のコピーサービスをバインドすると良いでしょう。}}
 
{{Tip|下のスクリプトを {{ic|/etc/systemd/system/efistub-update.path}} として保存してください}}
 
{{bc|<nowiki>
 
[Unit]
 
Description=Copy EFISTUB Kernel to UEFISYS Partition
 
 
 
[Path]
 
PathChanged=/boot/initramfs-linux-fallback.img
 
 
 
[Install]
 
WantedBy=multi-user.target
 
</nowiki>}}
 
 
 
{{Tip|下のスクリプトを {{ic|/etc/systemd/system/efistub-update.service}} として保存してください}}
 
{{bc|<nowiki>
 
[Unit]
 
Description=Copy EFISTUB Kernel to UEFISYS Partition
 
 
 
[Service]
 
Type=oneshot
 
ExecStart=/usr/bin/cp -f /boot/vmlinuz-linux $esp/EFI/arch/vmlinuz-arch.efi
 
ExecStart=/usr/bin/cp -f /boot/initramfs-linux.img $esp/EFI/arch/initramfs-arch.img
 
ExecStart=/usr/bin/cp -f /boot/initramfs-linux-fallback.img $esp/EFI/arch/initramfs-arch-fallback.img
 
</nowiki>}}
 
 
 
{{Tip|以上のサービスを次のコマンドで有効にしてください
 
{{bc|<nowiki>
 
# systemctl enable efistub-update.path
 
</nowiki>}}}}
 
 
 
===== Incron =====
 
 
 
{{Pkg|incron}} は更新後に EFISTUB カーネルを同期するスクリプトを実行することができます。
 
 
 
{{Tip|下のスクリプトを {{ic|/usr/local/bin/efistub-update.sh}} として保存してください}}
 
{{bc|<nowiki>
 
#!/usr/bin/env bash
 
/usr/bin/cp -f /boot/vmlinuz-linux $esp/EFI/arch/vmlinuz-arch.efi
 
/usr/bin/cp -f /boot/initramfs-linux.img $esp/EFI/arch/initramfs-arch.img
 
/usr/bin/cp -f /boot/initramfs-linux-fallback.img $esp/EFI/arch/initramfs-arch-fallback.img
 
</nowiki>}}
 
 
 
{{Tip|下のスクリプトを {{ic|/etc/incron.d/efistub-update.conf}} として保存してください}}
 
{{Note|最初のパラメータ {{ic|/boot/initramfs-linux-fallback.img}} は監視するファイルです。2番目のパラメータ {{ic|IN_CLOSE_WRITE}} は監視するイベントです。3番目のパラメータ {{ic|/usr/local/bin/efistub-update.sh}} は起動するスクリプトです。}}
 
{{bc|<nowiki>
 
/boot/initramfs-linux-fallback.img IN_CLOSE_WRITE /usr/local/bin/efistub-update.sh
 
</nowiki>}}
 
 
 
{{Tip|この方法を使うには、incron が有効になっている必要があります。有効になっていない場合は次を実行してください
 
{{bc|<nowiki>
 
# systemctl enable incrond.service
 
</nowiki>}}}}
 
 
 
===== Mkinitcpio hook =====
 
 
 
Mkinitcpio can generate a hook that does not need a system level daemon to function. It spawns a background process which waits for the generation of {{ic|vm-linuz}}, {{ic|initramfs-linux.img}}, and {{ic|initramfs-linux-fallback.img}}; then follows step 4 in [https://wiki.archlinux.org/index.php/UEFI_Bootloaders#Setting_up_EFISTUB Setting up EFISTUB]
 
 
 
{{Tip|Save the following script as {{ic|/usr/lib/initcpio/install/efistub-update}}}}
 
{{bc|<nowiki>
 
#!/usr/bin/env bash
 
 
 
build() {
 
/root/watch.sh &
 
}
 
 
 
help() {
 
cat <<HELPEOF
 
This hook waits for mkinitcpio to finish and copies the finished ramdisk and kernel to the ESP
 
HELPEOF
 
}
 
</nowiki>}}
 
 
 
{{Tip|Save the following script as {{ic|/root/watch.sh}} and make it executable}}
 
{{bc|<nowiki>
 
#!/usr/bin/env bash
 
 
 
while [[ -d "/proc/$PPID" ]]; do
 
sleep 1
 
done
 
 
 
/usr/bin/cp -f /boot/vmlinuz-linux $esp/EFI/arch/vmlinuz-arch.efi
 
/usr/bin/cp -f /boot/initramfs-linux.img $esp/EFI/arch/initramfs-arch.img
 
/usr/bin/cp -f /boot/initramfs-linux-fallback.img $esp/EFI/arch/initramfs-arch-fallback.img
 
 
 
echo "Synced kernel with ESP"
 
</nowiki>}}
 
 
 
{{Tip|Add {{ic|efistub-update}} to the list of hooks in {{ic|/etc/mkinitcpio.conf}}}}
 
 
 
===== /etc/fstab バインドマウント =====
 
{{Note|
 
* The following method should work similarly with any distribution that does not symlink in {{ic|/boot}}. ''See Warnings for caveats.''
 
* This involves no special scripts, services, or bootloader filesystem drivers.
 
* This centralizes and organizes kernels and initrds across installations on one partition.
 
* This avoids possible limitations imposed by firmware and/or the bootloader on boot device configuration as can often occur with RAID and/or LVM (excepting the standard FAT32 EFI system partition, of course).
 
* Beyond initial configuration this should persist without special consideration or maintenance.
 
* This should be transparent to any action normally affecting {{ic|/boot}} and the files therein.}}
 
{{Warning|
 
* This requires both a kernel and a bootloader compatible with the FAT32 filesystem.
 
* Because the FAT32 filesystem cannot handle symlinks, this will not behave as intended with an installation that requires them in {{ic|/boot}}.
 
* Initial configuration requires {{ic|root}} level access.
 
* This may require a large EFI system partition in order to accomodate multiple installations.
 
* All kernels will require at least a {{ic|1=root=''system root''}} parameter passed at boot.
 
* per rEFInd's author: ''OpenSUSE definitely uses symbolic links in {{ic|/boot}}... Fedora, Ubuntu, and ... OpenSUSE all refuse a FAT partition as {{ic|/boot}} in ... setup [which] can be worked around [in] {{ic|/etc/fstab}}.'' Forum post [[https://bbs.archlinux.org/viewtopic.php?pid=1331867#p1331867 here]].}}
 
; Method: Whereas the general convention is to mount the EFI system partition to a {{ic|/boot/efi}} subfolder, the following will achieve the opposite.
 
* Create a {{ic|ef00}} type EFI system partition of FAT32 format as described elsewhere.
 
:{{Tip|
 
:* It may be beneficial to make it several gigabytes in size to accomodate multiple installations.
 
:* Use the GPT partition name feature for added convenience. For example name the partition {{ic|esp}}.}}
 
* Create a mount-point and mount the EFI system partition somewhere on the filesystem. For example:
 
: {{ic|$ mkdir /esp<br />$ mount -L esp /esp}}
 
* Create a folder in {{ic|/EFI/boot}} on the EFI system partition to contain your system's {{ic|/boot}} files. For example:
 
: {{ic|$ mkdir /esp/EFI/boot/arch64-laptop}}
 
: {{Tip|
 
:* The refind bootloader automatically detects and adds EFI loadable kernel files installed to the EFI system partition in {{ic|/EFI/boot/*/}} by default.
 
:* Keying {{ic|F2}} on a highlighted refind boot menu entry enables adding the required {{ic|1=root=}} kernel parameter to an auto-added or otherwise unconfigured menu entry.}}
 
* Move all files in {{ic|/boot}} to the newly created folder on your EFI system partition. For example:
 
: {{ic|$ mv /boot/* /esp/EFI/boot/arch64-laptop/}}
 
* Bind mount the newly populated folder on your EFI system partition to {{ic|/boot}}. For example:
 
: {{ic|$ mount --bind /esp/EFI/boot/arch64-laptop /boot}}
 
* Verify your files are available as expected with {{ic|$ ls /boot/}} then persist the configuration by editing {{ic|/etc/fstab}}. For example:
 
: {{ic|##/etc/fstab<br />LABEL&#61;arch64-laptop_rootfs / ext4 defaults 0 0<br />LABEL&#61;esp /esp vfat defaults 0 0<br />/esp/EFI/boot/arch64-laptop /boot none defaults,bind 0 0}}
 
* Update your bootloader to apply the {{ic|1=root=}} kernel boot parameter as necessary. For example:
 
: {{ic|##/boot/refind_linux.conf<br />... root&#61;LABEL&#61;arch64-laptop_rootfs ...}}
 
{{Note| As of [https://www.archlinux.org/packages/extra/any/refind-efi/ refind-efi 0.2.7], refind automatically detects kernels in {{ic|/boot}}. They do not have to be renamed to have a {{ic|.efi}} extension either. Hence, the following sync scripts aren't needed if using [https://wiki.archlinux.org/index.php/UEFI_Bootloaders#Using_rEFInd refind]. You do need to isntall an EFI driver to read the Linux filesystem on which the kernel is stored, though.}}
 
 
 
=== EFISTUB の起動 ===
 
 
 
{{Warning|Linux Kernel EFISTUB initramfs path should be relative to the EFI System Partition's root. For example, if the initramfs is located in {{ic|$esp/EFI/arch/initramfs-linux.img}}, the corresponding UEFI formatted line should be {{ic|1=initrd=/EFI/arch/initramfs-linux.img}} or {{ic|1=initrd=\EFI\arch\initramfs-linux.img}}.}}
 
 
 
以下の方法のどれか一つを使うことで EFISTUB カーネルを起動することができます:
 
 
 
==== efibootmgr エントリを使って直接起動する ====
 
 
 
{{Warning|1=カーネルと efibootmgr の組み合わせによっては手動で調整しないと動かないことがあります [https://bugs.archlinux.org/task/34641]。ブートエントリを削除することはできますが作成することは出来なくなります。}}
 
 
 
{{Note|Some UEFI firmwares may not support embedding command line parameters to uefi applications in the boot entries.}}
 
 
 
efibootmgr によって作成したブートエントリに直接カーネルパラメータを埋め込むことが可能です。つまりあなたの UEFI ブート順・GUI を使って GRUB などの他のブートローダーを使わずに直接 Arch Linux を起動することができます (下のコマンドで、EFI System Partition は {{ic|/dev/sdX}} 上に、パーティションは {{ic|Y}} にあると仮定しています)。
 
 
 
# efibootmgr -c -d /dev/sdX -p Y -l /EFI/arch/vmlinuz-arch.efi -L "Arch Linux (EFISTUB)" -u "$(cat /proc/cmdline)"
 
 
 
作成されたエントリが問題ないか確認するために次のコマンドを実行すると良いでしょう:
 
 
 
# efibootmgr -v
 
 
 
また、ブートオプションの順番を新しく割り当てて ({{ic|efibootmgr -o}}) Arch のエントリを最後に持ってくることで、失敗した時にシステムが楽にリカバーできます。
 
 
 
{{Tip|Save the command for creating your boot entry in a shell script somewhere, which makes it easier to modify (when changing kernel parameters, for example).}}
 
 
 
efibootmgr の詳細は [[Unified Extensible Firmware Interface (日本語)#efibootmgr|UEFI#efibootmgr]] で説明しています。フォーラムの投稿 https://bbs.archlinux.org/viewtopic.php?pid=1090040#p1090040 。
 
 
 
==== gummiboot を使う ====
 
 
 
[[Gummiboot (日本語)|Gummiboot]] は EFISTUB カーネルのナイスなメニューを提供する UEFI Boot Manager です。{{Pkg|gummiboot}} として [core] から利用でき、EFISTUB ブートの推奨ブートマネージャです。詳細は [[Gummiboot (日本語)|gummiboot]] を見て下さい。
 
 
 
==== rEFInd を使う ====
 
 
 
rEFInd is a fork of rEFIt Boot Manager (used in Intel Macs) by Rod Smith (author of GPT-fdisk). rEFInd fixes many issues in rEFIt with respect to non-Mac UEFI booting and also has support for booting EFISTUB kernels and contains some features specific to them.
 
 
 
{{Tip|If you're new to EFISTUB and/or rEFInd, you need to read [http://www.rodsbooks.com/refind/linux.html The rEFInd Boot Manager: Methods of Booting Linux] before going any further. This section illustrates only one possible use-case which is not suitable for all configurations.}}
 
 
 
# {{ic|# pacman -S refind-efi}} で {{Pkg|refind-efi}} パッケージをインストールしてください
 
# 以下のファイルを rEFInd の移動元ディレクトリから移動先にコピーしてください
 
{{Note|1=<arch> はシステムアーキテクチャのビット数を示しています。{{ic|$ uname -m}} を実行してアーキテクチャの情報を入手してください。32ビット環境なら <arch> を <arch> に、64ビット環境なら <arch> を "x64" に置き換えてください。}}
 
{| border="1"
 
!rEFInd ファイルの移動元!!UEFI の移動先
 
|-
 
| /usr/share/refind/refind_<arch>.efi || $esp/EFI/refind/refind_<arch>.efi
 
|-
 
| /usr/share/refind/refind.conf-sample  || $esp/EFI/refind/refind.conf
 
|-
 
| /usr/share/refind/icons || $esp/EFI/refind/icons
 
|-
 
| /usr/share/refind/drivers_<arch> || $esp/EFI/refind/drivers
 
|}
 
 
 
{{Tip|rEFInd's configuration file is located in {{ic|$esp/EFI/refind/refind.conf}}. The file is well commented.}}
 
 
 
{{Note|As of {{Pkg|refind-efi}} 0.2.7, refind can auto-detect kernels in {{ic|/boot}}, if there are UEFI drivers for the filesystem used by /boot partition (or / partition if no separate /boot is used) in the ESP, and are loaded by rEFInd. This is enabled in the default configuration in {{ic|refind.conf}} (you may need to include the PATH to the drivers folders in the ESP). See [http://www.rodsbooks.com/refind/drivers.html] for more info.}}
 
 
 
{{ic|refind_linux.conf}} 設定ファイルを下のテンプレートのように編集してください。PARTUUID の後の文字列はあなたの root の PARTUUID に置き換えてください。
 
 
 
{{Note|1=Please notice the [https://bbs.archlinux.org/viewtopic.php?pid=1286972 difference] between the standard UUID and the PARTUUID shown by {{ic|$ ls -l /dev/disk/by-partuuid/}}}}
 
{{hc|refind_linux.conf|<nowiki>
 
"Boot with defaults" "root=PARTUUID=3518bb68-d01e-45c9-b973-0b5d918aae96 rw rootfstype=ext4 add_efi_memmap systemd.unit=graphical.target"
 
"Boot to Terminal"  "root=PARTUUID=3518bb68-d01e-45c9-b973-0b5d918aae96 rw rootfstype=ext4 add_efi_memmap systemd.unit=multi-user.target"</nowiki>}}
 
 
 
{{Tip|Each line of {{ic|refind_linux.conf}} is displayed as a submenu by rEFInd. Access the submenu with "+" or "insert" keys.}}
 
 
 
{{Tip|In non-Mac systems, create an entry for rEFInd using [[UEFI#efibootmgr|efibootmgr]] where sdX is the UEFI disk, and Y is the UEFI partition number. Run :
 
{{bc|<nowiki>
 
# efibootmgr -c -d /dev/sdX -p Y -l /EFI/refind/refind_<arch>.efi -L "rEFInd"
 
</nowiki>}}}}
 
 
 
===== Systemd Automation =====
 
 
 
{{Tip|To automate the process of copying refind files and updating the nvram (if needed) use the following script}}
 
 
 
{{Note|Save this script as {{ic|/usr/lib/systemd/scripts/refind_name_patchv2}}}}
 
{{Tip|If you want to change the directory that refind is installed in the UEFISYS partition, just change the value of $refind_dir in the script}}
 
{{bc|<nowiki>
 
#!/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
 
</nowiki>}}
 
 
 
{{Note| As of [https://www.archlinux.org/packages/extra/any/refind-efi/ refind-efi 0.2.7], refind automatically detects kernels in {{ic|/boot}}. They do not have to be renamed to have a {{ic|.efi}} extension either. Hence, the following sync scripts aren't needed if using [https://wiki.archlinux.org/index.php/UEFI_Bootloaders#Using_rEFInd refind]. You do need to isntall an EFI driver to read the Linux filesystem on which the kernel is stored, though.}}
 
 
 
{{Note|Save the following service file as {{ic|/usr/lib/systemd/system/refind_update.path}}}}
 
{{bc|<nowiki>
 
[Unit]
 
Description=Update rEFInd bootloader files
 
 
 
[Path]
 
PathChanged=/usr/share/refind/refind_<arch>.efi
 
Unit=refind_update.service
 
 
 
[Install]
 
WantedBy=multi-user.target
 
</nowiki>}}
 
 
 
{{Note|Save the following service file as {{ic|/usr/lib/systemd/system/refind_update.service}}}}
 
{{bc|<nowiki>
 
[Unit]
 
Description=Update rEFInd directories, binaries, and nvram
 
 
 
[Service]
 
Type=oneshot
 
ExecStart=/usr/bin/bash /usr/lib/systemd/scripts/refind_name_patchv2
 
RemainAfterExit=no
 
</nowiki>}}
 
 
 
{{Tip|Enable the systemd path unit by running :
 
{{bc|<nowiki>
 
# systemctl enable refind_update.path
 
</nowiki>}}}}
 
 
 
===== Apple Macs =====
 
 
 
In case of Apple Macs, try {{AUR|mactel-boot}} for an experimental "bless" utility for Linux. If that does not work, use "bless" form within OSX to set rEFInd as default bootloader. Assuming UEFISYS partition is mounted at {{ic|/mnt/efi}} within OSX, do
 
 
 
$ sudo bless --setBoot --folder /mnt/efi/EFI/refind --file /mnt/efi/EFI/refind/refind_x64.efi
 
 
 
===== VirtualBox =====
 
 
 
VirtualBox の場合については、[[VirtualBox (日本語)#Virtualbox の EFI モードで Arch を使う]] を参照してください。
 
 
 
==== UEFI Shell を使う ====
 
 
 
It is possible to launch EFISTUB kernel form UEFI Shell as if it is a normal UEFI application. In this case the kernel parameters are passed as normal parameters to the launched EFISTUB kernel file.
 
 
 
> fs0:
 
> cd \EFI\arch
 
> vmlinuz-arch.efi root=PARTUUID=3518bb68-d01e-45c9-b973-0b5d918aae96 ro rootfstype=ext4 add_efi_memmap initrd=EFI/arch/initramfs-arch.img
 
 
 
You can also write a simple {{ic|archlinux.nsh}} file with your boot parameters and put it in your UEFI System Partition, then run it with:
 
 
 
fs0:
 
archlinux
 
 
 
Example Script:
 
 
 
echo -on
 
\EFI\arch\vmlinuz-arch.efi root=PARTUUID=3518bb68-d01e-45c9-b973-0b5d918aae96 rootfstype=ext4 add_efi_memmap initrd=EFI/arch/initramfs-arch.img
 
 
 
This way you can specify UUID's without needing to remember the name or type out 20-30 characters.
 
 
 
== GRUB 2.xx ==
 
 
 
GRUB 2.x には自分自身のファイルシステムドライバーが含まれており、ファイルにアクセスするのにファームウェアに依存していません。GRUB は直接 {{ic|/boot}} からファイルを読み込むことができ UEFISYS パーティションの中にカーネルや initramfs のファイルを必要としません。詳細は [[GRUB (日本語)#UEFI_システム_2]] で説明しています。bzr の開発バージョンを使う場合 AUR のパッケージを試して下さい - {{AUR|grub-bzr}}。
 
 
 
== SYSLINUX 6.xx ==
 
 
 
Install {{Pkg|syslinux}} (from [testing]) or {{AUR|syslinux-firmware-git}} AUR package and copy {{ic|/usr/lib/syslinux/efi64/*}} to {{ic|$esp/EFI/syslinux/}} ({{ic|$esp}} is the mountpoint of UEFISYS partition) ({{ic|efi64}} is for x86_64 UEFI firmwares, replace with {{ic|efi32}} for ia32 UEFI firmwares), and then create a boot entry using efibootmgr in the firmware boot manager.
 
 
 
== ELILO ==
 
 
 
ELILO は LILO Boot Loader の UEFI バージョンです。初めは Intel の Itanium 環境用に作成され EFI (UEFI の前身) だけをサポートしていました。最古の Linux 向け UEFI ブートローダーです。依然としてゆったりとしたペースで開発されています。上流ではコンパイル済みのバイナリを http://sourceforge.net/projects/elilo/ で提供しています。Elilo の設定ファイル {{ic|elilo.conf}} は [[LILO]] の設定ファイルに似ています。AUR のパッケージ - {{AUR|elilo-efi}}。
 
 
 
== トラブルシューティング ==
 
 
 
* Intel Z77 など、いくつかの UEFI マザーボードでは、efi シェルから efibootmgr や bcfg でエントリを追加して NVRAM に書き加えられてもブートメニューのリストに表示されません。
 
 
 
:これを解決するには、Windows ブートマネージャが ESP パーティションに存在していると UEFI ファームウェアを騙す必要があります。
 
 
 
:EFI シェルを起動してから、以下を実行して USB ドライブから bootx64.efi ファイルを bootmgfw.efi ファイルとして ESP パーティションにコピーしてください:
 
 
 
FS1:
 
cd EFI
 
mkdir Microsoft
 
cd Microsoft
 
mkdir Boot
 
cp FS0:\EFI\BOOT\bootx64.efi FS1:\EFI\Microsoft\Boot\bootmgfw.efi
 
 
 
:再起動後、NVRAM に追加されたエントリがブートメニューに表示されるようになるはずです。
 
 
 
== 参照 ==
 
 
 
* [http://www.rodsbooks.com/efi-bootloaders/ Rod Smith - Managing EFI Boot Loaders for Linux]
 
* [http://www.rodsbooks.com/refind/ Rod Smith - rEFInd, a fork or rEFIt]
 
* [https://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=blob_plain;f=Documentation/x86/efi-stub.txt;hb=HEAD Linux Kernel Documentation on EFISTUB]
 
* [http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=commitdiff;h=291f36325f9f252bd76ef5f603995f37e453fc60;hp=55839d515495e766605d7aaabd9c2758370a8d27 Linux Kernel EFISTUB Git Commit]
 
* [http://www.rodsbooks.com/efi-bootloaders/efistub.html Rod Smith's page on EFISTUB]
 
* [http://www.rodsbooks.com/refind/linux.html rEFInd Documentation for booting EFISTUB Kernels]
 

Latest revision as of 04:55, 4 March 2015