
虚拟机这东西装起来容易用起来劝退率极高。很多人第一次接触虚拟机都是从“想装个Linux看看”或者“电脑上有旧软件不想直接装”开始的结果一路踩坑要么装系统蓝屏要么网络不通要么卡成幻灯片要么宿主机和虚拟机之间复制文件费半天劲。其实虚拟机本身不复杂难的是把“建立”和“优化”这两个阶段搞清楚。这篇文章我就结合自己这些年用 VMware Workstation 的经历从选型、安装、网络配置到性能调优再到常见故障排查把整个流程完整捋一遍。篇幅会比较长废话不多说直接进入正题。1. 选型与准备先想清楚用哪款虚拟机软件很多人第一步就容易犯迷糊虚拟机软件那么多到底选哪个我先说结论如果你要在 Windows 上跑 Linux 或 Windows 测试环境VMware Workstation是目前综合体验最稳的选择也是我日常主力工具。VirtualBox 免费开源、跨平台但显卡性能、USB 设备兼容性和大版本升级的稳定性都差一些尤其在 3D 加速和高分辨率屏适配方面VirtualBox 的表现始终不如 VMware 顺手。至于 Hyper-V那是 Windows 专业版自带的半虚拟化方案适合做 Windows 容器和 PowerShell 自动化日常做开发环境反而因为网络配置复杂而劝退不少人。1.1 硬件层面的准备别让 CPU 虚拟化功能拖后腿装 VMware 之前很多人忽略了一个关键前提CPU 虚拟化VT-x/AMD-V必须在 BIOS/UEFI 里开启。现在的电脑基本都默认开启但部分品牌机出厂设置是关闭的尤其是一些办公机。你可以在任务管理器“性能”标签里看到“虚拟化已启用”字样如果显示“已禁用”就得重启进 BIOS。不同主板入口不一样常见的是开机按 Del 或 F2进入后找 “Intel Virtualization Technology” 或 “SVM Mode”AMD 平台设为 Enabled 保存退出。这一步没做对后面安装 Linux 或者 Windows 预览版的时候很容易直接蓝屏或者提示 “VT-x is not available”。我见过好几个朋友栽在这里还以为是安装包有问题折腾半天才发现是硬件开关没打开。1.2 内存和硬盘评估别把宿主机挤爆虚拟机的本质是拿宿主机的一部分硬件资源去模拟一台独立电脑所以内存和硬盘都要提前规划。我用的是一个比较保守的规则物理机内存 16GB 起步虚拟机分配不超过物理内存的 50%。比如说物理机 16GB虚拟机给 4~8GB 比较合适剩下的要留给宿主机系统、浏览器、开发工具。硬盘方面VMware 默认会创建“动态扩展”的虚拟磁盘也就是说文件刚开始很小随着使用慢慢变大这比“固定大小”磁盘更省空间但代价是性能略低。如果你是长期跑数据库或者编译环境建议直接选“固定大小”磁盘性能更稳定而且磁盘文件不容易碎片化。1.3 镜像下载与校验从源头上避免装系统失败很多人装系统失败问题不是出在操作步骤上而是镜像本身。下载 Windows 镜像去微软官网下载 Ubuntu 镜像去国内镜像站或者 Ubuntu 官方别去第三方网站下那些“精简版”“优化版”系统。这类修改版镜像经常缺驱动、改内核装完以后各种问题比如网卡不识别、补丁装不上虚拟机的坑根本分不清是你配置错了还是镜像有毒。下载完镜像最好顺手校验一下 MD5 或 SHA256和官方给出的哈希值比对一致再用。2. 虚拟机安装全流程从创建到进系统镜像准备好、硬件规划好之后就可以开始建虚拟机了。我现在用的 VMware Workstation 17界面和一些低版本有细微差异但核心流程大差不差。下面按我常用的顺序拆开讲。2.1 创建虚拟机的几个关键选项打开 VMware点击“创建新的虚拟机”选择“典型推荐”就够了不需要选“自定义”。类型选“典型”之后安装来源选择“安装程序光盘映像文件iso”然后直接指定你下载好的系统镜像。系统类型 VMware 会自动识别——Ubuntu 镜像通常会帮你选好 Ubuntu 64 位Windows 10 镜像也会自动匹配对应版本。这里有个细节如果你要装的是 64 位系统虚拟机固件类型建议选 UEFI而不是传统的 BIOS。2020 年以后的 Windows 和 Ubuntu 镜像都默认支持 UEFI 启动选错固件类型可能会出现启动不了或者启动后提示 “Boot Menu” 找不到启动项。虚拟机名称和安装位置建议单独建一个目录比如D:\VirtualMachines\Ubuntu-Dev不要用默认的C:\Users\用户名\Documents\Virtual Machines因为 C 盘空间往往不够而且虚拟机磁盘文件动辄几十 GB放在系统盘上越滚越大会影响宿主机性能。2.2 分配 CPU、内存与磁盘的合理区间处理器数量给 1 个即可核心数根据物理机核心数分配。比如物理机是 8 核 16 线程虚拟机给 2 核 4 线程比较合适。这里要特别说一句虚拟机的 CPU 分配不是越多越好。你给虚拟机分配 8 个核心它启动时会抢占大量宿主机资源反而导致整个系统响应迟钝。尤其对于编译型任务瓶颈多数在磁盘 IO 而不是核心数核心给得太激进物理机反而卡成幻灯片。内存分配按之前的规则磁盘大小看需求。跑 Linux 桌面版给 40GB 就够了Windows 10/11 建议 60~80GB。注意虚拟磁盘文件默认保存在 VMware 安装目录或你指定目录下安装向导里别把“将虚拟磁盘存储为单个文件”和“拆分成多个文件”搞混。单个文件性能更好拆分成多个是为了方便导入到某些云平台或者老版本 VMware日常使用选“单个文件”就行。2.3 安装系统与安装 VMware Tools重点虚拟机创建完成后点“开启此虚拟机”它会自动从 ISO 启动接下来就是常规的系统安装界面。以 Ubuntu 为例安装过程中选择“清除整个磁盘并安装 Ubuntu”没问题这只影响虚拟硬盘里预分配的空间不会碰你物理机的数据。我提醒一点语言、时区、用户名密码这些信息要记清楚系统装完要用。Windows 系统同理就是一路下一步中间会重启几次。系统装完进入桌面后最重要的一件事就是安装VMware Tools新版叫 open-vm-tools。对 Ubuntu 等 Linux 发行版我通常直接在终端执行sudo apt update sudo apt install open-vm-tools open-vm-tools-desktop -y对 Windows 虚拟机则是点 VMware 菜单栏的“虚拟机” - “安装 VMware Tools”然后在虚拟机里运行光驱里的安装程序重启即可。没有 VMware Tools 的虚拟机屏幕分辨率会被锁死比如只能到 1024x768鼠标进出虚拟机还要按 CtrlAlt从宿主机拖文件进虚拟机也不行。所以 Tools 几乎是虚拟机体验的分水岭装没装完全是两个世界。2.4 快照装系统之后做的第一件事系统装好、Tools 装好、网络通了这时候赶紧打一个快照。快照相当于把虚拟机当前状态完整保存下来后续系统被搞坏了可以随时回滚到这个状态。这一点对折腾型选手尤其重要——比如我经常在测试环境里装各种乱七八糟的开发包、改配置文件稍不留神就把 Apache 或 Nginx 搞崩这时候直接恢复快照比手动排查快得多。快照的位置在“虚拟机” - “快照” - “拍摄快照”起个名字比如“初始干净状态-已装Tools”后续再打快照的时候也能区分层级。3. 网络配置让虚拟机真正“联网”并且能对外提供服务虚拟机装完只是第一步真正让人头大的是网络。很多人遇到的第一个问题是虚拟机里能上网但宿主机访问不了虚拟机里的网站第二个问题是虚拟机 IP 总是变来变去配置的服务地址跟着漂移第三个问题是本地开发环境想用自定义域名访问虚拟机里的多站点服务但总配置不成功。这三个问题本质上是同一个问题你没有理解 VMware 的虚拟网络组件更没动静态 IP 和端口转发。3.1 三种网络模式到底怎么选VMware 给虚拟机提供了三种主要网络模式桥接模式Bridged、NAT 模式、仅主机模式Host-only。我在初学阶段总以为桥接模式最“高级”因为虚拟机看起来就是局域网里的一台独立机器别人也能直接访问它。但桥接模式的问题在于它会占用物理网段地址公司局域网 DHCP 分配不灵活而且 IP 一换就要重新配。NAT 模式则是宿主机充当一个“内网网关”虚拟机通过 NAT 访问外网外部设备默认访问不到虚拟机但宿主机可以。仅主机模式相当于宿主机和虚拟机之间拉了一根网线外部完全隔离适合做纯测试环境不需要外网。日常开发环境我建议无脑先用 NAT 模式理由是它最稳定不太受物理网络环境变化影响。很多教程说桥接模式可以“让局域网其他电脑访问虚拟机”但现在公司内网基本都有 DHCP 隔离和防火墙策略桥接模式不仅配置麻烦还可能因为 IP 冲突导致断网。NAT 模式配合下面的端口转发一样可以让局域网其他人访问虚拟机服务。3.2 修改虚拟机 IP从 DHCP 到静态 IP虚拟机默认使用 DHCP 获取 IPIP 随时可能变。你也许今天用192.168.198.128连 SSH明天重启虚拟机它就变成192.168.198.137了。要稳定访问必须把虚拟机的 IP 改成静态。以 Ubuntu 22.04 及以后版本为例网络管理工具是netplan配置文件通常在/etc/netplan/目录下文件名可能是01-network-manager-all.yaml或00-installer-config.yaml。编辑它之前先查看当前网卡名和网关地址ip addr ip routeip addr会显示类似ens33、ens160的网卡名ip route会显示网关地址一般是192.168.x.1。然后编辑配置文件network: version: 2 renderer: NetworkManager ethernets: ens33: dhcp4: no addresses: [192.168.198.128/24] routes: - to: default via: 192.168.198.2 nameservers: addresses: [223.5.5.5, 8.8.8.8]注意这里的网关地址要和你的 VMware NAT 网关一致可以通过 VMware“编辑” - “虚拟网络编辑器”查看选中 “NAT 模式”点“NAT 设置”能看到网关 IP。改完配置文件后执行sudo netplan apply再执行ip addr确认 IP 是否生效。Windows 虚拟机更简单直接去网络适配器设置里把“自动获取 IP”改成“使用下面的 IP 地址”填入你想要的地址和默认网关就行。3.3 宿主机访问虚拟机网站的两个办法如果你只是想自己访问虚拟机里的 Web 服务直接用浏览器打开http://虚拟机IP:端口号就好。但局域网里其他人也想访问就需要用 NAT 的端口转发功能了。这也是我强烈推荐 NAT 模式的另一个原因端口转发只动宿主机虚拟机网络配置完全不用改。具体操作如下虚拟网络编辑器里选中 NAT 模式点击“NAT 设置”在弹出的窗口里添加端口转发规则。比如虚拟机跑了一个 Nginx 监听 8080 端口你想让局域网用户通过宿主机的 8080 端口访问那就添加一条规则主机端口 8080虚拟机 IP 填 192.168.198.128虚拟机端口 8080。这样别人访问“宿主机IP:8080”就相当于访问“虚拟机IP:8080”。3.4 本地 虚拟机多端口 Nginx 开发环境配置实战这块是很多前后端工程师的痛点本地 Windows 上开着 IDE 和微信开发者工具虚拟机里跑着多个后端服务想通过自定义域名访问虚拟机里的不同站点而不用记端口号。我的做法是先在 Windows 的 hosts 文件里添加几条域名映射比如192.168.198.128 dev.api.local 192.168.198.128 admin.dev.local 192.168.198.128 static.dev.local然后在虚拟机的 Nginx 里建立多个 server 块每个 server 块监听 80 端口但通过server_name区分不同域名。配置示例server { listen 80; server_name dev.api.local; location / { proxy_pass http://127.0.0.1:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } server { listen 80; server_name admin.dev.local; location / { proxy_pass http://127.0.0.1:8080; } }最终效果就是我在 Windows 浏览器里输入http://dev.api.local直接访问虚拟机里的 Node.js 服务输入http://admin.dev.local访问虚拟机里的 Java 服务。两个域名都指向同一个虚拟机 IP但 Nginx 通过Host头区分请求该转发到哪个后端。这套方案的好处是本地开发环境不用因为切换项目频繁改端口每个项目的域名是固定的联调时前后端传参也清晰。需要注意一点hosts 文件修改后要刷新 DNS 缓存Windows 下执行ipconfig /flushdns另外虚拟机里的 Nginx 要监听公网接口而不是127.0.0.1否则外部请求进不来。4. 性能优化与日常维护让虚拟机跑得更顺更省心虚拟机装了、网络配好了接下来就是长期使用的优化和维护了。很多人虚拟机越用越卡多半是忽略了一些基础但关键的配置。4.1 CPU 和内存分配策略留足余量我给虚拟机的资源分配方法是先观察再调整。刚创建虚拟机时给一个保守配置比如 2 核 4GB然后日常使用中打开虚拟机的“系统监视器”看看 CPU 和内存实际占用再决定要不要加。很多人的误区是给虚拟机塞满资源搞得宿主机卡死。实际上虚拟机内部应用对资源的消耗往往没有我们想象的那么大——比如跑个 Nginx MySQL 开发环境2 核 4GB 绰绰有余跑 Android Studio 模拟器或者大型 IDE 开发才考虑加到 4 核 8GB。此外VMware 的“处理器设置”里有个“虚拟化 Intel VT-x/EPT 或 AMD-V/RVI”选项这个对虚拟机内部的操作系统虚拟化功能有影响比如在虚拟机里再嵌套一层虚拟机Docker Desktop 的 WSL2 后端需要。如果你的开发工作流涉及 Docker记得勾选这项。4.2 磁盘优化与空间回收虚拟磁盘文件最怕越用越大却无法自动回收。Linux 虚拟机里删除文件后虚拟磁盘文件并不会自动缩小因为 VMware 并不知道那些数据块已经“空”了。这时候需要手动回收空间。对 Linux 虚拟机先清理系统内垃圾文件然后执行sudo vmware-toolbox-cli disk shrink /这个命令会通知 VMware 把未使用的磁盘块释放回宿主机。对 Windows 虚拟机则先运行系统自带的“磁盘清理”再把“VMware Tools”控制面板里的“收缩磁盘”选项执行一遍。另外虚拟机的“磁盘碎片整理”不是一个必须做的操作——虚拟磁盘本质上是宿主机上的一个大文件碎片整理作用于虚拟机内部系统作用有限不如定期清理缓存。4.3 快照管理与备份策略快照不是存档不能当备份用。这是个很重要的认知。快照依赖父磁盘文件如果你打了多个快照并且父磁盘文件被误删整个虚拟机都可能打不开。更稳妥的方式是定期导出虚拟机的 OVF 模板或者直接复制虚拟机的整个目录。我的一般操作是每次做一个大版本软件安装前打一个快照安装完并且确认软件工作正常后再打一个快照标记为“新状态”然后删除旧快照避免快照链过长影响性能。如果你的虚拟机有很重要的服务复制整个虚拟机目录到另一块硬盘上是成本最低的备份方式。4.4 主机资源冲突与多开虚拟机有些人不满足于一台虚拟机想同时跑多台做集群测试。这里要特别提醒一句每台虚拟机都会固定占用分配的内存。比如你开了 3 台各占 4GB 的虚拟机物理机 16GB 内存瞬间就占满了物理机上的日常操作会变得异常卡顿。如果你确实有多开需求优先考虑给虚拟机开启“内存压缩”和“换入换出”功能让 VMware 根据物理机内存占用动态调整。这个选项在虚拟机的“内存”设置里能找到“预留所有虚拟机内存”这个复选框不要勾选它否则 VMware 会一次性把内存全占住反而拖垮物理机。4.5 加密虚拟机与安全管理如果你的虚拟机里保存了客户资料或者重要密钥建议在“虚拟机设置” - “选项” - “访问控制”里启用加密可以给虚拟机设置密码。这样一来即便虚拟机文件被拷贝走了没有密码也无法启动。加密会影响一些性能但对于存储敏感信息的虚拟机来说完全值得。此外虚拟机内系统也要升级补丁、装好防火墙毕竟它是一台真实主机漏洞一样会被利用。5. 常见问题与排查技巧实录最后这部分把我这些年遇到的高频问题完整列出来都是踩过坑之后总结的实战解法。5.1 安装系统时蓝屏或提示无法启用虚拟机平台这个现象出现的背景很复杂。先说 Windows 宿主机的情况如果你用的 VMware 版本低于 16而物理机系统是 Win11容易因为 VBS基于虚拟化的安全冲突导致无法启动虚拟机。解决办法是关闭 Windows 的安全中心里的“内核隔离”选项或者在 PowerShell 执行bcdedit /set hypervisorlaunchtype off然后重启。如果你装的是 Linux 宿主机用 VMware或者反过来蓝屏通常和固件类型选择有关系把虚拟机固件从 UEFI 改成 BIOS 试试。如果提示 “无法启用虚拟机平台”先去确认宿主机的 Hyper-V 功能是否处于开启状态。Win10/11 的 Hyper-V 会和 VMware 抢底层虚拟化资源如果启用了 Hyper-V需要在“控制面板” - “程序和功能” - “启用或关闭 Windows 功能”里把 Hyper-V 相关选项全部取消重启后再试。5.2 VMware 无法连接到虚拟机或提示没有权限经常有人把 VMware 装好点开启虚拟机时提示“VMware Workstation 无法连接到虚拟机。请确保您有权运行该程序、访问该程序使用”。这个问题多数情况下是 VMware 服务没启动。按 WinR 输入services.msc找到 “VMware Authorization Service”右键启动并设为自动。如果服务启动失败多半是安装 VMware 之后系统里存在旧版本的残留服务使用“管理员身份”重新运行一次 VMware 的安装程序选择“修复”即可解决。5.3 VNC Viewer 鼠标变成一个点没反应这个问题出现在远程桌面访问虚拟机的时候典型场景是 VNC Viewer 连上虚拟机后鼠标变成一个小圆点点击没反应。这其实不是虚拟机配置问题是虚拟机的显卡驱动和 VNC 协议的鼠标坐标适配出了岔子。解决方案很简单在虚拟机里安装对应系统的 VMware Tools 或者 open-vm-tools鼠标指针绘图方式会恢复标准。如果安装 Tools 后还是这样尝试在 VNC Viewer 的选项里把“Color Level”调到“Full”并把“Enable SSL”关闭兼容性会大幅提升。5.4 复制/克隆后的虚拟机无法打开很多人喜欢复制虚拟机目录或者用 DiskGenius 把虚拟机转成 U 盘启动盘然后搬到另一台电脑上打开。复制出来的虚拟机经常报错提示“此虚拟机可能已被移动或复制”。问题是 VMware 会记录虚拟机的唯一标识UUID复制之后 UUID 和磁盘里的记录不一致。解决办法复制整个目录后删掉里面的.lck锁定文件和所有.vmem临时文件然后用 Notepad 编辑.vmx文件把里面的uuid.action create这一行加进去。如果打开虚拟机时提示“是否已移动”选择“我已移动该虚拟机”VMware 会自动重新生成 UUID。VBox 虚拟机VirtualBox复制打不开的问题则是需要删除以.vbox-prev结尾的配置文件并重新注册。5.5 宿主机内容无法复制粘贴到虚拟机这个问题的排查顺序是先确认 VMware Tools 装好了再检查虚拟机里“剪贴板共享”是否开启。路径是菜单栏“虚拟机” - “设置” - “选项” - “客户机隔离”把“启用复制粘贴”两个选项都勾上。如果已经全开了还不生效去任务管理器里结束vmtoolsd.exe进程VMware Tools 会自动拉起来然后重新操作复制粘贴。5.6 Ubuntu 物理机挂载虚拟机的方案有人电脑本身就是 Ubuntu又想跑一个 Windows 虚拟机。Ubuntu 下除了 VMware也可以考虑直接用 QEMU/KVM 方案不过为了保持和 Windows 下相同的操作手感我推荐在 Ubuntu 上安装 VMware Workstation for Linux。安装方式和 Windows 略有不同这里不展开讲命令但注意一点Linux 版 VMware 安装完成之后同样需要安装 open-vm-tools 和内核模块如果启动虚拟机提示内核模块编译失败需要先安装build-essential和对应内核头文件包。5.7 问题速查表现象可能原因解决手段创建虚拟机闪退虚拟机软件与宿主机防毒软件冲突关闭实时保护或卸载重装最新版 VMware虚拟机开机提示 Boot 错误固件类型不匹配UEFI/BIOS 切换虚拟机里无法上网NAT 网关配置错误或 VMware DHCP 服务未启动虚拟网络编辑器里恢复默认设置虚拟机里能上网但宿主机访问不了服务防火墙或端口未转发检查宿主机防火墙添加 NAT 端口转发规则克隆虚拟机网卡识别不了网卡 MAC 重复打开虚拟机设置移除旧网卡重新添加一块虚拟机画面模糊未装 VMware Tools安装 open-vm-tools/vmware-tools虚拟机执行编译很卡磁盘 IO 瓶颈改用固定大小虚拟磁盘把虚拟机放到 SSD写在最后最后再分享一个我自己养成的习惯每装好一台虚拟机先把“初始干净状态”快照打了然后再去装开发环境、改配置。如果某一天把环境搞乱了恢复快照只需要一分钟远比手动排查问题省心。虚拟机这东西本质上就是一套“软硬件模拟层 系统镜像 资源分配策略”的组合理解了这个结构之后大多数问题都能自己推演出来启动不了就查固件、查 CPU 虚拟化网络不通就查模式、查防火墙运行不顺就查内存、查磁盘。按照这篇文章的顺序把虚拟机建起来再优化一轮你基本就不会再碰什么难解的故障了。