0x01 安装及配置 KVM 环境

1、验证 CPU

验证 CPU 是否支持 KVM,如果结果中有vmx(Intel)svm(AMD)字样,就说明 CPU 是支持的。

egrep '(vmx|svm)' /proc/cpuinfo

checkkvm.png

2、验证 BIOS

验证 BIOS 是否开启 CPU 的虚拟化支持,如已开启,返回结果大致如下所示

[root@localhost ~]# dmesg | grep kvm
[root@localhost ~]# lsmod | grep kvm
kvm_intel             183621  3 
kvm                   586948  1 kvm_intel
irqbypass              13503  1 kvm
[root@localhost ~]#

3、关闭 SELinux

建议关闭 SELinux,将/etc/sysconfig/selinux中的SELinux=enforcing修改为SELinux=disabled,测试中发现不关闭也可以

selinux.png

4、安装 KVM

安装 KVM 及其它必要的依赖组件

yum install -y qemu-kvm libvirt virt-install bridge-utils

5、开启 libvirtd 服务

开启 libvirtd 服务,并且设置其为开机自动启动

systemctl start libvirtd
systemctl enable libvirtd

0x02 安装 KVM 虚拟机

1、创建预分配磁盘

创建 8G 的虚拟磁盘,参数-opreallocation=metadata预分配磁盘,硬盘空间不会立即占用。注意磁盘格式,ext4支持此参数,ext3不支持。

qemu-img create -f qcow2 -opreallocation=metadata kvmwinxp.img 8G

createkvm.png

2、安装系统

虚拟机命名为 kvmwinxp,内存 2G,1 个 CPU

virt-install --name=kvmwinxp --ram 2048 --vcpus=1 -f kvmwinxp.img --cdrom /root/Downloads/zh-hans_windows_xp_professional_with_service_pack_3_x86_cd_x14-80404.iso

virtinstall.png

安装需要用到图形界面,执行完上一步后需要在桌面环境下打开Virtual Machine Manager来完成后续的安装操作

installwinxp.png

3、安装完毕

winxpinstalled.png

qemuinfo.png

0x03 KVM 网络设置

1、修改默认网络

KVM 默认使用的是 virbr0 网桥,一般分配的是 192.168.122.1/24 这个网段,若需要修改,可使用virsh net-edit default命令来修改 virbr0 上默认的 ip 地址,修改后需要重启操作系统才能生效。

注意:虚拟机中不关闭防火墙外部主机是 ping 不通虚拟机的。

brctl show
virsh net-edit default
reboot

netdefault.png

2、自定义网络

KVM 可以将网络配置信息写入 xml 文件以实现自定义网络,具体步骤如下所示:

vi test.xml
virsh net-define test.xml
virsh net-start test
virsh net-autostart test
brctl show
virsh net-list
reboot

nettest.png

0x04 使用快照恢复 KVM 虚拟机

注意要使用 KVM 的快照功能,虚拟机的硬盘一定要是 qcow2 格式,否则无法使用快照功能。 建议使用virsh snapshot-create-as命令生成快照,qemu-img snapshot据说不稳定,还经常出错。

1、创建快照

关闭虚拟机,为虚拟机 kvmwinxp 创建快照,快照名称为 kvmwinxp_snapshot1

virsh list --all
virsh shutdown kvmwinxp
virsh snapshot-create-as kvmwinxp kvmwinxp_snapshot1
virsh snapshot-list kvmwinxp

kvmwinxpsnapshot.png

注意:使用virsh shutdown命令关闭虚拟机要安装 acpid 服务,在图形界面测试时发现不安装也能关闭,但在虚拟机中测试发现会有关闭失败的情况,建议安装并设置为开机自启动。

yum install acpid
systemctl enable acpid
systemctl start acpid

2、查看快照

查看虚拟机 kvmwinxp 快照以及 kvmwinxp_snapshot1 的详细信息

virsh snapshot-list kvmwinxp
virsh snapshot-info kvmwinxp kvmwinxp_snapshot1

snapshotinfo.png

3、恢复虚拟机快照

恢复虚拟机只需要使用virsh snapshot-revert命令即可,但是在恢复虚拟机状态之前,必须要关闭虚拟机。关闭虚拟机,可以使用virsh destroy命令强制性关机,也可以使用virsh shutdown命令关机。

virsh destroy kvmwinxp
virsh snapshot-revert kvmwinxp kvmwinxp_snapshot1
virsh start kvmwinxp

revert.png

0x05 导出 KVM 虚拟机

导出虚拟机前注意cpu可能会有不兼容的问题,建议提前勾选Copy host CPU configuration选项。

hostcpu.png

1、关闭虚拟机

virsh shutdown kvmwinxp

2、导出虚拟机配置文件

virsh dumpxml kvmwinxp > kvmwinxp.xml

3、查看虚拟机的磁盘文件

virsh domblklist kvmwinxp

4、打包文件

打包 kvmwinxp.img 与 kvmwinxp.xml 文件,在测试中发现快照无法直接导入使用,即使替换新生成的快照也无法恢复到原快照保存的状态,因此建议虚拟机迁移后重新创建快照文件。

tar czvf kvmwinxp.tar.gz kvmwinxp.xml kvmwinxp.img

0x06 导入 KVM 虚拟机

1、解压文件

解压 kvmwinxp.tar.gz,修改 kvmwinxp.xml 中的内容或者保持 kvmwinxp.img 文件位置与原路径保持一致。

tar zxvf kvmwinxp.tar.gz
vi kvmwinxp.xml

sourcefile.png

2、注册虚拟机

将 kvmwinxp.xml 文件移动到指定目录下或在 kvmwinxp.xml 所在路径执行命令,定义并注册虚拟机,注册时会做验证,需要系统中装有 openssl

virsh define kvmwinxp.xml

3、创建快照文件

virsh snapshot-create-as kvmwinxp kvmwinxp_snapshot1

4、启动虚拟机

virsh start winxp

5、无法启动的问题

启动虚拟机时可能会出现下面的提示

[root@localhost ~]# virsh start kvmwinxp
error: Failed to start domain kvmwinxp
error: Cannot access storage file '/root/kvmwinxp.img' (as uid:107, gid:107): Permission denied

说明是权限的问题,修改/etc/libvirt/qemu.conf文件,去掉 user 和 group 字段前的注释,并重启 libvirtd 服务即可解决

qemuconf.png