多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

Windows Hyper-V虚拟化实战:从零搭建Linux/Windows虚拟机环境

Windows Hyper-V虚拟化实战:从零搭建Linux/Windows虚拟机环境 1. 从“为什么”开始Hyper-V在Windows虚拟化中的定位如果你在Windows上折腾过虚拟机大概率用过VMware Workstation或者VirtualBox。它们确实好用但有没有遇到过性能瓶颈或者感觉资源占用有点高尤其是在运行一些对I/O或内存要求苛刻的Linux发行版时。我最初也是VMware的忠实用户直到有一次需要在本地搭建一个接近生产环境的Kubernetes集群VMware下的网络桥接和磁盘性能让我有点头疼。后来我把目光转向了Windows自带的Hyper-V。Hyper-V不是“另一个虚拟机软件”它是微软从Windows Server 2008开始引入的Type-1裸机虚拟化技术。这和我们熟悉的VMware WorkstationType-2寄居架构有本质区别。简单来说Type-1的Hyper-V启动后Windows自身就变成了一个运行在Hyper-V之上的“特权虚拟机”称为父分区而你的其他虚拟机子分区和Windows是平级的直接由Hyper-V层调度硬件资源。这种架构带来的直接好处是更低的虚拟化开销和更高的性能特别是磁盘I/O和网络吞吐量。对于需要运行Linux服务器、做开发测试、甚至学习容器技术Docker Desktop for Windows的WSL2后端就是Hyper-V的场景Hyper-V是一个被严重低估的利器。很多人尤其是使用Windows家庭版的用户会下意识认为Hyper-V与自己无关。这其实是个误区。从Windows 10开始家庭版同样内置了Hyper-V组件只是默认没有开启。开启它意味着你获得了一个由操作系统原生支持、性能强劲且完全免费的虚拟化平台。接下来我会手把手带你完成从环境检查、功能开启到安装Windows/Linux虚拟机的全过程并分享一些从VMware迁移过来时容易踩的坑和性能调优技巧。2. 环境准备与Hyper-V功能开启不只是勾选复选框开启Hyper-V听起来简单但如果不满足前置条件你会遇到各种奇怪的错误。这一步的核心是确保你的硬件和系统都准备好了。2.1 硬性条件检查SLAT与虚拟化支持首先你的CPU必须支持两个关键特性Intel VT-x或AMD-V硬件虚拟化以及SLATSecond Level Address Translation如Intel的EPT或AMD的RVI。SLAT对于现代虚拟化性能至关重要。如何检查以管理员身份打开命令提示符CMD或PowerShell运行systeminfo滚动到输出底部查看“Hyper-V要求”部分。你会看到类似这样的信息Hyper-V 要求 虚拟机监视器模式扩展: 是 固件中已启用虚拟化: 是 二级地址转换: 是 数据执行保护可用: 是如果前三项都是“是”那么恭喜你的硬件完全支持。如果“固件中已启用虚拟化”是“否”你需要进入电脑的BIOS/UEFI设置开机时按Del、F2、F10等键因品牌而异找到“Virtualization Technology”Intel或“SVM Mode”AMD的选项将其设置为Enabled。这个选项通常在“Advanced”或“CPU Configuration”菜单下。注意开启BIOS中的虚拟化支持后某些基于VirtualBox或旧版Android模拟器的软件可能会无法启动因为它们可能与Hyper-V抢占硬件虚拟化资源。这是正常现象通常有解决方案如使用Hyper-V版本的Android模拟器。2.2 开启Hyper-V功能图形界面与命令行的选择满足硬件条件后就可以开启功能了。这里有两个方法我推荐使用PowerShell因为它更清晰、不易出错。方法一通过“启用或关闭Windows功能”图形界面在开始菜单搜索“启用或关闭Windows功能”打开它。在列表中找到“Hyper-V”。勾选这个复选框它会自动勾选其下的“Hyper-V管理工具”和“Hyper-V平台”。点击“确定”Windows会自动安装所需文件然后要求你重启电脑。方法二通过PowerShell管理员权限这是我最常用的方法尤其适合批量操作或写脚本。Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All运行后同样需要重启。你可以用以下命令检查是否安装成功Get-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V如果“State”显示为“Enabled”即表示成功。这里有一个关键细节安装完成后你会在开始菜单看到“Hyper-V管理器”和“Hyper-V快速创建”。前者是完整的管理控制台后者是微软提供的简化版创建工具适合快速部署几个特定的系统镜像如Ubuntu Windows 10开发环境。对于自定义安装我们主要使用“Hyper-V管理器”。2.3 处理兼容性问题与VMware、VirtualBox的共存这是最常被问到的问题。理论上同为Type-2的VMware Workstation和VirtualBox无法与Type-1的Hyper-V同时运行因为它们都需要独占硬件虚拟化功能。从Windows 10 20H1和Windows 11开始微软引入了“Windows Hypervisor Platform”WHP接口。如果你需要同时使用VMware/VirtualBox和Hyper-V在“启用或关闭Windows功能”中除了“Hyper-V”请务必也勾选“Windows Hypervisor Platform”。这样VMware Workstation 15.5 和 VirtualBox 6.0 就可以运行在“Hyper-V兼容模式”下。但请注意这种模式下VMware/VirtualBox的虚拟机性能会有所下降因为它们实际上运行在Hyper-V之上。如果你只想用Hyper-V确保不开启WHP并完全卸载VMware/VirtualBox以避免驱动冲突。安装VMware时提示“启用了Hyper-V”这就是检测到了冲突。你必须做出选择要么关闭Hyper-V功能以管理员身份运行PowerShellbcdedit /set hypervisorlaunchtype off并重启然后安装VMware要么开启上述的WHP功能让VMware以兼容模式安装。我的建议是如果不是特别依赖VMware的某些特定快照或克隆功能可以尝试全面转向Hyper-V其性能和与Windows的集成度会给你带来惊喜。3. 创建你的第一个虚拟机以Ubuntu Linux为例重启后我们以创建一个Ubuntu 22.04 LTS虚拟机为例讲解Hyper-V管理器的核心操作。你可以从Ubuntu官网下载ISO镜像文件。3.1 虚拟交换机打通虚拟机的网络世界在创建虚拟机之前必须先配置网络。这是Hyper-V设计上比较严谨的一点。打开Hyper-V管理器在右侧“操作”面板下点击“虚拟交换机管理器”。你会看到三种类型的虚拟交换机外部绑定到一个物理网卡虚拟机就像一台真实电脑一样接入你的物理局域网会从你的路由器获取IP地址。性能最好最常用。内部创建一个仅主机Host和虚拟机之间可以通信的虚拟网络。虚拟机无法访问外网。专用仅虚拟机之间可以通信与主机隔离。对于需要上网的Ubuntu我们创建“外部”交换机。选择“创建虚拟交换机” - “外部” - “创建虚拟交换机”。给它起个名字比如“External Switch”。在“外部网络”下拉列表中选择你正在上网的那个物理网卡比如“Intel(R) Wi-Fi 6 AX201”。这里有个大坑如果你选择了错误的网卡例如一个不用的以太网卡主机可能会断网。务必确认你选的是当前正在活动的网卡。勾选“允许管理操作系统共享此网络适配器”。这个必须勾选否则主机自己就无法通过这个网卡上网了。点击“应用”或“确定”。3.2 新建虚拟机向导参数设置的学问现在开始创建虚拟机。在Hyper-V管理器右侧点击“新建” - “虚拟机”。指定名称和位置名称随意。“将虚拟机存储在其他位置”我强烈建议你修改。默认路径是C盘虚拟机硬盘文件VHDX会很大。最好指定到一个空间充足的硬盘分区如D:\Hyper-V\VMs\Ubuntu2204。指定代数选择“第二代”。第二代虚拟机支持UEFI固件、安全启动、更快的启动时间以及SCSI引导对现代操作系统Windows 8/Linux内核较新版本支持更好。除非你要安装非常古老的系统如XP否则无脑选第二代。分配内存建议至少2048 MB2GB。对于桌面版Ubuntu4GB4096 MB会更流畅。这里可以勾选“为此虚拟机使用动态内存”。这是一个Hyper-V的神级功能虚拟机会根据负载动态调整内存用量初始值可以设小点如1024 MB最大内存设大点如4096 MB。这能极大提高主机内存的利用率。配置网络在下拉列表中选择我们刚才创建的“External Switch”。连接虚拟硬盘选择“创建虚拟硬盘”。名称和位置会自动生成你也可以改。大小默认127GB对于Ubuntu桌面版可能有点紧张我建议调到80 GB。类型保持“VHDX”它比旧的VHD格式支持更大容量64TB、有防断电损坏机制性能也更好。安装选项选择“从可启动的映像文件安装操作系统”点击“浏览”找到你下载的Ubuntu 22.04 ISO文件。完成创建。3.3 首次启动与系统安装在Hyper-V管理器里右键点击新建的虚拟机选择“连接”。会打开一个虚拟机连接窗口。点击“启动”。虚拟机会从ISO镜像启动进入Ubuntu安装界面。安装过程与在物理机上几乎无异。但有几点需要注意集成服务安装完成后在Ubuntu内你需要安装“Linux Integration Services (LIS)”或称为“Hyper-V增强会话模式支持”。对于Ubuntu这些驱动通常已经包含在主流内核中。但为了获得最好的性能如鼠标无缝移动、剪贴板共享、动态分辨率调整你可以在Ubuntu终端里安装sudo apt install linux-tools-virtual linux-cloud-tools-virtual。安装后重启虚拟机。增强会话模式在虚拟机连接窗口的“查看”菜单中点击“增强会话”。如果驱动安装正确这会让你像使用远程桌面一样连接虚拟机窗口可以自由缩放并且可以在主机和虚拟机之间直接复制粘贴文件、文字。这是Hyper-V相比VMware的一个特色便捷功能。检查网络安装时如果选择了“外部交换机”Ubuntu应该能直接通过DHCP获取到IP并上网。安装完成后在终端里运行ip a或ping baidu.com测试一下。4. 安装Windows虚拟机与高级配置安装Windows虚拟机比如Windows 11的流程与Linux类似但有一些特殊配置点。4.1 创建Windows 11虚拟机步骤与创建Ubuntu虚拟机基本一致。在“安装选项”处选择Windows 11的ISO镜像。分配内存建议至少4GB4096 MB如果跑得动8GB更佳。虚拟硬盘建议100 GB起步类型同样是VHDX。启动安装过程与物理机无异。安装完成后Windows虚拟机会自动识别Hyper-V环境并加载集成服务你无需手动安装。鼠标集成、时间同步、心跳检测等功能会立即生效。4.2 关键性能优化设置虚拟机创建好后右键选择“设置”进入配置界面。这里有几个提升体验的关键设置处理器虚拟处理器数量不要贪多。分配给虚拟机的核心数不应超过物理核心数不是线程数。例如你的CPU是6核12线程分配给虚拟机4个虚拟处理器是比较合理的。分配过多会导致主机和虚拟机调度混乱反而降低性能。勾选“兼容性”下的“迁移到具有不同处理器版本的物理计算机”如果你将来可能把这台虚拟机导出并在另一台不同型号CPU的电脑上导入请勾选此选项。但它会禁用一些CPU特性可能轻微影响性能。仅在需要迁移时勾选。内存强烈建议启用“动态内存”。将“启动RAM”设置为一个较低值如2048 MB将“最大RAM”设置为你愿意分配给它的上限如8192 MB。这样虚拟机空闲时不会霸占内存。SCSI控制器默认会有一个SCSI控制器虚拟硬盘挂载在上面。你可以点击“SCSI控制器”然后“添加硬盘驱动器”来挂载额外的VHDX文件。SCSI控制器在Hyper-V第二代虚拟机中是性能最好的磁盘控制器。自动启动操作如果你希望这个虚拟机在主机开机后自动启动可以在这里设置。但一般不建议除非是作为服务器用途。4.3 虚拟硬盘管理动态扩展与压缩创建虚拟机时选择的VHDX文件是“动态扩展”的。这意味着你虽然设置了80GB但实际文件大小会根据虚拟机内已使用的空间增长而不是立刻占用80GB物理空间。手动压缩如果虚拟机内删除了大量文件VHDX文件不会自动缩小。你需要在虚拟机关机状态下在“设置”-“硬盘驱动器”中选择该VHDX然后点击“编辑”-“压缩”。这个过程可能需要一些时间。转换为固定大小如果你追求极致的磁盘性能减少动态扩展的开销可以将动态磁盘“转换”为固定大小的磁盘。但转换后文件会立刻膨胀到最大容量且不可逆。对于开发测试环境动态扩展的便利性远大于那微乎其微的性能差异我推荐保持动态扩展。5. 网络、快照与日常管理技巧5.1 复杂的网络场景配置除了简单的“外部交换机”你可能会需要更复杂的网络NAT网络让虚拟机可以访问外网但外网无法直接访问虚拟机。Hyper-V默认没有提供图形化创建NAT网络的方法。你需要用PowerShell创建# 创建一个名为‘NATSwitch’的内部交换机 New-VMSwitch -SwitchName NATSwitch -SwitchType Internal # 获取刚创建交换机的接口索引 $ifindex (Get-NetAdapter | Where-Object {$_.Name -like *NATSwitch*}).ifIndex # 给这个接口配置一个IP地址这里是网关地址 New-NetIPAddress -IPAddress 192.168.100.1 -PrefixLength 24 -InterfaceIndex $ifindex # 创建NAT网络指定网段 New-NetNat -Name NATNetwork -InternalIPInterfaceAddressPrefix 192.168.100.0/24之后创建虚拟机时网络选择“NATSwitch”即可。虚拟机需要手动设置静态IP如192.168.100.10网关192.168.100.1DNS 114.114.114.114或通过DHCP需要额外配置来上网。多网卡隔离你可以给一个虚拟机添加多个网络适配器分别连接到不同的虚拟交换机如一个连外部一个连内部实现复杂的网络拓扑用于模拟多网卡服务器或网络隔离测试。5.2 检查点快照的使用与陷阱Hyper-V中的快照叫做“检查点”。它非常强大可以瞬间保存虚拟机的完整状态。创建在虚拟机运行或关闭时右键选择“检查点”即可。恢复在检查点列表里右键任意一个检查点选择“应用”。虚拟机会立刻回到那个时间点的状态。生产检查点保存内存状态和磁盘状态恢复后和暂停再继续一样。标准检查点使用卷影复制服务VSS创建数据一致的磁盘状态点不保存内存对于不支持VSS的Linux相当于关机后创建磁盘快照。重要警告检查点不是备份它本质上是差分磁盘链。如果你有一个基础VHDX创建检查点后后续的修改会写入到一个新的AVHDX差分文件中。长期保留大量检查点会导致磁盘链过长严重影响性能并且如果基础VHDX损坏整个链都可能失效。最佳实践是仅在重大变更如安装软件、更新系统前创建检查点测试无误后尽快将其“删除检查点子树”以合并更改。对于需要长期保存的状态请使用“导出”功能。5.3 导入与导出虚拟机的迁移与备份这是Hyper-V最实用的功能之一。导出关闭虚拟机右键选择“导出”。指定一个路径Hyper-V会将虚拟机的配置、硬盘文件、检查点全部打包到一个文件夹中。这是最可靠的备份方式。导入在Hyper-V管理器右侧点击“导入虚拟机”选择导出时生成的文件夹。导入时如果检测到已有同名虚拟机可以选择“复制”或“就地注册”。“复制”会更安全它会复制一份虚拟硬盘文件不影响原备份。当你需要更换电脑或者想把虚拟机复制给同事时导出/导入功能是无价之宝。6. 常见问题排查与性能调优实战即使按照步骤操作也难免会遇到问题。这里分享几个我踩过的坑和解决方案。6.1 虚拟机无法启动或启动报错错误 “无法初始化虚拟机 ‘XXX’ 的内存因为内存管理器无法为虚拟机保留足够的内存。”原因主机物理内存不足无法满足虚拟机设置的“启动内存”或“动态内存”的最小需求。解决关闭一些主机上的大型程序或者减少虚拟机的内存分配。检查是否启用了动态内存并确保“启动RAM”设置得合理不要太大。错误 “虚拟机监控程序未运行。”原因这是最经典的错误。意味着Hyper-V平台虽然安装了但底层的Hypervisor虚拟机监控程序没有启动。解决首先确认BIOS中的虚拟化支持已开启见2.1节。以管理员身份运行CMD或PowerShell输入bcdedit查看输出。找到hypervisorlaunchtype这一行。它应该是Auto。如果是Off运行bcdedit /set hypervisorlaunchtype auto然后重启。某些安全软件如某些国产杀毒软件的“核晶防护”功能或“内核隔离”中的“内存完整性”功能可能会与Hyper-V冲突。尝试暂时关闭它们再试。6.2 网络连接问题虚拟机无法上网使用外部交换机检查虚拟机的网络适配器是否连接到了正确的“外部交换机”。在主机上打开“网络连接”ncpa.cpl你应该能看到一个以“vEthernet (你的交换机名)”命名的适配器。检查它的状态和IP地址。它应该能从你的路由器正常获取IP通常是192.168.x.x。在虚拟机内检查IP地址。如果是Linux运行ip a如果是Windows运行ipconfig。它获取的IP应该和主机在同一个网段例如都是192.168.1.x。如果不是尝试在虚拟机内重启网络服务sudo systemctl restart systemd-networkdfor Linux或释放续约IPipconfig /release ipconfig /renewfor Windows。主机和虚拟机无法互相ping通使用内部/专用交换机确保主机和虚拟机的防火墙没有阻止ICMPping请求。可以暂时关闭防火墙测试。检查两者是否在同一IP网段。例如如果你手动设置了内部交换机的IP为192.168.100.1那么虚拟机应该设置为192.168.100.x。6.3 磁盘与性能调优虚拟机磁盘I/O慢检查磁盘类型确保使用的是VHDX格式而不是旧的VHD。检查磁盘控制器对于第二代虚拟机确保虚拟硬盘连接在SCSI控制器上而不是IDE控制器上。SCSI性能远优于IDE。主机磁盘瓶颈如果虚拟机磁盘文件放在机械硬盘HDD上性能肯定不如固态硬盘SSD。尽量将VHDX文件放在SSD上。启用写入缓存在虚拟机设置的“硬盘驱动器”中选择VHDX文件点击“高级功能”可以尝试勾选“启用写入缓存”。这能提升写入性能但突然断电有微小风险丢失数据。对于开发测试机可以开启。CPU占用过高检查是否给虚拟机分配了过多的虚拟处理器。遵循“不超过物理核心数”的原则。在虚拟机设置中可以尝试调整“资源控制”下的“虚拟机保留百分比”和“相对权重”来调整CPU资源的分配优先级。经过以上步骤你应该已经成功在Windows上搭建起了一个高效、稳定的Hyper-V虚拟化环境。从我的使用经验来看一旦熟悉了它的逻辑和操作Hyper-V在资源管理、性能以及与Windows生态的集成上对于Windows用户而言往往是比第三方软件更“原生”和舒适的选择。特别是对于需要长期运行Linux服务、进行网络实验或容器开发的场景Hyper-V提供的稳定性和性能基础是非常扎实的。刚开始从VMware切换过来可能会有些不习惯但多操作几次尤其是善用PowerShell进行批量管理后你会发现它的强大和便捷。
返回列表