それマグで!

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

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

Linux のマルチブートを作りたい レベル3 EFIブートのGRUBでマルチブートする

レベル3 EFIブートのGRUBでマルチブートする

EFIブートパーティションで同じようにすることが出来るのか。検証である。

今回作った構成は、EFIブートをしたあとに、grub が起動する。

UEFI環境の準備

libvirt/qemu/kvmUEFIを使うために必要なパッケージを追加。

sudo apt install ovmf

EFIブートのDebianを作る。

ディスクの用意

## 必要な変数を用意
NAME=ef01
DISK=/var/lib/libvirt/images/$NAME.qcow2
sudo qemu-img create -f qcow2 $DISK 20G
NAME=ef01
DISK=/var/lib/libvirt/images/$NAME.qcow2
UEFI_PARAM='loader=/usr/share/OVMF/OVMF_CODE_4M.fd,loader_ro=yes,loader_type=pflash,nvram_template=/usr/share/OVMF/OVMF_VARS_4M.fd,loader_secure=no'
virt-install \
--boot uefi,$UEFI_PARAM \
--connect=qemu:///system  \
--name $NAME  \
--ram 8192  \
--disk path=$DISK  \
--vcpus 8  \
--virt-type kvm  \
--os-type linux  \
--os-variant debian10  \
--graphics none  \
--location http://ftp.kddilabs.jp/pub/Linux/distributions/Debian/debian/dists/buster/main/installer-amd64/  \
--extra-args="console=ttyS0"

リサイズしたいのでLVMにする

サイズ指定

LVのサイズは50%未満しておく。残容量にUbuntuをコピーのため。

Debianインストール完了

インストール完了時のディスク上状態

/boot/の中身を確認

UEFI->Grubで起動するのを確認

sudo reboot 

画像は、GRUBだが、EFIからブートしている。

EFIブートしているか確認は、コマンドで確認

ubuntu のディスクをコピーしてくる

ubuntu のディスクを接続する

NAME=ef01
sudo virsh attach-disk \
  --domain $NAME \
  --source /var/lib/libvirt/images/u02.qcow2\
  --driver qemu\
  --subdriver qcow2\
  --targetbus virtio\
  vdb

ディスクが接続されたのを確認。

コピー先を用意する

sudo lvcreate debian-vg -n ubuntu-root -L 5G
sudo mkfs.ext4 /dev/mapper/debian-vg-ubuntu
sudo lvcreate debian-vg -n ubuntu-root -L 5G
sudo mkfs.ext4 /dev/mapper/debian-vg-ubuntu
マウントする
sudo mount /dev/mapper/ubuntu--vg-ubuntu--lv  /mnt
sudo mount /dev/vdb2 /mnt/boot
sudo mkdir /mnt2
sudo mount /dev/mapper/vg0-ubuntu /mnt2
ディスクをコピーする

さくっとrsyncUbuntuをコピー

rsync -av /mnt/ /mnt2

ディスクを取り外す

仮想マシンを抜けvirsh 経由で取り外し。

sudo virsh detach-disk ef01 vdb

コピーの結果。

コピーし、取り外し、その結果のディスクのマウント状況。

grub を更新してubuntuを加える

debian 側の grub を書き換えて、ubuntu を加える

sudo update-grub

EFI ブート順を確認する

EFIブートがDebianに指定されていることを確認。

sudo efibootmgr

この状況から、BIOS->UEFI->GRUB->Debianの順に起動することがわかる。

grub のメニューを確認する

grub メニューを確認する方法で、メニュー項目を確認する。

export GRUB_CONFIG=`sudo find /boot -name "grub.cfg"`
sudo grep 'menuentry ' $GRUB_CONFIG | cut -f 2 -d "'" | nl -v 0

この結果から、DebianGRUBに、Debian自身とUbuntuがあることがわかる。

ubuntuを起動する

メニューのNo.5がUbuntuなので、認識されていることがわかる。

 5  Ubuntu 20.04.3 LTS (20.04) (on /dev/mapper/debian--vg-ubuntu--root)

5を指定して再起動

DebianGrubからUbuntuが起動できた

ここまでは、efi を書き換えはしない。

EFIDebianGRUBを起動し、Debian管理下のGrubメニューからUbuntuGrubへ移行している。デュアルブートにはこの手法が確実だと思う。

EFIにマルチブートがあり、EFIから起動したGRUBにもマルチブートがある。油断すると迷い込む。

EFIの書き換えは、grub-install で出来る。ただ、EFI書き換えたとしても、Grubだけでマルチブート可能なためメリットは薄い。

EFIパーティションに登録してEFIで起動順序を変更してもいい。だが、EFIはシリアルTTYを使うのが面倒。仮想マシンならいいけど、実マシンでEFI書き換えは事故多発なので、個人的には避けておきたい。

いちおうEFIパーティションに登録する方法も試しておきます。

次回へつづく

次回は、EFIパーティションに2つのOSを登録し、EFIブートから両方が起動するように変えてみます。 →次回

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