KVM 운영

############################################################
#
# >>KVM 가상머신 이미지 만들기
#
############################################################

#!/bin/sh
############################################################
#
# adjustable variables
#   osinfo-query os | grep -i win | cut -d ' ' -f -2
#   커맨드를 통해 전체 --os-variant 목록을 얻을 수 있다.
#
############################################################
KVM_NAME="testvm"
OS_VARIANT="win10"
KVM_TITLE="KVM ${KVM_NAME}"
KVM_VDA_FILE="/var/lib/libvirt/images/10.10.10.39_${OS_VARIANT}_${KVM_NAME}.qcow2"
KVM_VDA_SIZE="40"
INSTALL_ISO='/var/lib/libvirt/boot/ko_windows_10_rs5_v1809(17763.1432)_ltsc_x64_esvali.iso'
VIRTIO_VFD="/usr/share/virtio-win/virtio-win_amd64.vfd"

############################################################
#
# the installation command
# 기존 이미지가 존재할 경우 기존 이미지를 변경하지 않는다.
#
############################################################
virt-install \
  --print-xml \
  --virt-type kvm \
  --name ${KVM_NAME} \
  --metadata title="${KVM_TITLE}" \
  --os-variant ${OS_VARIANT} \
  --cpu host \
  --vcpus 2 \
  --ram 4096 \
  --boot cdrom,hd,menu=on \
  --graphics 'vnc,port=7200,password=123456,listen=0.0.0.0' \
  --rng /dev/urandom \
  --network type=direct,source=ens33,source_mode=bridge,model=virtio \
  --controller type=scsi,model=virtio-scsi \
  --disk path=${KVM_VDA_FILE},size=${KVM_VDA_SIZE},format=qcow2,bus=scsi \
  --disk ${INSTALL_ISO},device=cdrom,bus=ide \
  --disk ${VIRTIO_VFD},device=floppy \
  > /var/lib/libvirt/images/${KVM_NAME}.xml
virsh define /var/lib/libvirt/images/${KVM_NAME}.xml

############################################################
#
# >>CD-ROM으로 부팅하기
#
############################################################
# virsh edit testvm하여 아래와 같이 cdrom을 dev='hd'위에 추가하고 bootmenu도 추가
# <os>
#   <type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
#   <boot dev='cdrom'/>
#   <boot dev='hd'/>
#   <bootmenu enable='yes' timeout='30000' />
# </os>
############################################################

############################################################
#
# >>실행중인 가상머신 확인
#
############################################################
virsh list
virsh list --all (모두 확인)

############################################################
#
# >>강제종료
#
############################################################
virsh destroy testvm

############################################################
#
# >>삭제
#
############################################################
virsh undefine testvm
rm -rf /var/lib /var/lib/libvirt/images/10.10.10.39_win10_testvm.qcow2

############################################################
#
# >>시작
#
############################################################
virsh start testvm

############################################################
#
# >>리부팅
#
############################################################
virsh reboot testvm

############################################################
#
# >>셧다운
#
############################################################
virsh shutdown testvm

############################################################
#
# >>편집 (정의 xml 편집)
#  ※VNC관련 정보도 여기서 편집한다. 편집 완료 후 리부팅
#
############################################################
virsh edit testvm
virsh reboot testvm

############################################################
#
# >>설정 XML 내보내기
#
############################################################
virsh dumpxml testvm > testvm.xml

############################################################
#
# >>접속
#
############################################################
virt-viewer testvm

############################################################
#
# >>CD-ROM Disc 빼기
#
############################################################
virsh change-media testvm --path hda --eject --live

############################################################
#
# >>CD-ROM Disc 삽입
#  ※eject 필요 없음
#  ※CD-ROM 교체 후 정상종료 되어야 한다.
#  ※CD-ROM 드라이브 구동 중에는 교체 불가
#
############################################################
virsh attach-disk testvm /usr/share/virtio-win/virtio-win.iso hda --type cdrom --mode readonly
virsh attach-disk testvm /var/lib/libvirt/boot/win10_pe_hasu0707.iso hda --type cdrom --mode readonly

############################################################
#
# >>CD-ROM 드라이브 삭제
#
############################################################
virsh detach-disk testvm hdb --config

############################################################
#
# >>qcow2 이미지 최적화
#  qemu-img convert -c -O qcow2: qcow2 포맷으로 다시 변환
#  -c 옵션은 압축 옵션이며 빼면 변환속도가 빠르다
#
############################################################
cd /var/lib/libvirt/images
qemu-img convert -O qcow2 10.10.10.39_win10_testvm.qcow2 10.10.10.39_win10_testvm.qcow2.new
rm -f 10.10.10.39_win10_testvm.qcow2
mv 10.10.10.39_win10_testvm.qcow2.new 10.10.10.39_win10_testvm.qcow2

############################################################
#
# >>qcow2 용량 늘리기 (+10GB를 늘린다)
#
############################################################
qemu-img resize -f qcow2 10.10.10.39_win10_testvm.qcow2 +10G

############################################################
#
# >>Bridge Network 설정
#
############################################################

############################################################
# HostOS는 br0로 Bridge 네트워크가 이미 설정되어 있어야 한다.
# brctl show 커맨드로 bridge 네트워크를 미리 확인한다.
# default 네트워크 삭제
############################################################
virsh net-destroy default
virsh net-undefine default
systemctl restart libvirtd.service

############################################################
# 삭제 확인
############################################################
virsh net-list
ip a
############################################################
# 가상머신의 네트워크를 default에서 eth0로 변경
############################################################
# virt-manager를 통해 가상머신의 네트워크를 eth0(ens33)등의 물리 NIC로 변경해 준다.
# virsh edit testvm으로는 아래와 같이 변경한다.

############################################################
# <interface type='direct'>
#   <mac address='52:54:00:16:0e:55'/>
#   <source dev='ens33' mode='bridge'/>
#   <model type='virtio'/>
#   <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
# </interface>
############################################################
위로 스크롤