X86平台下Linux系统安装部署KVM,以及KVM一些配置

环境:银河麒麟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);
}
  • 9
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值