それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

Linux のマルチブートを作りたい レベル4 EFIブートを書き換える。

マルチブート構成

前回までで、2つのOSを同居させて片方だけはEFIブートローダーから起動している。デュアルブートのもう一方は、EFIから起動したDebianGrubから起動される。という構成が出来ている。

ここでは、続きをおこなって、マルチブートで両方ともに、EFIパーティションに登録してEFIブートするように変えておく。

レベル4 EFIブートを書き換える。

システムのインストールの状況

ここまでで、EFIパーティションDebianGRUBメニュからUbuntuを起動している。

Ubuntuが起動した状態を確認する

EFIは使ってない。

Debianが起動した状態を確認する。

EFIがあることがわかる。

ここでの目標

EFI未登録のUbuntuを起動し、Ubuntu自身にEFI登録させる。

ubunuで起動して

efiインストーラーを導入

sudo apt install grub-efi-amd64

EFIパーティションをマウント

sudo mkdir /boot/efi
sudo mount /dev/vda1 /boot/efi

EFIUbuntuブートローダーをインストール

sudo grub-install --target=x86_64-efi

インストール出来たか確認

EFIにインストール出来たか確認

takuya@ubuntu:~$ efibootmgr
BootCurrent: 0001
Timeout: 0 seconds
BootOrder: 0004,0001,0002,0000,0003
Boot0000* UiApp
Boot0001* debian
Boot0002* UEFI Misc Device
Boot0003* EFI Internal Shell
Boot0004* ubuntu

再起動時にEFIパーティションマウントさせる

このままでは、再起動したときに /boot/efi が見えなくなるので再起動後も維持するようにします。

echo "/dev/vda1 /boot/efi vfat umask=0077  0  1" | sudo tee -a /etc/fstab

EFIブート順を変更する

takuya@ubuntu:~$ sudo efibootmgr -o 0004,0001
BootCurrent: 0001
Timeout: 0 seconds
BootOrder: 0004,0001
Boot0000* UiApp
Boot0001* debian
Boot0002* UEFI Misc Device
Boot0003* EFI Internal Shell
Boot0004* ubuntu

再起動する

sudo reboot 

再起動のGRUBメニュー

UbuntuEFIブートローダーからUbuntuGRUBメニューが起動する

Ubuntuが管理しているGRUBメニューが見えています。

まとめ

順番を意識すると間違えない。 EFIー>GRUBー>OS起動

EFI自身にマルチブートの機能があり、GRUBメニューにもマルチブートの機能がある。

EFIDebianGRUBメニューを起動し、GRUBメニューからUbuntuを起動することが出来る。

EFIUbuntuを起動して、GRUBメニューからUbuntuが起動できる。

そして、ブートローダーを作るだけなので、OSをインストールをしなくても大丈夫。

OSを丸々コピーしてデュアルブートを作れることがわかった。

その他の方法

Mountしてchrootでも同じです。

Debian起動して、Ubuntuのディスクをマウントする

sudo mount /dev/mapper/vg0-ubuntu /mnt
sudo mount /dev/vdb1 /mnt/boot/efi
sudo mount -t proc proc /mnt/proc/
sudo mount -t sysfs sys /mnt/sys/
sudo mount -o bind /dev /mnt/dev/
sudo mount -t devpts pts /mnt/dev/pts/
chroot /mnt

chroot後にgrub-install

root#chrooted $ sudo grub-install --target=x86_64-efi

Linuxのマルチブートの作業ログ一覧