############################################################ # # >>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> ############################################################