Ubuntu 18.04がインストールされているPC(UEFIブート)に、20.04を別パーティションにインストールしたときの、grub設定の方法。
検証環境
・ThinkCentre M720q Tiny (Core i3-8100T, B360 chipset, UHD graphics 630)
・Windows 10 , Ubuntu 18.04 , Ubuntu 20.04 マルチブート
Ubuntu 20.04インストール直後の状態
EFIブートマネージャーのエントリーと起動フラグ
$ sudo efibootmgr BootCurrent: 0001 Timeout: 1 seconds BootOrder: 0001,0000,000A,0006,0007,0004,0005 Boot0000* Windows Boot Manager Boot0001* ubuntu Boot0004* Generic Usb Device Boot0005* CD/DVD Device Boot0006* UEFI: PXE IPV4 Intel(R) Ethernet Connection (7) I219-V Boot0007* UEFI: PXE IPV6 Intel(R) Ethernet Connection (7) I219-V Boot000A* ubuntu $ sudo efibootmgr -v BootCurrent: 0001 Timeout: 1 seconds BootOrder: 0001,0000,000A,0006,0007,0004,0005 Boot0000* Windows Boot Manager HD(1,GPT,8263c8c9-00b6-457e-a668-ac716e57875b,0x800,0x82000)/File(\EFI\MICROSOFT\BOOT\BOOTMGFW.EFI)WINDOWS.........x...B.C.D.O.B.J.E.C.T.=.{.9.d.e.a.8.6.2.c.-.5.c.d.d.-.4.e.7.0.-.a.c.c.1.-.f.3.2.b.3.4.4.d.4.7.9.5.}...s................ Boot0001* ubuntu HD(1,GPT,8263c8c9-00b6-457e-a668-ac716e57875b,0x800,0x82000)/File(\EFI\UBUNTU\SHIMX64.EFI) Boot0004* Generic Usb Device VenHw(99e275e7-75a0-4b37-a2e6-c5385e6c00cb) Boot0005* CD/DVD Device VenHw(99e275e7-75a0-4b37-a2e6-c5385e6c00cb) Boot0006* UEFI: PXE IPV4 Intel(R) Ethernet Connection (7) I219-V PciRoot(0x0)/Pci(0x1f,0x6)/MAC(98fa9b6acb1d,0)/IPv4(0.0.0.00.0.0.0,0,0)..BO Boot0007* UEFI: PXE IPV6 Intel(R) Ethernet Connection (7) I219-V PciRoot(0x0)/Pci(0x1f,0x6)/MAC(98fa9b6acb1d,0)/IPv6([::]:<->[::]:,0,0)..BO Boot000A* ubuntu HD(1,GPT,8263c8c9-00b6-457e-a668-ac716e57875b,0x800,0x82000)/File(\EFI\UBUNTU\GRUBX64.EFI)..BO
パーティションの状況
$ sudo lsblk -f /dev/sda NAME FSTYPE LABEL UUID MOUNTPOINT sda ├─sda1 vfat SYSTEM 947F-F17C /boot/efi ├─sda2 ├─sda3 ntfs Windows 786685CD66858C96 ├─sda4 ntfs WinRE_DRV BC02870B0286CA3A ├─sda5 swap 046944a6-e95a-4774-bdea-ed92ac2e72c2 [SWAP] ├─sda6 ext4 ubuntu18.04 a04269a9-79f4-4c67-ad4c-f6d5278612d2 ├─sda7 ext4 ubuntu20.04 55e586a6-358d-4c98-8ef8-7f7d3652201b / ├─sda8 ├─sda9 ntfs TEMP DE0E157E0E15513F ├─sda10 ntfs DATA C61EC4391EC42471 ├─sda11 ntfs VM-NTFS 30B4DD69B4DD3258 └─sda12 ext4 vm-ext4 3a6a63bb-b5d9-40d0-ba63-682b5e35ab04
Ubuntu 20.04をインストールする前は、Ubuntu 18.04のgrubブートメニューが表示されていたが、20.04インストール後は20.04のgrubブートメニューが表示されるようになる。
どちらのgrubブートメニューが表示されるかは、EFIパーティションにあるgrub.cfgで選択するようになっている。
UEFIブート → EFIパーティションのgrug.cfg → OSパーティションのgrub.cfg
という順に読み込まれていく
$ mkdir /tmp/sda1 $ sudo mount /dev/sda1 /tmp/sda1 ← まず、EFIパーティションをマウントする $ sudo ls -la /tmp/sda1/EFI/ubuntu 合計 4200 drwx------ 2 root root 4096 5月 15 22:44 . drwx------ 5 root root 4096 8月 25 2019 .. -rwx------ 1 root root 108 5月 15 12:50 BOOTX64.CSV -rwx------ 1 root root 194 5月 15 22:44 grub.cfg -rwx------ 1 root root 1677176 5月 15 12:50 grubx64.efi -rwx------ 1 root root 1269496 5月 15 12:50 mmx64.efi -rwx------ 1 root root 1334816 5月 15 12:50 shimx64.efi $ sudo cat /tmp/sda1/EFI/ubuntu/grub.cfg search.fs_uuid 55e586a6-358d-4c98-8ef8-7f7d3652201b root hd0,gpt7 set prefix=($root)'/boot/grub' configfile $prefix/grub.cfg
Ubuntu 18.04のgrubブートメニューに変更する
EFIパーティションのgrub.cfgを、Ubuntu 18.04のパーティションのUUIDを指すように変更する。
search.fs_uuid 55e586a6-358d-4c98-8ef8-7f7d3652201b root hd0,gpt7 set prefix=($root)'/boot/grub' configfile $prefix/grub.cfg
search.fs_uuid a04269a9-79f4-4c67-ad4c-f6d5278612d2 root hd0,gpt6 set prefix=($root)'/boot/grub' configfile $prefix/grub.cfg
grubブートメニューのデフォルトOS名にバージョン番号を付ける方法
Ubuntu 18.04のgrubブートメニューでは、次のように表示される
*Ubuntu ← これに、バーション番号を表示させたい (例 : Ubuntu 18.04)
Advanced options for Ubuntu
Windows Boot Manager (on /dev/sda1)
Ubuntu 20.04 LTS (20.04) (on /dev/sda7)
Advanced options for Ubuntu 20.04 LTS (20.04) (on /dev/sda7)
UEFI System setup
grub設定ファイルを次のように変更する (変更前、変更後)
〜 略 〜
linux_entry ()
{
os="$1"
version="$2"
type="$3"
args="$4"
if [ -z "$boot_device_id" ]; then
boot_device_id="$(grub_get_device_id "${GRUB_DEVICE}")"
〜 略 〜
fi
echo "menuentry '$(echo "$title" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-$version-$type-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
else
echo "menuentry '$(echo "$os" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-simple-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
fi
if [ "$quick_boot" = 1 ]; then
echo " recordfail" | sed "s/^/$submenu_indentation/"
fi
〜 略 〜
赤で着色した部分を次のように書き換える
fi
echo "menuentry '$(echo "$title" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-$version-$type-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
else
version_ubuntu="`lsb_release -r -s`"
title="$(gettext_printf "%s %s" "${os}" "${version_ubuntu}")"
echo "menuentry '$(echo "$title" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-simple-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
fi
if [ "$quick_boot" = 1 ]; then
grub-update
設定ファイルの修正や、カーネルのアップデートがあった場合は、
$ sudo grub-update
を実行することで、ブートするパーティションごとに設定ファイルを読み込んで grub.cfg を作成できる。
つまり、Ubuntu 18.04パーティションのgrub-updateコマンドは、 18.04パーティションの/etc/grub.dや/etc/defaults/grub という設定ファイルを読み込んでしょりするだけでなく、 20.04パーティションの各設定ファイルを読み込んで、それぞれのOS用のmenuentryを作成してくれる。