在Ubuntu上跑虚拟机
linux体系下桌面应用软件确实还是相对少了点,虽然有win体系(proton,感谢Valve感谢G胖)可以解决大部分问题,但总归还是有一些应用兼容性难以解决.这时我们就可以尝试使用虚拟机了.
KVM
Linux下有一个非常强力的虚拟机工具–KVM.它是基于内核的虚拟机,它是目前linux内核中的一个模块,相当于是linux自带一套虚拟化方案.它的使用需要一台可以运行linux内核的Intel处理器(含VT虚拟化技术)或AMD处理器(含SVM安全虚拟机技术的AMD处理器,也叫AMD-V).基本只要新一些的linux发行版都支持kvm,只要新一些的处理器也都支持虚拟化技术.
当然cpu支持并不意味着就直接能用,我们还需要去主板中打开对应的设置项,虽然大多数主板厂商都是默认打开的,我们还是应该先检查一下.
KVM的基础安装
安装之前首先我们需要检查下有没有安装条件
egrep -c '(vmx|svm)' /proc/cpuinfo
大于0则说明可以安装
之后就是
sudo apt install virt-manager qemu-system qemu-utils libvirt-daemon-system
sudo reboot
如果有条件最好先给系统备份下
其中
- virt-manager: 图形界面,我们主要就是操作这个软件来安装启动虚拟机以及进行配置
- qemu-system:kvm的上层虚拟器,配合kvm,完成虚拟器功能
- qemu-utils:处理器仿真器,比如模拟arm处理器
- libvirt-daemon-system:提供API,使GUI能够和各类进程、服务通信
基本的安装和启动虚拟机
安装好后,会有一个virt-manager的图标

双击打开,我们就可以在里面配置虚拟机了.要配置虚拟机,我们需要先下载好虚拟机系统的安装镜像,我们以win10为例.
-
首先点击图中小电脑图标,选择安装介质为我们下载好的
iso文件




需要注意,目前win10的安装镜像会被自动识别为win11,我们需要取消勾选自动识别,然后手动将11改为10
-
给虚拟机分配内存,cpu核心数以及磁盘空间


对于虚拟机只是为了临时调试验证的用户来说,通常win10给个16g,4核(实际是4线程),40g空间也就够了,如果要重度使用建议分配32g内存8核120g硬盘空间.
跑虚拟机的宿主机最好配置强些,像我这台是8核16线程,96g内存的配置,跑虚拟机就比较轻松了
-
之后点前进,就会进入windows的安装流程,就像在本地安装一样我们根据需求安装,激活也就行了
windows版本和引导
我尝试了不少版本的windows镜像,发现并不是所有的都可以用kvm的默认引导安装.目前测试通过的只有我在2016年从微软官方下载的win10专业版镜像可用.
这是因为kvm的默认引导是OVMF(UEFI),而有些镜像并不支持这个引导方式,所以会导致安装失败.
如果遇到安装失败,可以尝试在创建虚拟机时,将引导方式改为BIOS(SeaBIOS),这样就能解决问题.
额外的驱动盘
有些虚拟机的功能需要额外的驱动支持,比如virtio驱动,它可以让虚拟机的磁盘,显卡和网卡性能更好.我们可以去https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/下载对应版本(推荐最新版本)的驱动盘镜像(.iso文件).然后在虚拟机的设置中,添加一个光驱,选择我们下载好的驱动盘镜像即可.这个驱动盘我们在后面的设置中会用到.
宿主机与虚拟机交互
正常情况下虚拟机和宿主机是完全隔离的,这其实用起来还是挺不方便的,比如有如下场景:
- 你在虚拟机上用只有windows客户端的网盘应用下载了个文件,想传到宿主机里去用
- 你在宿主机复制了个地址,想去虚拟机里黏贴进浏览器下载东西
- 你想在宿主机和虚拟机间拖放个文件
共享剪切板
宿主机与虚拟机之间最常用的交互方式就是共享剪切板了,它可以让我们在宿主机和虚拟机间复制粘贴文本内容,甚至是图片内容.这个功能主要是针对小段内容的传输,如果是大文件,虽然也不是不行,但并不会有类似进度条这样用于指示传输进度的东西,所以不建议用这个功能来传输大文件.
这个功能都可以通过SPICE协议来实现.
宿主机的设置
宿主机我们需要做的是确保虚拟机使用SPICE显示协议

虚拟机设置
之后我们需要在虚拟机中安装SPICE客户端spice-vdagent,
在Debian及其衍生版的linux虚拟机中安装
如果虚拟机是Debian及其衍生版,可以使用如下命令
sudo apt update
sudo apt install spice-vdagent
sudo reboot
windows虚拟机中的设置
而windows下我们需要去https://www.spice-space.org/download.html#guest_packages下找到spice-guest-tools的下载连接并下载下来安装,安装完成后记得重启.
重启过后我们还需要确保windows的虚拟机中在任务管理器的服务中有spice-agent服务在运行,如果没有,可以尝试手动启动下.
确保通道可用
正常情况下上面两步都弄完,宿主机与虚拟机间就可以交互了,但我们还是再回到宿主机,在下图确认下通道有被建立

拖放文件[可选]
拖放文件功能讲道理并不是一个非有不可的功能,一般是作为共享剪切板的补充,但有时确实挺方便的,所以这里也介绍下.
这个功能也是通过SPICE协议来实现的,整体上和上面剪切板共享是类似的,但它需要额外在虚拟机中安装一个额外组件spice-webdavd.
虚拟机设置
我们需要在虚拟机中安装SPICE客户端spice-webdavd,
在Debian及其衍生版的linux虚拟机中安装
如果虚拟机是Debian及其衍生版,可以使用如下命令
sudo apt update
sudo apt install spice-webdavd
sudo reboot
windows虚拟机中的设置
而windows下我们需要去https://www.spice-space.org/download.html#guest_packages下找到Spice WebDAV daemon的下载连接并下载下来安装,安装完成后记得重启.
重启过后我们还需要确保windows的虚拟机中在任务管理器的服务中有spice-webdavd服务在运行,如果没有,可以尝试手动启动下.
确保通道可用
如果你案装了spice-webdavd,你还需要额外添加一个通道,点击添加硬件,选择通道,类型选择spice-webdavd相关的选项,并选择设备类型为Spice代理,然后点完成即可.
共享文件
如果你需要在宿主机和虚拟机间频繁传输大文件,那就建议使用共享文件夹功能了.和上面两种方式不同,这个功能是通过virtio-fs来实现的.这个功能需要宿主机和虚拟机都支持virtio-fs,目前Debian及其衍生版的linux虚拟机是支持的,而windows虚拟机需要额外安装对应的驱动.
宿主机设置
宿主机我们需要首先安装virtio-fs相关组件
sudo apt install virtiofsd
sudo systemctl restart libvirtd # 重启libvirt服务
之后我们需要在virt-manager中给虚拟机添加一个virtio-fs的共享文件夹
进入虚拟机的设置界面,点击添加硬件,选择文件系统,驱动类型选择virtiofs,源路径选择宿主机上你想共享的文件夹路径(需要你像创建iso卷一样创建),目标路径随便起个名字,注意这个只是一个挂载用的标识符,并不是虚拟机中的地址,然后点完成即可.
虚拟机设置
windows虚拟机中的设置
去https://github.com/winfsp/winfsp/releases下载并安装winfsp-xxxxx.msi驱动安装包,安装完成后重启虚拟机.
重启过后我们还需要确保windows的虚拟机中在任务管理器的服务中有VirtioFsSvc服务在运行,如果没有,可以尝试手动启动下.为了确保这个服务能自动启动,可以将它的启动类型改为自动(打开服务,找到VirtIO-FS Service,右键属性进行修改).
之后只要一切正常,我们就可以在此电脑中看到一个盘(一般为Z:盘),这个盘就是我们宿主机共享的文件夹,我们可以像操作本地磁盘一样操作它.
显卡3D加速
默认情况下kvm的显卡是虚拟的,性能并不高,如果要跑一些3D应用,那就需要开启3D加速.3D加速并不是显卡直通,而是通过virtio-gpu来实现的,它是一个虚拟的3D显卡,它可以将宿主机的显卡性能部分借给虚拟机使用.
虚拟机设置
在windows虚拟机中我们进入设备管理器中我们可以看到显示适配器中会有感叹号,这说明没有安装驱动,所以我们需要安装驱动才能使用3D加速.
我们需要挂载virtio的驱动盘镜像(在上面已经介绍了下载和挂载方法).然后进去这个cd驱动盘,在根目录下有个virtio-win-gt-x64文件夹,进去后找到virtio-gpu文件夹,然后进去运行virtio-gpu-gt-x64.msi安装驱动,安装完成后重启虚拟机.
宿主机设置
我们需要在虚拟机的设置中进行如下修改:
- 在
显示协议SPICE中,将类型设置为Spice服务器,监听类型设置为无,并勾选OPENGL(G)选项,选择一张有渲染能力的显卡(或核显) - 在
显卡Virtio中,确保类型为Virtio并勾选3D加速选项
然后点确定保存设置,重启虚拟机即可.