GRUB/EFI サンプル
関連記事
マザーボードメーカーによって UEFI はバラバラに実装されていることはよく知られています。このページの目的は efi モードで GRUB をインストール・リストするときに使用するハードウェア特有の手順を示すことです。
目次
Apple Mac EFI システム
macOS の中から bless コマンドを使って grubx64.efi
をデフォルトのブートオプションに設定してください。パソコンに Linux しかインストールしていない場合は、macOS のインストールディスクを起動して、そこからターミナルを起動することもできます。ターミナルから、ディレクトリを作成して EFI System Partition をマウントしてください:
# cd /Volumes # mkdir efi # mount -t msdos /dev/disk0s1 /Volumes/efi
そして grub.efi
と EFI パーティションを指定して bless を実行してデフォルトのブートオプションに設定します。
# bless --folder=/Volumes/efi --file=/Volumes/efi/efi/arch_grub/grubx64.efi --setBoot # bless --mount=/Volumes/efi --file=/Volumes/efi/efi/arch_grub/grubx64.efi --setBoot
詳しくは https://help.ubuntu.com/community/UEFIBooting#Apple_Mac_EFI_systems_.28both_EFI_architecture.29 を参照。
Asus
Z68 ファミリーと U47 ファミリー
# cp /boot/efi/EFI/arch_grub/grubx64.efi /boot/efi/shellx64.efi
上記のコマンドを実行した後、UEFI セットアップ/メニューから UEFI Shell を起動してください (ASUS の UEFI BIOS の場合、アドバンスモードに切り替えて、右上の Exit を押してから "Launch EFI shell from filesystem device" を選択します)。GRUB2 のメニューが表示されるのでシステムを起動することができます。その後、efibootmgr を使ってメニューエントリを設定することが可能です。例えば uefi パーティションが /dev/sda1
の場合 (Unified_Extensible_Firmware_Interface を参照):
efibootmgr -c -g -d /dev/sda -p 1 -w -L "Arch Linux (GRUB)" -l /EFI/arch_grub/grubx64.efi
マザーボードにオプションが存在しない場合、UEFI シェル (Unified_Extensible_Firmware_Interface#UEFI_シェル) を使って一時的に Arch パーティションの UEFI ブートオプションを作成できます。
EFI シェルを起動したら、以下のようにして UEFI ブートメニューエントリを追加:
Shell> bcfg boot add 0 fs1:\EFI\arch_grub\grubx64.efi "Arch Linux (GRUB2)"
fs1
は UEFI システムパーティションに、\EFI\arch_grub\grubx64.efi
は grub-install
コマンドの --bootloader-id
の値に置き換えてください。
一時的に UEFI ブートオプションが追加され Arch を起動できます。Arch を起動したら、efivars
を modprobe して efibootmgr
が何もエラーを返さないことを確認してください (UEFI モードで起動していることをの確認)。それから GRUB#UEFI システムに書かれていることをもういちど実行すれば UEFI メニューに永続的にブートエントリが追加されます。
ux32vd
There is a caveat. If the machine was booted from MBR then grub-install (or efibootmgr) will fail to create the efi boot entry with the following error:
EFI variables are not supported on this system
You first need to boot the machine with EFI and then create the boot entry. This can be done the way described for Z68 Family: by copying /boot/efi/EFI/arch_grub/grubx64.efi into /boot/efi/shellx64.efi and selecting "Launch EFI shell from filesystem device". After successful boot it is possible to create a boot entry using grub-install or efibootmgr.
P8Z77 ファミリー
- ライブメディアを起動して chroot してください。
- 100 MB の fat32 パーティションが "EFI System" になっていることを確認 (gdisk では十六進コード ef00 が使われます)。
- chroot の中から以下を実行:
# mount -t vfat /dev/sdXY /boot/efi # grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=arch --recheck # grub-mkconfig -o /boot/grub/grub.cfg # wget https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2/ShellBinPkg/UefiShell/X64/Shell.efi # umount /boot/efi
EFI パーティションには以下の2つのファイルがあるはずです:
/Shell.efi /EFI/arch/grubx64.efi
- 再起動して BIOS を起動 (Delete キーで BIOS が開きます)。
- 方向キーを使って 'exit' メニューに移動して EFI シェルを起動。
- Arch のエントリをメニューに追加します。詳しくは UEFI#UEFI シェルの起動を見てください。
- EFI シェルの中から以下を実行:
Shell> bcfg boot dump -v Shell> bcfg boot add 1 fs0:\EFI\arch\grubx64.efi "Arch Linux (grub manually added)" Shell> exit
- Reboot the machine and enter the BIOS.
- Navigate to the 'Boot' section and adjust the boot order to with the "Arch Linux (grub manually added)" being the one on the SSD.
- Boot to this entry and enjoy.
M5A97
標準の Arch のインストールが完了したら、grub をインストールしてハードディスクを GPT としてパーティションしてください。
UEFI システムパーティションは GRUB のインストールスクリプトから認識されるように /boot/efi/
にマウントする必要があります:
# mkdir -p /boot/efi # mount -t vfat /dev/sdXY /boot/efi
X は起動するハードディスクの番号に、Y は先に作成した EFI パーティションに置き換えてください。
GRUB UEFI アプリケーションを /boot/efi/EFI/arch_grub
に、モジュールを /boot/grub/x86_64-efi
にインストール:
# modprobe dm-mod # grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=arch_grub --recheck --debug # mkdir -p /boot/grub/locale # cp /usr/share/locale/en\@quot/LC_MESSAGES/grub.mo /boot/grub/locale/en.mo
GRUB の設定を作成:
# grub-mkconfig -o /boot/grub/grub.cfg
modified UEFI Shell v2 バイナリ の UefiShellX64.efi を ESP のルートディレクトリにコピー:
# cp ~/Shell2/UefiShellX64.efi /mnt/boot/efi/shellx64.efi
The reason that we need this shell application is that the efibootmgr command will fail silently during grub-install.
After this launch the UEFI Shell from the UEFI setup/menu (in ASUS UEFI BIOS, switch to advanced mode, press Exit in the top right corner and choose "Launch EFI shell from filesystem device"). The UEFI shell will show up. From here we need to add our GRUB UEFI app to the bootloader.
Shell> bcfg boot add 3 fs0:\EFI\Arch_Grub\grubx64.efi "Arch_Grub"
where fs0
is the mapping corresponding to the UEFI System Partition and 3
is the zero based boot entry index.
現在存在するブートエントリのリストを確認するには:
Shell> bcfg boot dump -v
Asrock
Z97M Pro4
Asus Z68 ファミリーの手順と似ています。Z97M Pro4 BIOS P1.90 で確認済みです。
# cp /boot/efi/EFI/grub/grubx64.efi /boot/efi/shellx64.efi
上記のコマンドを実行した後、UEFI セットアップ/メニューから UEFI シェルを起動してください (ASROCK の UEFI BIOS では、Exit タブを開いて "Launch EFI Shell From Filesystem Device" を選択します)。GRUB2 のメニューが表示され、システムを起動することができます。その後、efibootmgr を使ってメニューエントリを設定することが可能です。例えば uefi パーティションが /dev/sda1
にある場合 (Unified Extensible Firmware Interface を参照):
# efibootmgr -c -g -d /dev/sda -p 1 -w -L "Arch Linux (GRUB)" -l /EFI/grub/grubx64.efi
HP
EliteBook 840 G1
詳しくは HP EliteBook 840 G1#UEFI の設定を見て下さい。
Intel
S5400 ファミリー
このボードは BIOS と EFI モードのどちらかで起動します。BIOS モードでは MBR でパーティションされたハードドライブが必要で EFI では GPT ハードドライブが必要です。Intel の EFI v1.10 の仕様に従っており、i386 しか使えません。UEFI における通常のインストールの手順に従ってよいですが、以下の例外が存在します。
grub-efi-x86_64
パッケージを使うかわりにgrub-efi-i386
を使用してください。- UEFI (v2.0) 以前のファームウェアでは
bcfg
コマンドが使えません。EFI パーティションのルートディレクトリにあるstartup.nsh
ファイルを使ってブートローダーのパスを指定してください。例えばfs0:\EFI\arch_grub\boot.efi
をstartup.nsh
ファイルの中に記述してください。 grub.cfg
ファイルは GRUB の EFI ファイルと同じディレクトリに配置してください。そうしないと GRUB からファイルを認識できずシェルが起動します。
Lenovo
K450 IdeaCentre
起動するには "EFI System" パーティションに EFI\Boot\bootx64.efi
ファイルが必要です。ファイルが存在しない場合、"Error 1962: No operating system found. Boot sequence will automatically repeat." と表示されます。"EFI System" パーティションを /boot/efi
にマウントしている場合:
# grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=grub --recheck --debug # mkdir /boot/efi/EFI/Boot # touch /boot/efi/EFI/Boot/bootx64.efi
上記は UEFI 実装のバグに対処する回避策です。
M92p ThinkCentre
efi ラベルによるホワイトリストが存在します。"Red Hat Enterprise Linux" という名前のラベルからしか起動しません。ブートローダー id をそれに合わせて指定するようにしてください:
# grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id="Red Hat Enterprise Linux" --recheck --debug