环境:银河麒麟SP1-V2303系统,X86架构,目标虚拟机为win10
一、安装
1.APT源安装
sudo apt install qemu qemu-kvm bridge-utils virt-manager libguestfs-tools qemu-system qemu-efi qemu-utils libvirt-clients libvirt-daemon-system gir1.2-spiceclientgtk-3.0
这里默认的virt-manager是2.1.0的
可以去清华镜像源手动下载4.0.0以及以上版本的virtinst和virt-manager包(这俩包需要同步更新)
2.一些也许可以注意一下的点
libguestfs-tools包是帮助KVM虚拟机管理文件系统,诸如磁盘之类,需要则下载
qemu-utils是一些qemu的命令,帮助管理KVM虚拟机,qemu-kvm是KVM硬件虚拟化层面的交互软件包,需要则下载
重启系统
二、环境配置
设置权限
如果刚下载安装完,在终端用普通用户权限打开virt-manager链接qemu/kvm失败,则需要修改libvirt的权限。
sudo vim /etc/libvirt/libvirt.conf
打开这个文件后,添加两行
unix_sock_group = "libvirt"
unix_sock_rw_perms = "0770"
保存,然后sudo systemctl restart libvirt-guests.service
以及sudo systemctl restart libvirtd.service
。
添加成功后尝试再次启动virt-manager发现还是失败,再reboot重启下系统。
这一步完成
三、安装KVM管理的虚拟机
有两种安装方式,一种是用iso镜像文件,另一种是用qcow2磁盘。前者需要对虚拟系统做一些配置,后者即开即用,不需要再经过安装系统的步骤,直接开机使用。有两种不同格式的安装,还有用virt-manager手动导入文件,或者virt-install脚本安装两种不同安装方式。
利用iso镜像文件安装
使用在virt-manager里手动配置虚拟机设置,文件选择目标ISO文件,操作系统选择win10,这时的选择并无生成的qcow2磁盘文件,也没有手动生成,所以选择默认,磁盘大小需要设置为20G以上。
磁盘设置
此处也可以用自定义的空白磁盘,qemu-img create -f qcow2 win10 25G
,指定格式为qcow2文件,名字为win10,大小25G
一定要勾选“在安装前自定义配置”,否则有些选项会随即设置导致宿主机不支持。
虚拟硬件设置
这里的磁盘暂时选择为默认的sata磁盘,其余选项后续说明。
固件X86下可以选择OVMF,也可以选择默认的BIOS,他俩的差别是BIOS支持带有内存数据的内部快照,OVMF只支持外部快照。下载OVMF固件安装包sudo apt install ovmf
,安装完毕在/usr/share/OVMF目录下,在这里可以选择OVMF_CODE.fd文件。
显示协议Spice改成VNC服务器,显卡QXL改成Ramfb(virt-maanger4.0.0以上版本可选Ramfb)或者VGA。
然后选择开始安装等待安装完毕
出现windows系统经典界面就基本稳了
利用qcow2磁盘文件安装
有两种方法,一个是在virt-manager里手动导入磁盘文件,另一种是用脚本自动创建虚拟机。
手动导入的操作基本和上述iso文件安装无二。脚本创建涉及到一些参数继续阐述。
利用脚本或者手动安装最后都是成功的且可以访问网络。
四、利用virt-install命令脚本安装虚拟机
virt-install命令可以根据不同参数选择来进行:第一次创建,或者后续导入即开即用的磁盘映像。
第一次创建
virt-install \
--name=win10 \
--vcpus=8 \
--accelerate \
--ram 8192 \
--cdrom /vmdisk/win10/win10.iso \
--os-type=windows \
--os-variant=win10 \
--disk path=/vmdisk/win10/win10_virtio.qcow2,format=qcow2,size=25,bus=virtio \
--disk path=/vmdisk/win10/virtio-win-0.1.190_amd64.vfd,device=floppy \
--network=default \
--input type=mouse,bus=usb \
--input type=keyboard,bus=usb \
--graphics vnc,port=5900,listen=0.0.0.0 \
--video=ramfb
利用已有磁盘即开即用
virt-install \
--name=win10 \
--vcpus=8 \
--accelerate \
--ram 8192 \
--os-type=windows \
--os-variant=win10 \
--disk path=/vmdisk/win10/win10_virtio.qcow2,format=qcow2,bus=virtio \
--network=default \
--input type=mouse,bus=usb \
--input type=keyboard,bus=usb \
--graphics vnc,port=5900,listen=0.0.0.0 \
--video=ramfb \
--noautoconsole \
--import
上述利用可视化工具安装时,磁盘IO方式选择了sata,这里用脚本安装选择了virtIO方式。
使用virtIO方式,在新建虚拟机时候,除了添加指定的ISO文件,还需要添加软盘,利用virtio-win-0.1.190_amd64.vfd文件给虚拟机安装virtIO驱动,链接里下载了amd64架构的vfd文件,可以使用与自己机器相符合的ISO文件或者另一个X86文件作为软件驱动。
五、关于安装里涉及到的选项不同参数
qcow2格式磁盘文件总线选择:选择了virtIO的IO方式,在各种IO方式里,这个是效率最高的,采用了半虚拟化与硬件加速的方式。
输入设备IO方式选择:选择USB,PS/2似乎是有些问题的,而且这里手动添加的参数,避免某些平台不自带输入设备。
graphics参数:选择VNC,便于管理,这里带上port和listen,便于随时修改端口号和监听的地址,比较安全。
video参数:4.0.0版本以上的virtinst软件包支持ramfb选项,以下版本可以选择vga。
与非即开即用不同的是,这里多了–noautoconsole和–import,这是告诉管理器,安装导入后不自动打开默认的虚拟机可视化管理工具,并且采用导入磁盘的方式安装虚拟机。
六、虚拟机里的驱动安装
采用virtIO方式的情况下,需要添加软盘来安装virtIO的驱动,链接里可以根据需要版本自行下载对应版本。
选择virtIO方式后,打开虚拟机安装,如果没有识别到驱动,则选择浏览然后选择软盘,安装驱动。
安装完毕进入虚拟机系统。
打开设备管理器,添加硬件,然后选择刚才的软盘驱动,会有三个可选驱动,全部安装。
七、KVM服务设置
设置开机自动启动
需要先设置虚拟机的网络服务开机自动启动。
virsh net-autostart --network default
在virt-manager的虚拟机设置里,引导选项设置为主机引导是启动虚拟机。或者
virsh autostart --domain win10
设置关机自动挂起
sudo vim /usr/lib/libvirt/libvirt-guests.sh
修改
#ON_SHUTDOWN=shutdown
ON_SHUTDOWN=SUSPEND
安装软件开发包
sudo apt install libvirt-dev libvirt-doc -y
如果要用xml的AP来创建一些关于虚拟机的信息,还需要下载
sudo apt install libxml2-dev libxml2-doc libxml2-utils -y
下述两个关于初始化与hypervisor连接并且寻找指定虚拟机,以及释放资源的API
int InitVirsh(const char * domName)
{
conn = virConnectOpen("qemu:///system");
if (conn == NULL) {
fprintf(stderr, "Failed to open connection to qemu:///system\n");
return 1;
}
dom = virDomainLookupByName(conn, domName);
if (dom == NULL) {
fprintf(stderr, "Failed to find Domain %s\n", domName);
virConnectClose(conn);
return 1;
}
return 0;
}
int UninitVirsh()
{
virDomainFree(dom);
virConnectClose(conn);
}