目次

QEMU/KVM 仮想マシンのクローン

どのコマンドをどの順番で実施するか色々とやり方はあるが、ここでの手順は:

  1. ベースとなる仮想マシンcentos7-originを作成
  2. ベースから各種設定を削除したテンプレート仮想マシンcentos7-templateを作成
  3. テンプレートから実際に使用する仮想マシン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'

インストールの設定例:

  1. 7) [x] Network configuration
    1. 2) Configure device eth0
      1. 7) [x] Connect automatically after reboot
      2. 8) [x] Apply configuration in installer
  2. 2) [x] Time settings
    1. 1) Set timezone
  3. 2) [x] Time settings
    1. 2) Configure NTP servers
      1. 1) Add NTP server
        • ntp.nict.jp
        • ntp.jst.mfeed.ad.jp
        • ホストもVMなので外部NTPサーバを指定しているが、ホストが物理ならホストをNTPサーバにする
  4. 4) [x] Software selection
  5. 5) [x] Installation Destination
  6. 6) [x] Kdump
    1. 1) [ ] Enable kdump
  7. 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