レベル1 インストーラーによる、デュアルブートの構築
簡単に言えば、CD-ROMでOS別にインストールを行う。2回インストをする方法だ。
ディスクを準備
パーティションをインストール時に作ると面倒なので、先にパーティションをqcow2に仕込んでおく。
qcow2 を作って、nbd でループデバイスにして、sgdsik でパーティション作成してく。
NAME=mbt-d01 DISK=/var/lib/libvirt/images/$NAME.qcow2 ## disk 初期化 sudo qemu-img create -f qcow2 $DISK 20G
最初に決めたディスク・レイアウトを目指してディスクをパーティションする。
パーティション作成はインストール中に行うほうが分かりやすい。
私はインストーラーのパーティション作成画面が得意ではないので、事前にパーティションを作っておくことにした。(参考資料 nbdでqcowを扱う , sgdisk使い方)
パーティションの作成
qcow2 のディスクをnbd でループデバイスにして、
sgdisk でパーティション作成、
LVMを作成してパーティションレイアウトを先に完成させておく。
先に完成させることでインスト中の作業を減らす。
## nbd有効化 sudo modprobe nbd max_part=8 ## 接続 sudo -E qemu-nbd --connect=/dev/nbd0 $DISK ## ここからは point of no return. ## パーティションを作成する。 vda=/dev/nbd0 sudo -E sgdisk -og $vda # 初期化 sudo -E sgdisk -p $vda sudo -E sgdisk \ -n 1:2048:4095 -c 1:"BIOS Boot" -t 1:ef02 \ -n "2::+1G" -c 2:"GRUB" -t 2:8300 \ -n "3::+1G" -c 3:"swap" -t 3:8200 \ -n 4:0:$(sudo -E sgdisk -E $vda ) -c 4:"LVM" -t 4:8e00 \ $vda; ### 結果の確認 sudo -E sgdisk -p $vda ### LVMを作成 sudo pvcreate /dev/nbd0p4 sudo vgcreate vg0 /dev/nbd0p4 sudo lvcreate vg0 -n u04root -L 5G sudo lvcreate vg0 -n d05root -L 5G ## LVMを取り外し sudo dmsetup ls sudo dmsetup remove vg0-u04root sudo dmsetup remove vg0-d05root ## ディスク取り外し sudo qemu-nbd --disconnect /dev/nbd0 ## nbd 無効化 sudo rmmod nbd
OS-01 のDebianインストールを開始。
## 必要な変数を用意 NAME=mbt-d01 DISK=/var/lib/libvirt/images/$NAME.qcow2 INSTALLER=http://ftp.kddilabs.jp/pub/Linux/distributions/Debian/debian/dists/buster/main/installer-amd64/ ## インストール開始 virt-install --connect=qemu:///system --graphics none \ --location $INSTALLER --extra-args="console=ttyS0" \ --ram 4096 --vcpus 8 --virt-type kvm --os-type linux \ --os-variant debian10 \ --name $NAME \ --disk path=$DISK \ ;
インストール作業
インストーラーでディスクをマニュアルで選ぶ
作ったパーティションに /, , swap
をそれぞれを割り当てる。
- dev/vda2 未使用 - dev/vda3 swap - dev/vda4 - lvm-vg0-d05root / - lvm-vg0-u04root 未使用
/bootの配置
rootファイルシステム(LVM内部)にブートを作っておくことにした。
インストールチェック
起動を確認して
ログインも確認する
ディスクのマウント状態を確認する。
目的はディスク作成なので、仮想マシン自体は一旦消す。
NAME=mbt-d01 sudo -E virsh destroy $NAME sudo -E virsh undefine $NAME
DebianOSのインストールが完了
これで、Debianディスク作成完了。
ls $DISK
バックアップを作っておく。
念のために、ここまでのディスクをコピーしてバックアップする。
コピーしたものを次の作業で使う。
cp mbt-d01.qcow2 mbt-d01.installed.qcow2 cp mbt-d01.qcow2 mbt01.qcow2
qcow2スナップショットの作成もありかもしれない。
sudo qemu-img snapshot -c debian.installed mbt01.qcow2 sudo qemu-img snapshot -l mbt01.qcow2
バックアップを作っておかないと、失敗時に何度も作り直す羽目になり心が折れそうになる。
OS-02 のUbuntuを追加インストール開始。
先程開けておいた容量に、Ubuntuをインストール
Ubuntuインストーラーにより、インストール
+boot追加
する。作ったディスクを、上書きする。
ubuntuインストール
先程作ったDISKを使って、Ubuntuを更にインストール
NAME=mbt01 DISK=/var/lib/libvirt/images/$NAME.qcow2 virt-install\ --connect=qemu:///system \ --ram 8192 --virt-type kvm --vcpus 8 --name $NAME --os-type linux \ --graphics none \ --disk path=$DISK \ --location /var/lib/libvirt/images/ubuntu-20.04.3-live-server-amd64.iso,kernel=casper/hwe-vmlinuz,initrd=casper/hwe-initrd \ --os-variant ubuntu20.04 \ --extra-args "console=tty0 console=ttyS0,115200n8" \
Ubuntuのインストールが始まる。
ubuntuはSSH経由のインストール。
ubuntuはSSH経由でインストールが楽なのでSSH経由でインストールする。このときホスト鍵を無視しておくと面倒がなくていい。
## SSHインストールへの接続 ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no installer@192.168.200.141
SSH接続でインストールが始まる。
ディスクの割当をマニュアルで行う。
Debianが作った/bootはいじらないようにして、別の場所に/bootを作る
インストールの完了のチェック
再起動して、ubuntuをインストールしたパーティションが使われているのを確認。
バックアップ
ディスク状態を一旦ここで保存しときます。
cp mbt01.qcow2 mbt01.ubuntu-installed.qcow2
qcow2スナップショットの作成もありかもしれない。
sudo qemu-img snapshot -c ubuntu.installed mbt01.qcow2 sudo qemu-img snapshot -l mbt01.qcow2
ubuntuのGRUBメニューを有効化
Ubuntuは起動時にGRUBメニューを「隠す」ので表示する必要がある。(関連記事 ubuntuでgrubメニューを出す)
/etc/default/grub を書き換える
sudo sed '/console/i GRUB_TERMINAL="console serial"' -i /etc/default/grub sudo sed 's/GRUB_TIMEOUT/#GRUB_TIMEOUT/' -i /etc/default/grub sudo sed '/GRUB_DEFAULT/a GRUB_TIMEOUT=5' -i /etc/default/grub sudo sed '/GRUB_DEFAULT/a GRUB_TIMEOUT_STYLE=menu' -i /etc/default/grub sudo update-grub sudo grub-install --boot-directory=/boot /dev/vda
/etc/default/grub
を書き換えて反映すると、Ubuntuでシリアルコンソールで接続できる。
デュアルブートの確認。
この時点で再起動してすると、UbuntuからDebianが発見されていて、Ubuntuの起動メニューに出てるはずである。
debian で起動することを確認
Debianは /dev/vda2 を使わないことを確認。
debian と ubuntu はそれぞれ別個にGRUBを持っていることがわかる。
GRUBメモ
Grubメニューの移動方法。UbuntuのGRUBはCtl-P/Ctl-N
または^/v
で項目移動、Enter
で決定、ESC
で抜ける。
デュアルブート時の注意。
今回は両方ともにGRUBを持ってるので、どっちがどっちのGRUBを使っていて、今何処のGRUBから起動しているのか、ちゃんと意識してupdate-grub をする必要がある。
今回の構成は、あとからインストールしたUbuntuのGRUB
をメインで使っている。DebianのGrubは使われていない。しかし存在はしている。存在はしているので忘れないようにしておく。
切り替える場合の注意。
表示される。順番を変える話ではない。つかう GURB
を切り替える話です。
sudo grub-install /dev/sda sudo reboot
debian で grub-installすると
Debianで、grub-installをすると、DebianのGRUBが起動に使用されるようになる。
Debian側で実行
Debianからみたディスクのマウント状況は以下の通り。
debianのGRUBを登録
/dev/vda のBISO Boot PartitionにDebianのGrubを登録する。
sudo grub-install /dev/sda sudo reboot
再起動後
ubuntu でgrub-install すると
Ubuntu側で、grubを作り上書きし、grub-installをすると、UbuntuのGRUBが使われる。
ubuntu側から見たマウント状況
Ubuntu側のGRUBを登録
sudo grub-install /dev/sda sudo reboot
再起動後
DebianのGRUBより、UbuntuのGRUBが優先されて起動している。
上記GRUBの切り替えの留意点
GPT(MBR互換) / MBRのディスクの場合に限る
GPT / MBRの ディスクは、どのパーティションが「Bootable」であり、どのパーティションからブートするかのオーダーをフラグで管理している。そのフラグに/boot/grubの所有者が書きに行くのである。そのため、起動順が書き換わり、Bootするブロックデバイスが変わってくることになる。
個人的な感想でいえば、だるい。めっちゃめんどくさい仕様だ。だからEFIではこの辺を解消して/EFIパーティションというブート仕様専用のパーティションが設けられてそこを共有して使うことになっている。
ここまでの作業のまとめ
最初に、既存のDebianをつくっておき、Ubuntuインストーラーで追加インストールした。
続く
次回へつづく。 → rsync/ddコピーで作る