GRUB/EFI サンプル

提供: ArchWiki
2018年3月11日 (日) 22:08時点におけるKusakata (トーク | 投稿記録)による版 (同期)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

関連記事

マザーボードメーカーによって 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 を参照。

ノート:
  • GRUB の上流の Bazaar には mactel ブランチ http://bzr.savannah.gnu.org/lh/grub/branches/mactel/changes がありますが、GRUB の開発者によるアップデートはもはやされていません。
  • Fedora の開発者による Linux 用の実験的な "bless" ユーティリティとして mactel-bootAUR があります。テストが必要です。

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.efigrub-install コマンドの --bootloader-id の値に置き換えてください。

一時的に UEFI ブートオプションが追加され Arch を起動できます。Arch を起動したら、efivars を modprobe して efibootmgr が何もエラーを返さないことを確認してください (UEFI モードで起動していることを確認)。それから GRUB#UEFI システムに書かれていることをもういちど実行すれば UEFI メニューに永続的にブートエントリが追加されます。

ux32vd

ノート: EFI ブートエントリが正しく設定されていない場合 BIOS は GPT ディスクからの起動を許可しません。その場合 BIOS からディスクが確認できません。EFI ブートエントリを正しく作成すれば解決します。

マシンを 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 が使われます)。
ノート: WARNING: Not enough clusters for a 32 bit FAT! というメッセージが表示される場合、mkfs.vfat -s2 -F32 でクラスタサイズを小さくしてください。そうしないと UEFI からパーティションを読み込めなくなります。
  • 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)" を一番最初にしてください。
  • エントリを起動してください。
ノート: 上記の手順は今では必要ない場合が多く、efibootmgr -d でエントリを作成できます。

M5A97

標準の Arch のインストールが完了したら、grub をインストールしてハードディスクを GPT としてパーティションしてください。

GRUB#UEFI システムより:

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 はゼロ始まりのブートエントリのインデックスです。

ノート: 大抵の UEFI Shell コマンドは -b オプションをサポートしており、ページの後に出力を停止することができます。map は認識されているファイルシステム (fs0, ...) とデータストレージデバイス (blk0, ...) を表示します。利用可能なコマンドを確認したいときは help -b を実行してください。Unified_Extensible_Firmware_Interface#重要な UEFI シェルコマンドも参照。

現在存在するブートエントリのリストを確認するには:

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

Dell

PowerEdge T30

Dell の UEFI 実装は GRUB をロードするのにファイルの名前を変更する必要があります。そうしないと "no OS found" 画面が表示されます。

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
ノート: 上記のコマンドは他の MSI マザーボードでも使える可能性があります。

HP

EliteBook 840 G1

詳しくは HP EliteBook 840 G1#UEFI の設定を見て下さい。

ノート: 上のリンクで書かれていることは他の HP のノートパソコンにも適用できます。

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.efistartup.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

X270 Thinkpad

X270 ではパスの修正が必要になります:

 # grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=arch_grub
 # mkdir /boot/efi/EFI/boot
 # cp /boot/efi/EFI/arch_grub/grubx64.efi /boot/efi/EFI/boot/bootx64.efi

VirtualBox

VirtualBox#EFI モードでインストールを参照。