レベル2 通常インストール済みディスクをコピーして持ってくる。
ここまでで、grub-install と update-grub の使い方がちょっとわかった。 そこでインストール済みのOSが入ったパーティションを持ち込んで、既存のディスクにOSを追加する事を考えてみる。
目的は、FSCKとLVMのリサイズである。メンテナンスを楽にするために、既存のシステムにメンテナンス用のOSを追加する方法を模索していく。
これができれば、インストーラーをわざわざ起動しなくても済むわけです。
OSを2つ用意する。
ディスクの用意
## 必要な変数を用意 NAME=d01 DISK=/var/lib/libvirt/images/$NAME.qcow2 sudo qemu-img create -f qcow2 $DISK 20G
パーティションを用意する。
## 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 sudo pvcreate /dev/nbd0p4 sudo vgcreate vg0 /dev/nbd0p4 sudo lvcreate vg0 -n debian -L 5G ## 解放 sudo dmsetup ls sudo dmsetup remove vg0-debian ## 取り外し sudo qemu-nbd --disconnect /dev/nbd0 ## nbd 無効化 sudo rmmod nbd
これで、ディスクが用意できた。
OS-01 Debianの用意
## 必要な変数を用意 NAME=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 \ ;
OSをインストールするときに、/boot
は別パーティションにする。
インストールができた。
OS-02 Ubuntuの用意
素のUbuntuを用意する。単純なインストール
## 必要な変数を用意 NAME=u02 DISK=/var/lib/libvirt/images/$NAME.qcow2 sudo qemu-img create -f qcow2 $DISK 10G ### インストール 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" \
Enter diskを選んで、シンプルにインストール。
ディスクのレイアウト設定
インストールができた
インストール後のディスクのマウント状況
Ubuntuのシリアルコンソールを有効にする。
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
シリアルコンソールの有効化を忘れると、やばい。Ubuntuをシリアルコンソールで見られない。
シリアル経由でUbuntuが起動してるのか失敗したかわからない。Grubミスで停止しても起動してても、全くわからないので注意。
2つのHDDを接続する
これで、次のディスクができた。
ubuntu u02.qcow2 debian d01.qcow2
USBディスクのUbuntuをPCに差し込んだ状態をシミュレートする。OS入りHDDをそれぞれ1台を2台用意し、1台のPCに2台を突っ込む。
ubuntuのディスクをPCに接続する
sudo virsh attach-disk \ --domain d01 \ --source /var/lib/libvirt/images/u02.qcow2\ --driver qemu\ --subdriver qcow2\ --targetbus virtio\ vdb
二台とも接続できたかチェック
sudo virsh console d01
lsblk
ちゃんと接続されて、VGが認識されていることがわかる。
ディスクの内容をコピー
コピー先を用意する
sudo lvcreate vg0 -n ubuntu -L 5G sudo mkfs.ext4 /dev/mapper/vg0-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
マウント状況を確認する。/bootも
コピーする。
sudo rsync -avz /mnt/ /mnt2
rsyncコピーは遅いので、dump-restore/ddでもいいかも
/etc/fstabを変更する
ubuntuのfstabを書き換える。UUIDで記述されていてまずい。/boot
は使わないようにしたので変更する。
/mnt2/etc/fstab
/dev/disk/by-id/dm-name-vg0-ubuntu / ext4 defaults 0 1 #/dev/disk/by-uuid/xxxxx /boot ext4 defaults 0 1
DebianのGrub再構築。
アンマウントして
sudo umount /mnt sudo umount /mnt/boot sudo umount /mnt2 sudo dmsetup remove ubuntu--vg-ubuntu--lv
ディスクを取り外しする
sudo virsh detach-disk d01 vdb
正常に取外した。
os-proberでコピー確認
コピーした領域が、DebianからUbuntuとして認識されてるかテスト
GRUBメニューを作り直す
Debianで起動しログインする。Ubuntuが追加されたのをGRUBに認識させて、メニューに追加させる。
sudo update-grub
再起動して確認。
GRUBを使った起動を確認する。
Debianで起動することを確認
無事起動した。
Ubuntuで起動するか確認
Ubuntuも無事に起動した。
ここまでのまとめ
Ubuntuがインストールされたディスクをコピーして起動させることができた。
ミスしそうポイントは以下の通り。
- /etc/fstab
- GRUB_TERMINAL="serial console"
- mount /dev/vdb2 /mnt/boot
- os-prober
手順としては単純にコピーをしてファイルを作るだけでいい。なるほどね。