重要!!
如果不想折腾,只想快点看到效果的话,选择 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