重要!!
如果不想折騰,只想快點看到效果的話,選擇 CentOS 6,我用的是CentOS 6.10.
起初用CentOS 7沒折騰出一個能上網的虛擬機來,只留下挫敗感。
第一階段 在CentOS 6.10上面安裝並啟動win7虛擬機
安裝實驗環境
實驗是在虛擬機CentOS上做的,沒錯,就是在VMWare虛擬機上面創建KVM虛擬機。
創建CentOS虛擬機(VMWare)的流程不贅述,重點是打開虛擬機配置中的CPU虛擬化選項,除此之外,VMWare配置沒有其他要特別強調的了。

安裝必要的軟件
sudo yum install libvirt-client gpxe-roms-qemu libvirt-python python-virtinst qemu-kvm libvirt virt-manager virt-viewer virt-top virt-what qemu-img
sudo yum install vnc vnc-server tigervnc-server
准備win7原版鏡像(可以在MSDN i tell you上面下載)
virt-manager創建虛擬機
命令行啟動:virt-manager,
雙擊QEMU/kvm,在彈出窗口中選擇存儲,點擊左下角加號,自行創建一個存儲池,比如我的vm:

將win7鏡像放進上圖所示的路徑中,比如我的就是 /var/lib/libvirt/imgaes/vm (可能可以不用放進來?)
回到virt-manager,點擊
按鈕就可見iso文件。
點擊左上角的File選項,如下,選擇view manager,

點擊小電腦選項
,創建虛擬機。我的配置參考:





點擊安裝按鈕,win7安裝開始,接下來就是安裝系統的一般流程,不贅述。

虛擬機參數
安裝系統之后,可見虛擬聲卡是HD,虛擬網卡是RTL8139。


上面的配置過程沒有修改桌面傳輸協議,默認用的是VNC,而不是Spice。
虛擬機創建用的虛擬化軟件默認是KVM而不是QEMU。
虛擬機的重啟
用virt-manager管理就可以了。
第二階段 CentOS改用spice連接桌面
參考 https://blog.csdn.net/llwszjj/article/details/42124169
還是采用最簡單的方案,
利用virt-manager配置spice服務,
然后CentOS上面安裝spice-server和spice-client等必要軟件,
重啟虛擬機,
最后,使用spice-client,通過以下命令即可連接桌面:
/usr/libexec/spicec -h 127.0.0.1 -p 5900

也可用virt-viewer連接桌面:sudo virt-viewer(可以配置其他參數)。我的理解,如果是使用spcie協議傳輸桌面,那么virt-viewer也相當於一個“spice-client”。
第三階段 虛擬機xml文件和其他相關文件
以上操作會在 /etc/libvirt/qemu里面生成一個以虛擬機名稱命名的xml文件。
這份文件可以通過virsh工具管理:
virsh define win7.xml //導入虛擬機配置(完整路徑) virsh start win7 //開啟win7 (shutdown對應的是正常關機) virsh list --all // 顯示所有虛擬機狀態(管理員權限運行,不然可能錯誤顯示shut off) virsh destroy win7 //銷毀虛擬機(相當於強制掉電) virsh undefine win7 //刪除虛擬機配置(注意備份,會把xml文件刪了的 ——
// virt-manager就檢測不出來本地已創建的虛擬機了,除非恢復文件,並重新virsh define一下) virsh dumpxml win7 //顯示虛擬機xml配置
使用上面操作產生的xml,通過virsh手動啟動虛擬機,和virt-manager方式一樣,后台也會有一個qemu-kvm進程:
qemu 8996 108 2.3 1690872 92552 ? Sl 19:55 0:25 /usr/libexec/qemu-kvm -name win7 -S -M rhel6.6.0 -enable-kvm -m 1024 -realtime mlock=off -smp 2,sockets=2,cores=1,threads=1 -uuid 065d597f-ff24-d86d-2a54-6f57a3335a72 -nodefconfig -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/win7.monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=localtime,driftfix=slew -no-shutdown -device ich9-usb-ehci1,id=usb,bus=pci.0,addr=0x5.0x7 -device ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,addr=0x5 -device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,addr=0x5.0x1 -device ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pci.0,addr=0x5.0x2 -device virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x7 -drive file=/var/lib/libvirt/images/win7.img,if=none,id=drive-ide0-0-0,format=raw,cache=none -device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 -drive file=/var/lib/libvirt/images/vm/cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso,if=none,media=cdrom,id=drive-ide0-1-0,readonly=on,format=raw -device ide-drive,bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0 -netdev tap,fd=22,id=hostnet0 -device rtl8139,netdev=hostnet0,id=net0,mac=52:54:00:ef:51:bc,bus=pci.0,addr=0x3 -chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 -chardev spicevmc,id=charchannel0,name=vdagent -device virtserialport,bus=virtio-serial0.0,nr=1,chardev=charchannel0,id=channel0,name=com.redhat.spice.0 -device usb-tablet,id=input0 -spice port=5900,addr=127.0.0.1,disable-ticketing,seamless-migration=on -vga qxl -global qxl-vga.ram_size=67108864 -global qxl-vga.vram_size=67108864 -device intel-hda,id=sound0,bus=pci.0,addr=0x4 -device hda-duplex,id=sound0-codec0,bus=sound0.0,cad=0 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x6 -msg timestamp=on
