KVM虚拟机安装及通过快照恢复
0x01 安装及配置 KVM 环境
1、验证 CPU
验证 CPU 是否支持 KVM,如果结果中有vmx(Intel)
或svm(AMD)
字样,就说明 CPU 是支持的。
egrep '(vmx|svm)' /proc/cpuinfo
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
,测试中发现不关闭也可以
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
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
安装需要用到图形界面,执行完上一步后需要在桌面环境下打开Virtual Machine Manager
来完成后续的安装操作
3、安装完毕
0x03 KVM 网络设置
1、修改默认网络
KVM 默认使用的是 virbr0 网桥,一般分配的是 192.168.122.1/24 这个网段,若需要修改,可使用virsh net-edit default
命令来修改 virbr0 上默认的 ip 地址,修改后需要重启操作系统才能生效。
注意:虚拟机中不关闭防火墙外部主机是 ping 不通虚拟机的。
brctl show
virsh net-edit default
reboot
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
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
注意:使用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
3、恢复虚拟机快照
恢复虚拟机只需要使用virsh snapshot-revert
命令即可,但是在恢复虚拟机状态之前,必须要关闭虚拟机。关闭虚拟机,可以使用virsh destroy
命令强制性关机,也可以使用virsh shutdown
命令关机。
virsh destroy kvmwinxp
virsh snapshot-revert kvmwinxp kvmwinxp_snapshot1
virsh start kvmwinxp
0x05 导出 KVM 虚拟机
导出虚拟机前注意cpu可能会有不兼容的问题,建议提前勾选Copy host CPU configuration
选项。
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
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 服务即可解决