1. 项目缘起:为什么在Win10上选择Hyper-V装Ubuntu?
如果你手头有一台Windows 10的电脑,又想体验Linux,或者需要一个稳定的开发、测试环境,装虚拟机几乎是绕不开的路。市面上虚拟机软件不少,VMware Workstation和VirtualBox名气都很大,功能也强。但很多人可能没意识到,Windows 10专业版、企业版和教育版其实自带了一个相当不错的虚拟化平台——Hyper-V。它不像第三方软件那样需要额外下载安装,作为系统组件,与Windows的集成度更高,性能开销理论上也更小。对于只是想跑个Ubuntu做开发、学习,或者搭建个本地服务的人来说,用Hyper-V完全足够,还省去了找破解密钥或者处理兼容性问题的麻烦。
我这次选择在Win10上用Hyper-V安装Ubuntu 20.04 LTS,主要就是看中了它的“原生”和“轻量”。Ubuntu 20.04 LTS是一个长期支持版本,系统稳定,软件生态成熟,很多教程和软件包都以其为基准,作为入门或生产环境都很合适。整个过程,从开启Hyper-V功能,到创建虚拟机、安装系统、配置基础环境,我会把每一步的操作意图、背后的原理,以及我踩过的那些坑,都详细记录下来。这不是一篇照搬官方文档的教程,而是一个真实用户从零到一的实操复盘,你会看到哪些步骤可以优化,哪些设置需要特别注意,以及如何让这个虚拟机用起来更顺手。
2. Hyper-V的启用与核心概念扫盲
在动手之前,我们得先确保你的Win10能跑Hyper-V,并且理解几个关键概念,这能帮你避开后面很多莫名其妙的错误。
2.1 确认系统资格与开启功能
首先,Hyper-V不是所有Win10版本都有的。它需要Windows 10专业版、企业版或教育版。家庭版默认没有,虽然网上有通过脚本强行开启的方法,但不稳定且可能失去系统更新支持,不推荐。你可以通过在搜索框输入“winver”并回车,来查看你的Windows版本。
确认版本符合后,我们需要开启这个功能。Hyper-V是一个Windows功能,默认是关闭的。打开它的方法很简单:
- 在桌面左下角的搜索框输入“启用或关闭Windows功能”,并打开这个控制面板项。
- 在弹出的窗口列表中,找到“Hyper-V”。勾选它。注意,勾选它时,其下的“Hyper-V管理工具”和“Hyper-V平台”会自动被选中。
- 点击“确定”,系统会开始安装所需的文件,完成后会提示你重启计算机。
注意:开启Hyper-V后,你的电脑会从传统的“宿主操作系统”模式,切换到一个叫做“Hypervisor”的底层管理模式。这意味着像VMware Workstation、VirtualBox这类基于软件的“托管型”虚拟机将无法与Hyper-V同时运行。如果你还需要用它们,就得先关闭Hyper-V功能并重启。这是一个二选一的问题。
2.2 理解Hyper-V的两种虚拟网络
网络配置是Hyper-V新手最容易懵的地方。Hyper-V提供了几种虚拟交换机类型,我们主要关心两种:
外部虚拟交换机:这种交换机会绑定到你物理机的一块真实网卡(比如你的Wi-Fi或以太网卡)。虚拟机通过它,会像一台真实的、插在你家路由器上的新电脑一样,从你的路由器DHCP服务器获取一个同网段的IP地址。虚拟机可以和宿主机、局域网内其他设备、乃至互联网自由通信。这是最常用、最省心的模式,相当于给虚拟机分配了一个独立的“身份证”接入你的家庭或公司网络。
内部虚拟交换机:这种交换机只在宿主机和所有连接它的虚拟机之间创建一个私有网络。虚拟机之间可以互通,虚拟机也能和宿主机通信,但虚拟机无法访问外部网络(互联网)。这适合构建一个纯内网的测试环境。
专用虚拟交换机:只用于连接多个虚拟机之间,虚拟机之间可互通,但既不能连宿主机,也不能连外网。用得比较少。
对于安装Ubuntu并希望它能上网、能更新软件、能远程连接的场景,我们毫无疑问要选择创建外部虚拟交换机。这里有个关键点:创建外部虚拟交换机时,Hyper-V会为宿主机创建一个新的“虚拟网卡”,并将物理网卡的连接共享给它。此时,你物理机的网络连接里会多出一个“vEthernet (交换机名称)”的适配器,而原来的物理网卡会显示“已共享”。这是正常现象,不用担心。
2.3 虚拟硬盘格式:VHDX的优势
在创建虚拟机时,我们需要为Ubuntu系统创建虚拟硬盘。Hyper-V默认(也推荐)使用VHDX格式,而不是更老的VHD格式。
- 容量:VHDX支持最大64TB的虚拟硬盘,而VHD只有2TB。
- 性能:VHDX格式在结构上做了优化,对大文件读写、4KB对齐支持更好,能减少性能损耗,特别是在动态扩展磁盘时。
- 数据保护:VHDX内置了日志功能,能在主机意外断电或崩溃时,更好地保护虚拟硬盘数据不被损坏。
所以,除非有特殊的兼容性要求(比如要兼容旧版Windows),否则一律选择VHDX格式。在创建时,我们通常会选择“动态扩展”的磁盘,这意味着你分配一个最大容量(比如50GB),但实际文件(.vhdx)最初只占用很少空间(可能只有几MB),随着虚拟机内数据的增加而慢慢长大,直到达到你设置的最大值。这能节省宿主机的物理磁盘空间。
3. 步步为营:创建Hyper-V虚拟机与安装Ubuntu
理论准备就绪,现在开始动手。我们将严格按照流程操作,并解释每一步的意图。
3.1 创建外部虚拟交换机
首先打开“Hyper-V管理器”(可以在开始菜单搜索找到)。在管理器右侧的“操作”面板,点击“虚拟交换机管理器”。
- 在“创建虚拟交换机”界面,选择“外部”网络类型,然后点击“创建虚拟交换机”。
- 给这个交换机起个名字,比如“ExternalSwitch”。
- 在“外部网络”下拉菜单中,选择你物理机正在使用的、可以上网的那块网卡(通常名称里带有“Wi-Fi”或“Realtek”等字样)。
- 务必勾选“允许管理操作系统共享此网络适配器”。这个选项就是我们前面说的,让宿主机也能通过这个虚拟交换机上网的关键。不勾选的话,宿主机可能会断网。
- 点击“应用”或“确定”完成创建。系统可能会提示网络中断几秒钟,这是正常的。
3.2 新建虚拟机并配置核心参数
回到Hyper-V管理器,在右侧“操作”面板点击“新建” -> “虚拟机”。
- 指定名称和位置:给虚拟机起个名字,如“Ubuntu20.04”。位置建议选择一个剩余空间较大的非系统盘路径(如
D:\Hyper-V\),这样系统盘不会因为虚拟机文件变大而空间紧张。 - 指定代数:选择“第二代”。第二代虚拟机支持UEFI固件、安全启动、更快的启动速度,并且对Linux发行版的支持更好。除非你有非常古老的系统要安装,否则无脑选第二代。
- 分配内存:为Ubuntu分配内存。对于桌面版Ubuntu 20.04,至少分配2048 MB(2GB),如果宿主机内存充裕(比如16GB以上),分配4096 MB(4GB)会获得更流畅的体验。这里可以勾选“为此虚拟机使用动态内存”,让Hyper-V根据虚拟机负载自动调整内存用量,更灵活。
- 配置网络:在网络连接处,选择我们刚才创建的“ExternalSwitch”。
- 连接虚拟硬盘:选择“创建虚拟硬盘”,名称默认即可,位置建议放在刚才的虚拟机文件夹里。大小设置为50GB左右比较合适,既能满足基本使用和安装一些开发工具,又不会过度占用宿主机空间。类型选择“VHDX”,格式选择“动态扩展”。
- 安装选项:这是关键一步。在“安装选项”页面,选择“从可启动的CD/DVD-ROM安装操作系统”,然后点选“映像文件(.iso)”,通过“浏览”按钮找到你提前下载好的Ubuntu 20.04 LTS桌面版ISO镜像文件。这一步相当于把ISO文件插入虚拟机的光驱。
- 点击“完成”,虚拟机就创建好了。
3.3 安装Ubuntu 20.04系统
在Hyper-V管理器中,右键点击新建的“Ubuntu20.04”虚拟机,选择“连接”。然后在连接窗口点击“启动”。
- 启动与引导:虚拟机会从我们“插入”的ISO镜像启动,进入Ubuntu的安装界面。选择“Try Ubuntu”或“Install Ubuntu”都可以,我们直接安装。
- 语言与键盘:选择简体中文,键盘布局选择“Chinese”。
- 更新与其他软件:这里有个重要选择。我建议在安装时不要勾选“安装Ubuntu时下载更新”和“安装第三方显卡和Wi-Fi驱动”。原因有两点:第一,在安装过程中下载更新会极大拖慢安装速度,而且依赖网络环境,一旦网络不稳可能导致安装失败。第二,第三方驱动(尤其是闭源的NVIDIA驱动)在虚拟机环境下通常不需要,而且可能引发兼容性问题。这些都可以在系统安装完成后,在稳定的网络环境下慢慢做。
- 安装类型:选择“清除整个磁盘并安装Ubuntu”。不用担心,这里清除的是我们上一步创建的、空的50GB虚拟硬盘(VHDX文件),不会影响你的宿主机物理磁盘。这是最省心的方式。
- 时区与用户:在地图上点击上海(或你的位置)设置时区。然后设置你的用户名、计算机名和密码。记住这个密码,它是你后续使用
sudo执行管理员命令的凭证。 - 等待安装:点击“继续”,系统开始安装。这个过程大概需要10-20分钟,取决于你的硬盘速度。
- 安装完成:安装结束后,会提示你重启。点击“现在重启”,虚拟机可能会提示你“请移除安装介质,然后按回车”。此时,我们需要在Hyper-V连接窗口的菜单栏,点击“媒体” -> “DVD驱动器” -> “弹出”。然后按回车键,虚拟机就会从新安装好的虚拟硬盘启动,进入Ubuntu系统。
4. 安装后的必做优化与基础配置
系统装好了,但默认状态用起来可能不太顺手。接下来这几步优化,能让你的Ubuntu虚拟机生产力倍增。
4.1 安装Hyper-V集成服务(Linux集成服务)
这是提升虚拟机体验最关键的一步。集成服务是一组驱动和工具,安装了它,虚拟机才能获得以下核心能力:
- 鼠标无缝移动:可以在宿主机和虚拟机窗口之间自由移动鼠标,无需按
Ctrl+Alt+左箭头释放。 - 时间同步:虚拟机时间会与宿主机保持同步。
- 心跳检测:宿主机能感知虚拟机的运行状态。
- 文件共享:为后续的可选功能(如SMB共享)提供基础。
在Ubuntu中安装非常简单。首先启动虚拟机并登录系统,打开终端(快捷键Ctrl+Alt+T)。
- 更新软件包列表:
sudo apt update - 安装Hyper-V集成服务包:
sudo apt install -y linux-azure或者sudo apt install -y linux-virtual linux-cloud-tools-virtual linux-tools-virtual。对于较新的Hyper-V和Ubuntu 20.04,安装linux-azure内核及相关工具通常是推荐做法,因为它包含了针对Azure(底层也是Hyper-V)优化的驱动。 - 安装完成后,必须重启虚拟机以使驱动生效:
sudo reboot
重启后,你应该能立即感受到鼠标可以在宿主机和虚拟机窗口间无缝切换了。
4.2 配置屏幕分辨率与增强会话模式(可选但推荐)
默认情况下,Hyper-V连接窗口(VMConnect)提供的显示体验比较基础,分辨率可能固定,也不支持调整窗口大小时自动改变虚拟机分辨率。
一个强大的解决方案是使用“增强会话模式”。但这需要虚拟机端和宿主机端的配合。对于Linux,微软官方推荐使用XRDP这个开源远程桌面服务来实现类似效果。
- 在Ubuntu虚拟机中安装XRDP:
sudo apt install -y xrdp - 安装一个桌面环境兼容包(确保远程桌面能正常显示Ubuntu的GNOME桌面):
sudo apt install -y xorgxrdp - 启动XRDP服务并设置开机自启:
sudo systemctl enable --now xrdp - 在宿主机Windows上,使用系统自带的“远程桌面连接”(mstsc.exe)工具。在计算机栏输入虚拟机的IP地址(可以在Ubuntu终端用
ip addr show命令查看,通常是eth0网卡下的inet地址,如192.168.1.xxx)。 - 连接时,会话选择“Xorg”,输入你的Ubuntu用户名和密码登录。
通过远程桌面连接后,你就能获得一个可以自由缩放窗口、支持声音传输(需额外配置)、剪贴板共享的完整桌面体验,远比基本的Hyper-V连接窗口强大。
4.3 基础系统配置与软件安装
现在,我们可以把虚拟机当作一台真正的Ubuntu电脑来配置了。
- 更换软件源:为了获得更快的下载速度,将Ubuntu的软件源更换为国内镜像(如阿里云、清华、中科大)。编辑源列表文件:
sudo nano /etc/apt/sources.list,将文件里的archive.ubuntu.com和security.ubuntu.com替换为镜像地址,例如替换为mirrors.aliyun.com。然后更新:sudo apt update && sudo apt upgrade。 - 安装常用工具:根据你的需要,安装一些必备软件包。例如:
- 开发构建工具:
sudo apt install -y build-essential - Git版本控制:
sudo apt install -y git - Python3及pip:
sudo apt install -y python3 python3-pip - 网络工具:
sudo apt install -y net-tools curl wget
- 开发构建工具:
- 配置SSH服务:方便以后用终端工具(如MobaXterm, VS Code Remote)远程连接,无需桌面。
- 安装OpenSSH服务器:
sudo apt install -y openssh-server - 启动并设置开机自启:
sudo systemctl enable --now ssh - 现在你就可以在宿主机上用SSH客户端连接虚拟机的IP了。
- 安装OpenSSH服务器:
5. 常见问题排查与性能调优
即使按照步骤操作,也可能遇到一些问题。这里汇总几个我遇到过的典型问题及其解决方案。
5.1 虚拟机无法启动或卡在引导界面
- 问题描述:点击启动后,虚拟机一直黑屏,或者卡在“Hyper-V启动”或“GRUB”界面。
- 可能原因与解决:
- 安全启动冲突:第二代虚拟机默认启用了安全启动,某些Linux发行版或自定义内核可能不兼容。可以尝试在虚拟机关机状态下,右键“设置” -> “安全” -> 取消勾选“启用安全启动”。然后重启虚拟机。
- ISO镜像损坏:重新下载Ubuntu 20.04的ISO文件,并使用校验工具(如
sha256sum)核对官方提供的哈希值,确保文件完整。 - 创建虚拟机时选错了“代数”:Ubuntu 20.04必须使用“第二代”虚拟机。如果是第一代,需要删除重建。
5.2 虚拟机无法连接网络
- 问题描述:Ubuntu系统内显示网络未连接,无法
ping通外网或宿主机。 - 排查步骤:
- 在Ubuntu终端运行
ip addr show,查看eth0(或其他网卡名)是否分配到了IP地址(inet字段)。如果没有,说明DHCP获取失败。 - 在Hyper-V管理器中,检查虚拟机的网络连接是否确实绑定了我们创建的“ExternalSwitch”。
- 在宿主机上,打开“网络连接”,检查用于外部交换机的那个“vEthernet”适配器是否被禁用,或者其属性中“Hyper-V可扩展虚拟交换机”是否被意外取消勾选。
- 尝试在Ubuntu内重启网络服务:
sudo netplan apply(Ubuntu 20.04使用netplan)或sudo systemctl restart systemd-networkd。 - 终极方案:在Hyper-V中为虚拟机设置静态MAC地址(设置 -> 网络适配器 -> 高级功能),然后在Ubuntu内配置静态IP(编辑
/etc/netplan/01-netcfg.yaml文件),绕过DHCP问题。
- 在Ubuntu终端运行
5.3 性能优化建议
- 虚拟处理器分配:不要将所有CPU核心都分配给虚拟机。通常,分配给虚拟机的核心数不超过宿主机逻辑核心数的一半,留出足够资源给宿主机系统。例如,8核CPU的宿主机,给虚拟机分配2-4个核心比较合适。在虚拟机设置 -> 处理器中调整。
- 动态内存管理:启用“动态内存”是个好习惯。设置一个合适的启动内存(如2048 MB),一个最大内存(如8192 MB),并勾选“启用内存缓冲区”。Hyper-V会智能管理,在虚拟机需要时分配更多内存。
- 虚拟硬盘优化:如果虚拟机主要用于开发,I/O性能很重要。可以考虑将VHDX文件放在宿主机SSD硬盘上。对于数据库等重I/O应用,甚至可以创建“固定大小”的VHDX(虽然初期占用全部空间,但性能最好)。
- 关闭不必要的视觉效果:在Ubuntu虚拟机内,“设置” -> “外观”中,可以关闭动画、减少特效,将性能模式调整为“性能”,以节省图形计算资源。
整个流程走下来,从开启Hyper-V到拥有一个配置完善的Ubuntu 20.04开发环境,其实并不复杂。关键在于理解每个步骤背后的目的,比如为什么选第二代、为什么要创建外部交换机、为什么安装集成服务。把这些原理搞清楚了,不仅这次安装顺利,以后遇到任何Hyper-V相关的问题,你都能有自己的排查思路。虚拟机环境最大的好处就是可反复折腾,放心大胆地去尝试各种配置和优化吧, snapshot(检查点)功能就是你的后悔药。