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
マシンを MBR から起動した場合、grub-install (あるいは efibootmgr) が以下のエラーで efi ブートエントリの作成に失敗します:
EFI variables are not supported on this system
EFI でマシンを起動してブートエントリを作成する必要があります。Z68 ファミリーと同じ方法で起動できます。起動できたら grub-install や 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
- マシンを再起動して BIOS を開いてください。
- 'Boot' セクションからブート順序を変更して "Arch Linux (grub manually added)" を一番最初にしてください。
- エントリを起動してください。
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
シェルアプリケーションが必要になるのは efibootmgr コマンドが grub-install の中で失敗するからです (特にエラーは吐きません)。
その後 UEFI セットアップ/メニューから UEFI Shell を起動してください (ASUS の UEFI BIOS では、アドバンスモードに切り替えて、右上の Exit を押して "Launch EFI shell from filesystem device" を選択します)。UEFI シェルが表示されます。そこから GRUB の UEFI アプリをブートローダーに追加してください:
Shell> bcfg boot add 3 fs0:\EFI\Arch_Grub\grubx64.efi "Arch_Grub"
fs0
は UEFI システムパーティションのマッピングに置き換えてください。3
はゼロ始まりのブートエントリのインデックスです。
現在存在するブートエントリのリストを確認するには:
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
MSI
B250M PRO-VH
MSI 製の B250M PRO-VH マザーボードは GRUB がインストールする場所とは別のところに EFI プログラムを必要とします。GRUB をインストールした後に以下のコマンドを実行してください:
# mkdir /boot/EFI/BOOT # cp /boot/EFI/grub/grubx64.efi /boot/EFI/BOOT/shellx64.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