grub設定(gentoo + Windows10 デュアルブート)

Tech > Distoribution > gentoo

マルチブートを行う方法は以下の3つがある。

  1. BIOS + MBR
  2. BIOS + GPT
  3. UEFI + GPT

最近では、UEFI + GPT が標準ということで、こちらをメインに説明。

BIOS + MBR

BIOSからMBR(Master Boot Record)を利用してブートする方式、旧式のやり方、Primaryは4パーティションしか作れないので、それ以上作る場合は拡張区画を作成しその中に論理区画を作成する、2TB以上のサイズが扱えない。

BIOS + GPT

パーティション形式がGPT(GUID Partition Table)となっている、2TBオーバーのサイズも扱えるようになる、古いOSは起動できない場合があるので注意、昔のfdiskコマンドはGPTを扱えないのでpartedやgdiskなどのパーティションツールを利用する。

UEFI + GPT

ESP(EFI System Partition)を利用したブート方法、ブートローダ用の専用パーティションを用意し、fat32でフォーマットしておく必要がある。

gentoo と Windows10 のデュアルブート

大多数の人たちとコミニケーションを取るためには間違いなくWindowsが必要なので、LinuxとWindowsを共存させるためにデュアルブートの設定して利用する。

UEFI設定

ブートセキュリティ

Linuxをブートする場合、Windowsのように署名がないのでオフにする。

CSM設定(Compatibility Support Module)

旧BIOS互換モードのブートを利用する場合、レガシーの設定を含める、UEFIオンリーで起動する場合、UEFIのみ指定する。

インストールするデバイス

Windows10はインストーラでディスク全域を指定してインストールを実行、gentooはpartedコマンドにて独自に設定。

  • Gentoo Linux
    • /dev/nvme1n1
  • Windows10
    • /dev/nvme0n1

それぞれ、容量は1TB、500GBのSSDへインストールする。

パーティション構成

Gentoo Linuxは3つの区画をPrimaryで作成、先頭のスライスをESP(EFI System Partition)とし、fat32でフォーマットを行う、サイズについては カーネルとgrubのブートイメージだけを置ければいいので、500MBから1GB程度で設定。

パーティションテーブル: gpt
...
番号  開始    終了    サイズ  ファイルシステム  名前                  フラグ
 1    1049kB  1000MB  999MB   fat32             EFI System Pertition  boot, esp
 2    1000MB  967GB   966GB   xfs               Linux Data Partition
 3    967GB   1000GB  33.2GB  xfs               Linux Swap

fat32フォーマット、このスライスをgentooの/bootへマウントする。

livecd ~ # mkfs.vfat -F 32 -n efi-boot /dev/nvme1n1p1

Windows10のパーティションはおまかせ構成でよしなに完了していた、2番のスライスがブート用スライス。

パーティションテーブル: gpt
...
番号  開始    終了   サイズ  ファイルシステム  名前                          フラグ
 1    1049kB  524MB  523MB   ntfs              Basic data partition          hidden, diag
 2    524MB   629MB  105MB   fat32             EFI system partition          boot, esp
 3    629MB   646MB  16.8MB                    Microsoft reserved partition  msftres
 4    646MB   500GB  499GB   ntfs              Basic data partition          msftdata
 5    500GB   500GB  588MB   ntfs                                            hidden, diag

grubのインストール

gentooのカーネルをビルドした後、grubをインストールする、その場合grubの設定を行う、64bit版OS専用なのでefi-64を追加。

GRUB_PLATFORMS="efi-64"

386系、32bit版OSもブートしたい方は、pcのフラグも追加する(Old Macはefi-32らしいですがやったことないです)。

GRUB_PLATFORMS="efi-64 pc"

そしてgrubをインストールする。

shell> emerge sys-boot/grub

インストール完了後、/bootを選択して、grub-installを実行する。

shell(root)> grub-install --target=x86_64-efi --efi-directory=/boot

コマンドを実行すると、EFIディレクトリが作成されます。

shell> ls /boot/EFI/gentoo/
grubx64.efi
>shell file /boot/EFI/gentoo/grubx64.efi 
/boot/EFI/gentoo/grubx64.efi: PE32+ executable (EFI application) x86-64 (stripped to external PDB), for MS Windows

UEFI経由でブート時に読み込まれるファイルが配置されます。

grub.confの作成

UEFIへ設定するSSDの起動の優先順序を、gentooからWindows10の順に設定する、gentooのgrubから起動が始まるので、そこからWindows10へchainloadするように設定する。

UEFI + GPTの場合、GUIDでパーティションを指定するようなので、partedで確認した /dev/nvme0n1p2 のWindows10の起動パーティションにある bootmgfw.efi のGUIDを確認しておく。

... Windows10の第2パーティション
 2    524MB   629MB  105MB   fat32             EFI system partition          boot, esp

適当なディレクトリへマウント

shell(root)> mount /dev/nvme0n1p2 /mnt/win

GUIDの確認

shell(root)> grub-probe --target=fs_uuid /mnt/win/EFI/Microsoft/Boot/bootmgfw.efi
A499-88B2

grub.cfg の作成の際に、grub-mkconfig コマンドを実行しますが、ここへ Windows10 の起動オプションも追加してもらいたいので設定を行っておく。

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
menuentry "Windows10 UEFI/GPT" {
    insmod part_gpt
    insmod fat
    insmod search_fs_uuid
    insmod chain
    search --fs-uuid --no-floppy --set=root A499-88B2
    chainloader ($root)/efi/Microsoft/Boot/bootmgfw.efi
}

grubのモジュールをinsmodする表記と、オプション search–set-root で先ほど調べたGUIDを指定しておく、 Windows10 UEFI/GPT を選択した場合、Windows10がインストールした bootmgfw.efichainloader するようになる。

systemdの設定も追加しておく。

... 一部抜粋
...
# Boot with systemd instead of sysvinit (openrc)
GRUB_CMDLINE_LINUX="init=/usr/lib/systemd/systemd"
...

その後に、 grub-mkconfig を実行して grub.cfg を作成する、オリジナルのgrub.cfgがある場合はご注意ください。

shell(root)> grub-mkconfig -o /boot/grub/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.4.80-gentoo-r1
done

### BEGIN /etc/grub.d/40_custom ### のセクションへそのまま出力されていればOKです。

... 一部抜粋
...
### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
menuentry "Windows10 UEFI/GPT" {
    insmod part_gpt
    insmod fat
    insmod search_fs_uuid
    insmod chain
    search --fs-uuid --no-floppy --set=root A499-88B2
    chainloader ($root)/efi/Microsoft/Boot/bootmgfw.efi
}
### END /etc/grub.d/40_custom ###
...
...

UEFIで起動順を設定

SSDの起動順序を gentoo のデバイスから Windows10 のデバイスの順にする、重要なのは1番めです。

再起動

再起動して、grubから起動する、起動オプションでWindows10のメニューが追加される。

以上、 grubの設定とgentooとWindows10のデュアルブートでした。

grubに関する備考

エラー発生時の対応について

grub-install efibootmgrのエラーが出た場合

(chroot) livecd ~ # grub-install --target=x86_64-efi --efi-directory=/boot
Installing for x86_64-efi platform.
efibootmgr: EFI variables are not supported on this system.
efibootmgr: EFI variables are not supported on this system.
Installation finished. No error reported.

BIOSでgrubのバージョン1系で利用したような場合、 MBR をゼロクリアする必要があるので –removable オプションをつける

(chroot) livecd ~ # grub-install --target=x86_64-efi --efi-directory=/boot --removable
Installation finished. No error reported.

/boot/EFI/gentoo/grubx64.efi を読めない場合

一部のボードは起動時に読み込むファイルが固定になっているものがあるらしくその場合

(chroot) livecd ~ # grub-install --efi-directory=/boot

で実行すると /boot/EFI/BOOT/BOOTX64.efi という構成で作成される

作成されるファイルとしては grubx64.efi と同じものであるので、コピーして作成しても問題ありません

こうすることによって起動する場合があるそうです(今まで遭遇したことはないので未検証です)、一般的なボードでしたらどちらの構成でファイルを設置してもOSの起動はできるはずです。

Posted on 2020-12-25 18:31:05

はじめまして

お茶の国静岡で、焼酎のお茶割なんか罰当たりで飲んだことはありません、常に一番搾りを嗜む静岡極東のBBQerです、最近まわりのエンジニアの方々がお料理を上手にやっている姿を恨めしそうに横目に見ながら、軟骨ピリ辛チクワを食べています、みなさんよろしく。

Posted

Amazon

tags

日本酒池 広井酒店 やがら やっぱた 刺身 丸干し 東京マラソン fpm php82 servant thread spawn Rust Oracle Linux 8 microcode firmware linux openzfs zfs gitea 麒麟 真野鶴 金鶴 日本酒 docker oracle pod podman cli virtualbox VirtualBox epub mobi calibre mask lens ワンライナー php redmine Linux Oracle Map OMap omap map BBQ カテゴリ管理 カテゴリ timestamp date oracle database string 麦焼酎 ダービー process 磨き蒸留 広井酒店、日本酒 芋焼酎 焼酎 ゆるキャン 広井酒店、日本酒池 spring framework java persistent spring session session spring hdbc-odbc persistent-odbc odbc day utctime スィート レマンの森 elm初期化 elm バイク xlr80 esqueleto database xl2tpd strongswan vpn l2tp ipsec 正月 ゲーム grub nginx systemctl portage 豚骨 圧力鍋 yesod-auth-hashdb yesod-auth yesod