Linux

KVMでゲストOSのクローンを作成する方法(DHCPのIPアドレス重複問題も回避)

*記事内に商品プロモーションを含む場合があります

KVMで仮想マシンのクローンを作成する方法する方法を紹介します。

KVM環境でvirt-cloneで仮想マシン(VM)のクローンを作成すると、DHCPで同じIPアドレスを割り振られる現象の回避方法も解説します。

同じ構成の仮想マシンを増やす方法には自動インストールでインストールする方法と、今回紹介する仮想マシンのクローンを作成する方法があります。

自動インストールについては以下のURLを参照。

KVM ゲストVM(Linux)の自動インストール方法virt-installコマンドでKVM上にLinux仮想マシン(ゲストVM)を自動で作成する方法を紹介します。 通常、Linux...

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は非常に便利ですが、ちょくちょくハマりますね。

Linuxの仮想化技術KVMでLinuxゲストOS(仮想マシン)のインストール方法KVM Linux(仮想化環境)にゲストOSとしてLinux(Ubuntu/CentOS/Rocky Linux/AlmaLinux)を...