grub設定(gentoo + Windows10 デュアルブート)
Tech > Distoribution > gentoo
マルチブートを行う方法は以下の3つがある。
- BIOS + MBR
- BIOS + GPT
- 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.efi を chainloader するようになる。
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