KVMで仮想マシンのクローンを作成する方法する方法を紹介します。
KVM環境でvirt-cloneで仮想マシン(VM)のクローンを作成すると、DHCPで同じIPアドレスを割り振られる現象の回避方法も解説します。
同じ構成の仮想マシンを増やす方法には自動インストールでインストールする方法と、今回紹介する仮想マシンのクローンを作成する方法があります。
自動インストールについては以下のURLを参照。
KVMで仮想マシンのクローンを作成する方法
KVMで仮想マシンのクローンを作成する方法です。
virsh/virt-xxxは、KVMホスト上で実行するコマンドです。
1.クローン元の仮想マシン(VM)をシャットダウン
# # virsh shutdown Ubuntu2204-Original
2.virt-cloneコマンドでクローンVMを作成
# virt-clone --original=Ubuntu2204-Original --name=Ubuntu2204-Clone-1 --auto-clone
時間はVMのファイルサイズに依存します。30GBのサイズで5分程度でした。
(2回目は、ディスクキャッシュにコピー元のファイルがあったので1分ほどで完了)。
3.仮想マシン(VM)を起動
# virsh start Ubuntu2204-Clone-1
4.仮想マシンにログインして仮想マシンのホスト名の変更
クローンしたOSはコピー元のホスト名になっています。
仮想マシンにログイン
<ホスト側> 仮想マシンにログイン
# virsh console Ubuntu2204-Clone-1
<仮想マシン側>ホスト名の変更
# hostnamectl set-hostname Ubuntu2204-Clone-1
DHCPが同じIPを割り振る現象の回避方法
クーロンOSのIPアドレスが重なり、IPアドレスが1台しか割り振られません。
または IPアドレスが割り当てられない状態になります。
これは、仮想マシンのOSが管理しているマシンIDが同じためにKVMが同じと仮想マシンと判断しているからです。
# virsh domifaddr Ubuntu2204-Clone-1 名前 MAC アドレス Protocol Address ------------------------------------------------------
★何も表示されない。
仮想マシンにログインして確認するとIPアドレスは設定されていますが、KVM上はIPなしになっています。
■回避方法
仮想マシンにログインして /etc/machine-id を空の状態(ゼロバイト)にして再起動すると別のマシンとしてKVMホストに認識されて、DHCPが別のIPアドレスを割り振ってくれます。
<ホスト側>
# virsh console Ubuntu2204-Clone-1
<仮想マシン側>
# echo -n > /etc/machine-id reboot
DHCPが同じIPを割り振る現象の詳細
ホストKVMの以下のファイルの内容で挙動が確認できます。
/var/lib/libvirt/dnsmasq/virbr0.status
■オリジナルの仮想マシンを起動
# $ cat /var/lib/libvirt/dnsmasq/virbr0.status { "ip-address": "192.168.122.168", ★ "mac-address": "52:54:00:0b:ed:c3", "hostname": "ubuntu2204-Original", ★ "client-id": "ff:b5:5e:67:ff:00:02:00:00:ab:11:35:71:b2:23:fe:d9:d4:a8", ★ }
■オリジナルの仮想マシン+クローンの仮想マシンを起動
複数を起動すると後勝ちになるようです。
別VMに同じIPが割り当てられて、起動済みのVMのIPが無効化される。
$ cat /var/lib/libvirt/dnsmasq/virbr0.status { "ip-address": "192.168.122.168", ★別VMに同じIPが割り当てられて、起動済みのVMのIPが無効化される。 "mac-address": "52:54:00:e1:c3:d1", "hostname": "Ubuntu2204-Clone-1", ★ 別VMに割り当てられた "client-id": "ff:b5:5e:67:ff:00:02:00:00:ab:11:35:71:b2:23:fe:d9:d4:a8", ★ client-idが同じ }
■回避策を実施して、オリジナル仮想マシン+クローン仮想マシンを起動
/etc/machine-id を空にして再起動すれば、machine-idが変わり、IPアドレスも別のIPが振られた。
cat /etc/machine-id
echo -n > /etc/machine-id
# $ cat /var/lib/libvirt/dnsmasq/virbr0.status { "ip-address": "192.168.122.168", ★ "mac-address": "52:54:00:0b:ed:c3", "hostname": "ubuntu2204-Original", ★ "client-id": "ff:b5:5e:67:ff:00:02:00:00:ab:11:35:71:b2:23:fe:d9:d4:a8", ★ } { "ip-address": "192.168.122.48", ★IPも変わった "mac-address": "52:54:00:0b:ed:c3", "hostname": "ubuntu2204-Clone-1", "client-id": "ff:b5:5e:67:ff:00:02:00:00:ab:11:47:e2:71:4c:3d:df:67:be", ★ client-idが変わった }
最後に
KVMは非常に便利ですが、ちょくちょくハマりますね。