QEMU/KVM 仮想マシンのクローン
どのコマンドをどの順番で実施するか色々とやり方はあるが、ここでの手順は:
- ベースとなる仮想マシン
centos7-origin
を作成 - ベースから各種設定を削除したテンプレート仮想マシン
centos7-template
を作成 - テンプレートから実際に使用する仮想マシン
centos7a
をクローン
ベースとテンプレートを分けてベースを残しているのは、テンプレートの再作成が簡単そうだから。
1. ベース仮想マシンの作成
CentOS 7をコンソールでインストール。
virt-install --name centos7-origin --memory 2048 --vcpus 1 --disk size=8 --os-variant centos7.0 --location /var/lib/libvirt/images/CentOS-7-x86_64-Minimal-2009.iso --nographics --extra-args='console=tty0 console=ttyS0,115200n8'
インストールの設定例:
- 7) [x] Network configuration
- 2) Configure device eth0
- 7) [x] Connect automatically after reboot
- 8) [x] Apply configuration in installer
- 2) [x] Time settings
- 1) Set timezone
- 2) [x] Time settings
- 2) Configure NTP servers
- 1) Add NTP server
- ntp.nict.jp
- ntp.jst.mfeed.ad.jp
- ホストもVMなので外部NTPサーバを指定しているが、ホストが物理ならホストをNTPサーバにする
- 4) [x] Software selection
- 5) [x] Installation Destination
- 6) [x] Kdump
- 1) [ ] Enable kdump
- 8) [x] Root password
ゲストの追加設定:
yum install qemu-guest-agent systemctl enable qemu-guest-agent --now vi /etc/chrony.conf # modify server to pool visudo # set %wheel ALL=(ALL) NOPASSWD: ALL vi /etc/ssh/sshd_config # set UseDNS no yum -y install man-pages man-pages-overrides
ホストからゲストにSSHの公開鍵をコピー。
virsh domifaddr centos7-origin ssh-copy-id -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null root@ゲストのIP
ベースとなる仮想マシンを停止する。
virsh shutdown centos7-origin virsh list --all
ディスクスペースに余裕が無いなら必要に応じて以下を実行。
virt-sparsify --in-place /var/lib/libvirt/images/centos7-origin.qcow2
2. テンプレート仮想マシンの作成
仮想マシンのクローンを作成してから、複製しただけでは使えない設定をvirt-sysprep
で削除。
virt-clone -o centos7-origin -n centos7-template --file /var/lib/libvirt/images/centos7-template.qcow2 virt-sysprep -d centos7-template --operations defaults,-ssh-userdir
ユーザのSSH設定ディレクトリを削除しないように設定しているが、削除するならvirt-sysprep
のオプション--operations defaults,-ssh-userdir
は不要。
3. テンプレートからクローンを作成
テンプレートから仮想マシンをクローンした後に、ホスト名の設定などを実施。
virt-clone -o centos7-template -n centos7a --file /var/lib/libvirt/images/centos7a.qcow2 virt-sysprep --enable customize,lvm-uuids,machine-id --selinux-relabel --hostname centos7a.localdomain -d centos7a
ディスクサイズを変更したい場合はvirt-resizeを実行する。
クローンを起動してコンソールで接続。
virsh start centos7a virsh console centos7a