1. 项目概述与核心价值
最近在技术社区和论坛里,经常看到有朋友在问一个听起来有点“矛盾”的问题:如何在Ubuntu系统上安装Windows 10?乍一听,这像是要把两个操作系统硬塞进一个身体里,感觉不太可能。但作为一个在Linux和Windows双系统、虚拟机领域折腾了十多年的老玩家,我可以负责任地告诉你,这不仅是真实有效的,而且对于特定场景下的开发者、测试人员和有特殊需求的用户来说,是一个极具价值的解决方案。
这里的“在Ubuntu上安装Windows 10”,核心并非指传统意义上的双系统引导(即Grub菜单选择启动Ubuntu或Windows),那种方式需要分区,且两个系统是平级的。我们讨论的,是在Ubuntu作为宿主操作系统(Host OS)的前提下,创建一个虚拟机(Virtual Machine),然后在虚拟机内部完整地安装并运行一个真实的Windows 10系统。这背后的需求非常实在:你可能是一个深度Linux用户,日常开发、运维都在Ubuntu下完成,效率极高。但偶尔你不得不处理一个仅支持Windows的专业软件(比如某些工业设计、财务或特定行业的客户端),或者需要测试网站在IE/旧版Edge浏览器下的兼容性,又或者需要运行一些没有Linux版本的办公套件。为了这点需求专门重启电脑进入Windows分区,或者准备一台单独的Windows物理机,显然太不划算了。
这时候,一个在Ubuntu内部流畅运行的Windows 10虚拟机就成了最优解。它让你能在Linux的高效环境中,随时呼出一个完整的Windows世界,两者文件共享、网络互通,就像在Ubuntu里开了一个“Windows应用窗口”。实现这一目标的主流技术方案主要有两种:基于内核的虚拟机KVM,以及功能强大的虚拟化软件VirtualBox。本文将聚焦于性能更优、与Linux内核集成度更高的KVM方案,带你从零开始,在Ubuntu 22.04 LTS系统上,一步步搭建并优化出一个“真实有效”且好用的Windows 10虚拟机。整个过程涉及虚拟化检查、软件安装、镜像准备、虚拟机创建、驱动优化以及性能调优,我会把每个环节的原理、踩过的坑和提升体验的技巧都摊开来讲清楚。
2. 核心方案选型:为什么是KVM+QEMU?
面对在Linux上运行虚拟机的需求,我们有几个选择:老牌的VMware Workstation、开源的VirtualBox,以及Linux原生支持的KVM。为什么我强烈推荐KVM(Kernel-based Virtual Machine)呢?这得从它的工作原理和优势说起。
KVM本身并不是一个完整的虚拟机监控程序(Hypervisor),它本质上是Linux内核的一个模块,将Linux内核直接转变为一个裸机管理程序(Type-1 Hypervisor)。当你加载了KVM模块,你的Ubuntu系统内核就具备了直接管理CPU虚拟化扩展(Intel VT-x或AMD-V)的能力,可以创建和运行虚拟机。而QEMU(Quick Emulator)则是一个通用的、开源的机器模拟器和虚拟化器,它负责处理虚拟机的设备模拟(如网卡、声卡、磁盘控制器)和I/O操作。KVM与QEMU的结合,通常被称为KVM-QEMU或QEMU-KVM,形成了这样一个分工:KVM利用硬件加速处理CPU和内存虚拟化,实现接近原生性能;QEMU则负责模拟各种硬件设备。这种架构带来了几个核心优势:
- 性能卓越:由于直接使用CPU的硬件虚拟化扩展,并作为内核模块运行,KVM虚拟机的CPU和内存性能损耗极低,通常能达到物理机95%以上的性能,这对于需要运行大型Windows应用或进行测试的场景至关重要。
- 集成度高:作为内核的一部分,KVM与Linux系统深度集成,资源调度更高效,稳定性也更强。它直接使用Linux内核的调度器、内存管理器和设备驱动程序。
- 开源与免费:KVM和QEMU都是开源软件,完全免费,无需担心许可证问题。与之相比,VMware Workstation功能强大但需要付费。
- 管理工具丰富:虽然KVM底层是命令行,但我们有
virt-manager(一个图形化管理工具)这样优秀的前端,使得创建和管理虚拟机像使用VMware一样直观简单。
当然,VirtualBox也是一个优秀的跨平台开源选择,特别适合新手入门,其用户界面友好,共享文件夹等功能设置简单。但在追求极致性能、更低开销和更深度系统集成的场景下,KVM通常是Linux宿主机的首选。对于我们的目标——在Ubuntu上获得一个“真实有效”且高效的Windows 10环境——KVM方案更能满足要求。
注意:在开始之前,请务必确认你的CPU支持硬件虚拟化。绝大多数近十年的Intel和AMD处理器都支持。你可以在终端运行
egrep -c ‘(vmx|svm)’ /proc/cpuinfo来检查,如果输出大于0,则表示支持。同时,需要在BIOS/UEFI设置中确保虚拟化技术(如Intel VT-x或AMD-V)已启用。
3. 环境准备与核心组件安装
工欲善其事,必先利其器。在Ubuntu上搭建KVM虚拟化环境,需要安装一系列软件包。我们将使用命令行进行安装,这是最直接高效的方式。打开你的终端(Ctrl+Alt+T),我们开始操作。
首先,更新系统的软件包列表,确保我们获取的是最新的软件源信息:
sudo apt update接下来,安装KVM及其相关的必要软件包。这条命令将一次性安装核心组件:
sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst virt-manager让我来解释一下每个包的作用:
- qemu-kvm: 这是QEMU与KVM整合的软件包,是虚拟化的核心引擎。
- libvirt-daemon-system: 提供
libvirtd守护进程,它是一个管理虚拟化平台(如KVM、Xen)的开源API、守护进程和管理工具套件。它相当于虚拟化环境的管理服务端。 - libvirt-clients: 包含连接和管理
libvirtd服务的客户端工具,例如virsh命令行工具。 - bridge-utils: 包含用于配置网络桥接的工具
brctl。桥接网络可以让虚拟机获得一个与宿主机同网段的独立IP,像一台真实设备一样接入局域网,这是最常用的网络模式。 - virtinst: 提供了一组命令行工具(如
virt-install),用于从命令行创建虚拟机。 - virt-manager: 一个基于图形界面的虚拟机管理工具,我们将主要依靠它来进行直观的虚拟机创建和管理。
安装完成后,需要将当前用户添加到必要的用户组,以便无需root权限即可管理虚拟机。通常需要添加libvirt和kvm组:
sudo usermod -aG libvirt $USER sudo usermod -aG kvm $USER添加组后,需要注销并重新登录,或者重启系统,才能使组权限生效。这是很多新手会忽略的一步,导致后续打开virt-manager时权限不足。
验证安装是否成功,可以检查KVM模块是否已加载:
lsmod | grep kvm你应该能看到类似kvm_intel或kvm_amd的模块,表明KVM已就绪。同时,可以启动libvirtd服务并设置开机自启:
sudo systemctl enable --now libvirtd sudo systemctl status libvirtd状态显示为active (running)即表示服务运行正常。
4. 获取与准备Windows 10安装镜像
要安装一个“真实”的Windows 10,你首先需要一个合法的Windows 10安装镜像文件(ISO)。强烈建议从微软官方渠道下载,以确保系统纯净、安全。你可以直接访问微软官方网站的“下载Windows 10光盘映像”页面,使用其媒体创建工具下载最新版的ISO文件。
对于本次安装,我选择的是Windows 10 企业版 LTSC 2021的ISO。LTSC(长期服务频道)版本移除了Edge浏览器、应用商店等现代应用,更新周期更长,系统更精简稳定,非常适合作为虚拟机环境使用,能减少不必要的资源占用和后台更新干扰。当然,你也可以选择专业版或家庭版,步骤完全一致。
下载完成后,建议将ISO文件放在一个易于访问的目录,例如~/Downloads或~/ISO。同时,为了获得最佳的虚拟机性能,特别是图形界面和磁盘I/O,我们还需要一个关键组件:VirtIO驱动。
VirtIO是一套为KVM等虚拟化环境优化的半虚拟化(Paravirtualized)驱动。简单来说,它不像完全虚拟化那样模拟一个真实的硬件设备(如IDE硬盘控制器),而是提供一套高效的、虚拟机与宿主机直接通信的接口,能大幅提升磁盘和网络的性能。Windows系统默认不包含这些驱动,因此我们需要提前下载。
你可以从Fedora项目官方仓库获取最新的VirtIO驱动ISO:
- 访问
https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/ - 下载文件名类似
virtio-win.iso的镜像文件。 - 同样,将此ISO文件与Windows安装镜像放在同一目录备用。
这个驱动ISO将在Windows安装过程中和安装后被加载,用于识别VirtIO磁盘控制器和网卡。
5. 使用virt-manager创建并安装Windows 10虚拟机
所有准备工作就绪,现在可以开始创建我们的Windows 10虚拟机了。我们将使用图形化工具virt-manager,整个过程非常直观。
首先,在应用程序菜单中搜索并打开“Virtual Machine Manager”。首次打开可能会提示你连接虚拟化引擎,默认的QEMU/KVM用户会话即可。如果之前权限设置正确,这里应该能顺利连接。
5.1 创建新虚拟机
- 点击左上角的“创建新虚拟机”按钮(一个电脑屏幕加星星的图标)。
- 本地安装介质:选择第一项“本地安装介质(ISO映像或光盘)”,点击“前进”。
- 选择ISO:点击“浏览”,在弹出的窗口中选择“本地浏览”,找到你存放Windows 10 ISO文件的目录并选中它。
virt-manager通常能自动检测到这是Windows系统,并提示“操作系统类型自动检测为‘Microsoft Windows’,版本为‘Windows 10’”。如果没有,请手动选择。点击“前进”。 - 内存和CPU设置:这是影响虚拟机性能的关键步骤。
- 内存:根据宿主机物理内存大小分配。对于Win10 LTSC,4GB(4096 MiB)是流畅运行的最低要求,建议分配8GB(8192 MiB)以获得更好体验。我的宿主机有32GB内存,因此分配了12GB给虚拟机。
- CPU:分配CPU核心数。建议至少分配2个核心。你可以分配最多不超过宿主机物理核心数的数量。例如,我的CPU是8核16线程,我分配了4个核心给虚拟机。勾选“拓扑”可以设置Socket、Core、Thread的布局,一般保持默认即可。点击“前进”。
- 启用存储:为虚拟机创建磁盘镜像文件。
- 选择“为虚拟机创建磁盘镜像”。
- 大小:Windows 10系统本身需要约20-30GB空间,加上软件和更新,建议至少分配60GB。我分配了100GB,格式选择
qcow2。qcow2是QEMU的一种动态分配格式,它不会立即占用你分配的100GB物理空间,而是随着虚拟机内实际使用量增长而增长,非常节省宿主机磁盘空间。性能虽略低于raw格式,但便利性更佳。 - 点击“前进”。
- 命名虚拟机:给你的虚拟机起个名字,例如“Win10-LTSC-2021”。这一步还可以选择“在安装前自定义配置”的复选框,务必勾选它!因为我们需要修改一些关键配置来加载VirtIO驱动和优化性能。点击“完成”。
5.2 关键硬件自定义配置勾选“自定义配置”后,会进入虚拟机硬件详情页面。在这里,我们需要进行几项至关重要的修改。
5.2.1 修改磁盘总线类型(最关键的一步)在左侧硬件列表中选择“IDE Disk 1”(即你刚才创建的磁盘),在右侧“高级选项”中,将“磁盘总线”从默认的IDE或SATA修改为VirtIO。
- 为什么这么做?默认的IDE或SATA是模拟传统硬件,性能较差。改为VirtIO后,虚拟机将使用半虚拟化磁盘驱动,能带来巨大的磁盘I/O性能提升。但Windows安装程序此时无法识别VirtIO控制器,所以我们需要在安装过程中加载驱动。
5.2.2 添加VirtIO驱动ISO
- 点击左下方“添加硬件”按钮。
- 选择“存储”,设备类型选择“CDROM设备”。
- 点击“浏览”,选择你之前下载的
virtio-win.iso文件。 - 在“总线类型”中,可以选择
IDE或SATA(确保有一个空闲的通道),点击“完成”。现在硬件列表里应该有两个CDROM设备,一个指向Windows安装ISO,一个指向VirtIO驱动ISO。
5.2.3 优化显示协议(提升图形性能)
- 在硬件列表中选择“视频”设备(默认可能是
QXL或VGA)。 - 将“模型”修改为
VirtIO。 - 勾选“3D加速”选项(如果宿主机显卡支持OpenGL,这能显著提升Windows界面的渲染性能)。
- 接着,我们需要添加一个与VirtIO视频配套的显示设备。再次点击“添加硬件”。
- 选择“显示”,将“类型”设置为
Spice server。SPICE是一种专门为虚拟化环境设计的高效远程桌面协议,能提供比传统VNC好得多的图形体验,支持动态分辨率调整、音频传输、USB重定向等。
5.2.4 配置网络(可选桥接)默认的网络配置是“NAT”模式,虚拟机通过宿主机共享IP上网,外部网络无法直接访问虚拟机。如果你需要虚拟机拥有独立的局域网IP(例如搭建一个测试服务器),可以配置桥接网络。
- 在硬件列表中选择“NIC”网络设备。
- 将“设备模型”修改为
virtio,以获得最佳网络性能。 - 要启用桥接,需要先在宿主机上配置一个网桥(例如
br0),这涉及修改Ubuntu的网络配置文件(/etc/netplan/),有一定复杂度。对于大多数只需要上网的场景,保持默认的NAT模式即可,简单且安全。
完成所有配置后,点击左上角“开始安装”。
6. Windows安装过程中的驱动加载与系统配置
虚拟机启动后,会从Windows安装ISO引导,进入熟悉的蓝色Windows安装界面。前面的步骤(语言、区域、密钥输入)按正常流程进行。直到你看到“你想将Windows安装在哪里?”这一步时,关键点来了。
你会发现磁盘列表是空的,提示“未找到任何驱动器”。这是因为我们之前将磁盘总线改为了VirtIO,而Windows安装程序没有内置这个驱动。
- 点击“加载驱动程序”。
- 点击“浏览”,你会看到可移动设备列表。找到并进入代表
virtio-win.iso的光驱(通常是D盘或E盘)。 - 驱动程序位于
virtio-win.iso -> viostor -> w10 -> amd64目录下(如果你的Windows是32位,则选择x86目录)。选择这个目录,点击“确定”。 - 安装程序会扫描并显示“Red Hat VirtIO SCSI controller”驱动,选中它,点击“下一步”。
- 加载成功后,你就能看到之前分配的虚拟磁盘(例如100GB)了。选中它,点击“下一步”开始安装。
接下来的安装过程(复制文件、安装功能、更新)与在物理机上安装Windows无异,等待其完成即可。安装过程中系统可能会重启数次。
首次进入Windows桌面后,你会发现两个问题:屏幕分辨率可能不对,且网络不可用。这是因为显卡和网卡的VirtIO驱动还没装。
- 在虚拟机窗口的菜单栏,点击“视图” -> “详细信息”,可以打开设备管理器。
- 你会发现“其他设备”下有带黄色感叹号的“以太网控制器”和“显示适配器”。
- 再次打开文件资源管理器,进入VirtIO驱动ISO所在的光驱。
- 运行根目录下的
virtio-win-gt-x64.msi(图形化安装程序)或virtio-win-guest-tools.exe。这是一个完整的驱动包安装程序,运行后会自动安装所有必要的VirtIO驱动,包括网卡、显卡、鼠标集成驱动等。 - 安装完成后,按照提示重启虚拟机。
重启后,网络应该能正常连接,显示分辨率也可以正确调整到适合窗口的大小。至此,一个基于KVM、性能经过优化的Windows 10虚拟机就基本安装完成了。
7. 性能优化与集成功能配置
安装好驱动只是第一步,要让这个Windows虚拟机用起来和物理机一样顺手,还需要进行一些优化和功能集成。
7.1 安装SPICE Guest Tools(实现无缝体验)虽然VirtIO驱动提供了基础硬件支持,但要实现宿主机与虚拟机之间更完美的集成,如共享剪贴板、拖放文件、鼠标无缝移动(无需按快捷键捕获/释放),我们需要安装SPICE客户端工具。
- 在
virt-manager中,确保虚拟机已启动。 - 点击菜单栏的“虚拟机” -> “插入光盘映像”,选择你宿主机上的
virtio-win.iso文件(如果之前已连接,此步可省略)。 - 在Windows虚拟机内,打开VirtIO驱动ISO,找到并运行
spice-guest-tools目录下的安装程序(例如spice-guest-tools-*.exe)。 - 安装完成后重启虚拟机。之后,你的鼠标可以在宿主机和虚拟机窗口间自由移动,剪贴板也可以互通,极大提升了操作便利性。
7.2 配置共享文件夹虽然可以通过网络共享文件,但配置一个直接的共享文件夹更方便。KVM本身不直接提供类似VirtualBox的“共享文件夹”功能,但可以通过多种方式实现:
- Samba网络共享:在Ubuntu宿主机上设置一个Samba共享目录,然后在Windows中通过“
\\Ubuntu主机IP\共享名”来访问。这是最通用、跨平台的方法。 - 使用virtio-fs(推荐,性能更好):这是较新的特性,需要较新的QEMU和Windows驱动支持。它通过一个特殊的文件系统驱动,在宿主机和虚拟机之间提供高性能的文件共享。配置相对复杂,需要在虚拟机XML配置中添加相关设备。对于新手,可以先使用Samba方式。
7.3 调整虚拟机CPU与内存参数安装完所有工具后,可以根据实际使用情况,在虚拟机关机状态下,通过virt-manager的“详细信息”视图,进一步调整硬件配置:
- CPU模式:将CPU的“配置”模式从默认的
host-passthrough(直接透传宿主机CPU型号)改为host-model,这能提供更好的兼容性,同时保留大部分性能特性。 - 内存气球(Ballooning):可以启用内存气球驱动(在VirtIO驱动包中已安装),它允许宿主机在内存紧张时,从虚拟机回收部分未使用的内存,动态调整虚拟机内存大小,提高宿主机内存利用率。
7.4 创建快照与备份在虚拟机配置稳定、安装好常用软件后,强烈建议创建一个“干净”状态的快照。virt-manager提供了快照功能。点击“查看” -> “快照”,可以创建、恢复或删除快照。这相当于一个系统还原点,未来如果虚拟机系统被玩坏或中病毒,可以一键恢复到健康状态,省去重装的麻烦。
8. 常见问题排查与实战技巧
在实际操作中,你可能会遇到一些棘手的问题。这里我总结了一些常见的“坑”和解决方法。
8.1 安装时找不到磁盘驱动器
- 问题:在Windows安装界面点击“加载驱动程序”后,浏览VirtIO ISO时看不到任何驱动。
- 原因:可能进入了错误的目录。VirtIO驱动ISO结构较复杂,磁盘控制器驱动(viostor)和网卡驱动(NetKVM)等是分开的。
- 解决:确保浏览的路径是
[光驱]:\viostor\[你的Windows版本]\amd64\。对于Windows 10,通常是w10或2k16目录下的amd64。
8.2 虚拟机启动黑屏或卡住
- 问题:点击启动后,虚拟机窗口黑屏,无任何反应。
- 排查:
- 检查宿主机是否启用了虚拟化支持(BIOS/UEFI设置)。
- 检查
libvirtd服务状态是否正常 (sudo systemctl status libvirtd)。 - 在
virt-manager中打开虚拟机的“控制台”视图(点击“查看”->“控制台”),看是否有错误信息输出。 - 尝试将“固件”从UEFI改为BIOS(或反之)。在虚拟机硬件详情中,找到“引导选项”,修改“固件”。有些Windows镜像对引导方式有要求。
- 检查CPU和内存分配是否超出了宿主机的物理限制。
8.3 SPICE功能(剪贴板共享、鼠标集成)失效
- 问题:安装了SPICE Guest Tools,但剪贴板无法共享,鼠标仍需捕获。
- 排查:
- 确保虚拟机使用的是
Spice server显示协议和VirtIO视频模型。 - 在
virt-manager中,检查虚拟机的“通道”设备。应该有一个名为com.redhat.spice.0的通道,其“目标类型”为virtio,“目标名称”为com.redhat.spice.0。这是SPICE通信的通道,必须存在。 - 在Windows设备管理器中,检查“系统设备”下是否有“VirtIO Serial Controller”且驱动正常。
- 尝试在
virt-manager的“显示 Spice”设置中,取消再重新勾选“启用剪贴板共享”和“启用文件传输”。
- 确保虚拟机使用的是
8.4 虚拟机内网络速度慢
- 问题:虚拟机可以上网,但下载速度远低于宿主机。
- 解决:
- 确认网卡设备模型是
virtio。 - 尝试修改网络源模式。默认的NAT模式会经过一层转换。可以尝试改为“桥接”模式,让虚拟机直接获取局域网IP,通常能获得更好的网络性能(但需要配置宿主机网桥)。
- 在Windows虚拟机内,打开VirtIO网卡属性(设备管理器->网络适配器->右键属性),在“高级”选项卡中,可以尝试禁用一些省电或节能选项。
- 确认网卡设备模型是
8.5 磁盘空间回收
- 问题:虚拟机内删除了大量文件,但宿主机上的qcow2镜像文件大小没有减小。
- 原因:qcow2是稀疏文件,删除文件只在虚拟机内部标记空间可用,但不会自动将空白空间释放回宿主机文件系统。
- 解决:需要在虚拟机内部进行“碎片整理和压缩”,并在宿主机上执行镜像优化。
- 在Windows虚拟机内,下载并运行微软的
sdelete工具(Sysinternals Suite的一部分),以管理员身份运行sdelete -z C:(C盘是系统盘),这将用零填充所有空闲空间。 - 关闭虚拟机。
- 在宿主机终端,使用
qemu-img工具压缩镜像:qemu-img convert -O qcow2 original.qcow2 compressed.qcow2。这会产生一个新的、经过优化的镜像文件,用其替换原文件即可。
- 在Windows虚拟机内,下载并运行微软的
经过以上步骤,你应该得到了一个运行在Ubuntu系统上、性能出色、功能完整的Windows 10虚拟机。它不再是那个笨重、卡顿的模拟环境,而是一个可以随时调用、用于解决特定Windows需求的得力工具。无论是临时处理一个文档,还是运行一个不可或缺的Windows专属软件,这个方案都提供了一种优雅且高效的解决路径。