
如果把话说得直白一点虚拟机装 Linux本身不是用来学安装的它是给后面所有折腾省时间的。我在工作中接触过的开发机、测试环境、甚至一些临时给客户跑演示的环境几乎都是先从一个干净的虚拟机模板克隆出来的。所以这篇不是教科书式的安装截图流水账而是把我自己从选型、下载镜像、创建虚拟机到安装完成后配置网络、SSH、再做本地多站点联调这一段路上踩过的坑和验证过的方法整理出来。尤其是那几个容易让人卡住的问题Windows 下 VMware 装 Linux 蓝屏、无法连接到虚拟机、网络模式选错导致 IP 不通、自定义域名解析不起来——这些如果你提前知道原理基本都能绕开。这篇内容适合三类人第一次碰虚拟机的新人、在 Windows 主机上折腾 Linux 开发环境的人以及想把虚拟机做成日常开发机而不是装完就扔的人。我自己最常用的组合是 VMware Workstation Ubuntu LTS偶尔用 Rocky Linux 跑一些需要 RHEL 兼容性的东西所以下文会以这两个发行版为主线原理性的内容其他发行版也通用。1. 为什么我还在用虚拟机装 Linux——以及该选哪套方案1.1 虚拟机解决的三个实际问题先讲点朴素的。很多人问为什么不直接装双系统、为什么不直接买台云服务器我的回答是这三个方案解决的根本不是同一类问题。双系统的问题是切换成本太高。你在 Windows 里写文档、开会议软件突然要跑一段 Linux 脚本就得重启电脑、进 GRUB、选系统、等开机、再恢复环境一天折腾两次人就烦了。云服务器的问题是环境是别人的网络、端口、挂载、内核模块这些你控制不了而且很多本地调试场景比如连 USB 设备、内网资源、自己写的服务要访问宿主机数据库在跳板机上绕来绕去非常痛苦。虚拟机的本质是在宿主机里跑一个完整的、隔离的操作系统它一次性解决这三个问题你可以随时在 Windows 和 Linux 之间切换不用重启你可以完全掌控虚拟机的磁盘、内存、CPU、网络你还可以通过快照把系统状态保存下来无论把系统怎么折腾坏几秒钟就能回到一个干净的状态。对我来说快照这一个功能就值回票价——我在虚拟机里装各种开发库、改系统配置、甚至升级内核从来不怕翻车大不了恢复快照重来。还有一个很多新人没意识到的场景虚拟机是很好的环境分发工具。你在虚拟机里配好一套开发环境可以直接把整个虚拟磁盘文件拷贝给同事或者复制一份作为项目的基线环境。我做容器化改造之前很多服务的依赖验证就是在多份克隆虚拟机里做的每台虚拟机跑不同的依赖版本互不干扰。1.2 VMware Workstation、VirtualBox、Hyper-V 怎么选选虚拟化软件我主要看四个维度易用性、性能损耗、网络模式灵活性、快照管理。VMware Workstation目前对个人用户免费Broadcom 收购后的个人许可政策功能最完整虚拟网络编辑器可以自定义多个 NAT 和仅主机网段快照管理成熟对 Linux 图形界面的 3D 加速支持也做得好。缺点是比较重安装包大。VirtualBox开源免费跨平台轻一些。不过网络方面默认的 NAT 模式偶尔会因为 DHCP 租约问题导致 IP 变化快照链管理与 VMware 相比略繁琐性能和 USB 直通稳定性稍逊。Windows 自带 Hyper-V如果你是 Windows 专业版/企业版Hyper-V 是免费且原生的选择。但它和 VMware、VirtualBox 这类 Type-2 虚拟化在体系上不一样Hyper-V 是半虚拟化虚拟机里的系统是跑在 Hyper-V 管理程序上的图形性能、兼容性尤其对 Linux 桌面发行版)不如 VMware 顺手。我现在的习惯日常开发机主力用 VMware Workstation因为快照和网络控制最省心需要在多台电脑之间移动虚拟机文件时有时用 VirtualBox 的 OVA 格式做迁移如果只是在公司 Windows 电脑上临时起一个 Linux 测东西才考虑 Hyper-V。对比项VMware WorkstationVirtualBoxHyper-V许可个人免费需注册开源免费Windows 专业版内置网络模式灵活性高NAT/桥接/仅主机可自定义中中虚拟交换机体系快照/克隆强操作直观有但略繁琐有但操作偏运维Linux 图形加速较好一般较弱适合场景日常开发、多虚拟机编排轻量临时使用已有 Windows 生态、纯命令行1.3 开始前先确认硬件和系统设置不管选哪套先确认两件事CPU 虚拟化是否开启、内存和磁盘是否够用。CPU 虚拟化Intel VT-x / AMD-V在 BIOS 或 UEFI 里通常叫 Intel Virtualization Technology 或 SVM Mode如果装完虚拟机提示VT-x 不可用或 64 位客户机无法启动第一件事就是进 BIOS 把它打开而不是重装虚拟机软件。另外看看任务管理器里性能标签下是否显示虚拟化: 已启用这一步 10 秒就能确认。配置上我的底线建议是内存 16GB 起步、CPU 4 核起步、磁盘至少留 60GB 空闲空间。虚拟机里装 Ubuntu 桌面版分配 4GB 内存 4 核 50GB 虚拟磁盘是比较舒服的起步配置。原因是现在的前端构建工具Node、Webpack和后端 JVM 都很吃内存给太少的话虚拟机里随便跑个 npm run dev 都能卡死你。如果你只是做 Server 环境测试装 Ubuntu Server 无图形界面那 2GB 内存都够跑但磁盘依然建议 40GB 以上因为后续要装的容器镜像、日志文件、编译缓存都很占空间。2. VMware Workstation 从下载镜像到装好系统的完整过程2.1 Linux 镜像去哪下载、选哪个发行版这是新人最容易卡住的第一关。我不建议去各种软件站下载系统镜像因为来源不明、容易下到被改动过的包。国内这边非常稳的几个正规开源镜像站基本都能满足需求清华 TUNA 镜像源https://mirrors.tuna.tsinghua.edu.cn/阿里云开源镜像站https://mirrors.aliyun.com/中科大 USTC 镜像源https://mirrors.ustc.edu.cn/具体选什么发行版取决于你要拿虚拟机干什么日常开发、学 Linux、试桌面环境Ubuntu LTS比如 22.04、24.04。理由很简单社区资料最多、默认软件源在国内很容易换成镜像加速、遇到的问题几乎都有人踩过。想更贴近 RHEL 兼容生态、以后要搞企业级运维Rocky Linux 或 AlmaLinux。这两个是 CentOS 停止维护后的主流替代兼容 RHEL跑数据库中间件都很常见。想要一个极度轻量、更新滚动、内核较新的系统Debian稳定是出了名的升级不折腾我给老电脑和纯命令行测试机装的就是 Debian。想碰国产化生态或信创场景银河麒麟、统信 UOS等但我个人建议除非你有明确的国产化适配需求否则日常学习还是从 Ubuntu 或 Debian 开始更容易上手。下载时注意架构绝大多数 PC 都是 x86_64选择amd64或x86_64的 ISO 镜像如果是 Apple Silicon 或 ARM 开发板相关则另论。2.2 创建虚拟机时的关键配置项VMware Workstation 里新建虚拟机有向导但别一路无脑点下一步。我建议选自定义模式有几个关键项按下面的思路来虚拟硬件兼容性选择当前 Workstation 版本能支持的最高版本即可向后兼容的意义不大。安装来源选择稍后安装操作系统不要选安装程序光盘映像文件。原因是纯净安装时手动选择 ISO、手动走安装流程能让你更清楚每一步发生了什么而且后面需要挂载不同镜像比如换源时用)时也更灵活。客户机操作系统选 Linux版本选对应的发行版和位数。这一步决定了 VMware 用什么样的虚拟硬件默认配置比如磁盘控制器、网卡型号。固件类型新版本 Workstation 默认可能是 UEFI如果遇到引导问题可以改成传统 BIOS 试试。大多数 Linux 发行版两种都能引导但个别老内核镜像对 UEFI 支持不佳。处理器与内存按 1.3 节给出的底线来。CPU 可以勾选虚拟化 Intel VT-x/EPT 或 AMD-V/RVI这样以后在虚拟机里再跑 KVM嵌套虚拟化才可能成功。网络类型新手先选 NAT保底能通网。桥接和仅主机在后面第四节细讲。磁盘创建新虚拟磁盘容量按需分配建议直接设 60GB 以上虚拟磁盘文件存储方式默认拆分成多个文件即可。不要选立即分配所有磁盘空间那会直接把宿主机磁盘吃掉一大块也没必要。到这里虚拟机会以没有任何系统的状态出现在列表里。接下来右键虚拟机设置挂载你下载好的 ISO 镜像文件到光驱然后开机。2.3 Ubuntu 安装过程里容易被忽视的交互细节开机后会进入 Ubuntu 安装引导界面选 Install Ubuntu 就进入正式安装流程。几个关键点最小安装 vs 正常安装如果用途是开发环境选正常安装并勾选安装第三方软件。第三方软件里包含了一些硬件解码器和驱动省得后面为 flash 插件、MP3 播放问题再去折腾。如果你纯粹做服务器选最小安装装完是个非常干净的底座。分区策略教程往往会教你手动分区但我的真实建议是——如果是虚拟机环境且不是搞 LVM 或加密实验直接选清除整个磁盘并安装 Ubuntu配合 LVM。虚拟磁盘是可以随意扩容的手动分区对新手只会增加麻烦。LVM 的好处是后续扩分区不用动系统直接在虚拟机设置里把磁盘调大再到系统里lvextend就行。用户名与密码系统默认把第一个用户加进 sudo 组安装时设置的用户就是你的管理员账号。这里别偷懒密码设置一个你能记住但不容易被猜到的组合因为后面 SSH、sudo 都要用它。安装完成后重启重启时记得把光驱的 ISO 摘掉虚拟机关机状态下设置里把启动时连接取消勾选不然会再次进入安装界面。装完后还有一步几乎必做安装 open-vm-tools。现在 Ubuntu 安装器一般会自动装但如果是 Desktop 版本我还是建议验证一下。这个包提供剪贴板共享、拖拽文件、屏幕分辨率自适应、鼠标平滑移动这些功能没有它虚拟机用起来就像隔着一块玻璃。安装命令是sudo apt update sudo apt install open-vm-tools open-vm-tools-desktop装完重启VMware 窗口里的桌面分辨率会自动跟随窗口大小变化剪贴板也能和宿主机互通了。3. 最容易翻车的三个问题蓝屏、服务连不上、权限不够3.1 Windows 下 VMware 装 Linux 蓝屏的根因与排查路线虚拟机安装 linux 蓝屏是我见过的高频搜索词。实际上虚拟机软件本身一般不会让 Windows 蓝屏蓝屏往往出在内核级冲突上。总结下来就三大类第一类是Windows 的虚拟化安全功能与 VMware 冲突。Win10/11 上默认开启的基于虚拟化的安全VBS、内核隔离中的内存完整性、以及 Credential Guard 都会占用 CPU 虚拟化能力而 VMware Workstation 这类软件也需要使用 VT-x 来做硬件辅助虚拟化两边管理程序打架表现就是装系统过程中直接 BSOD。这类问题的排查思路是层层剥离先打开 Windows 安全中心 → 设备安全性 → 内核隔离关掉内存完整性如果不行再在管理员 PowerShell 里执行msinfo32查看基于虚拟化的安全是否显示正在运行如果是在运行需要关闭 VBS。最简单高效的临时方案是以管理员身份运行bcdedit /set hypervisorlaunchtype off重启电脑后再开 VMware。这条命令的本质是让 Windows 的 Hyper-V 管理程序不再占用虚拟化硬件把 CPU 的 VT-x 留给 VMware 直接用。第二类是BIOS/UEFI 里的虚拟化开关没开或者开了但睡眠唤醒后状态异常。前者好解决进 BIOS 打开 Intel VT-x或 AMD SVM后者是 AMD 平台常见的老问题休眠后虚拟化失效重启虚拟机服务或重启主机都能解决。第三类是VMware 版本太旧与较新的 Windows/Linux 内核不匹配。旧版 Workstation 遇到 Windows 11 23H2 之后新增的安全机制或者客户机内核太新比如 Ubuntu 6.8 内核都有可能触发蓝屏。这里面有个非常通用的原则先检查是否有新版本有就升级除非你公司有强制要求否则不要用超过一年前的版本。遇到蓝屏不要慌先看蓝屏上显示的错误代码常见的是SYSTEM_THREAD_EXCEPTION_NOT_HANDLED或KMODE_EXCEPTION_NOT_HANDLED拍下来搜索 VMware 错误代码基本能锁定方向。我的处理优先级是升级 VMware → 关闭宿主机安全相关功能 → 调整 BIOS 虚拟化设置 → 用bcdedit关闭 Hyper-V 启动。按这个顺序绝大多数问题都能解决。3.2 VMware Workstation 无法连接到虚拟机的服务与权限排查热搜里还有一条很典型vmware workstation 无法连接到虚拟机。请确保您有权运行该程序、访问该程序使用。这句话基本是在提示** VMware 后台服务没有启动或当前用户权限不足**。VMware Workstation 在 Windows 上依赖一组后台服务最核心的是VMware Authorization Service和VMware Host Agent。如果你在服务管理器services.msc里看到它们处于停止状态虚拟机自然就连接不上。排查步骤按Win R输入services.msc找到所有名字带 VMware 的服务。确认VMware Authorization Service是否在运行没有的话右键启动并将启动类型设为自动。如果启动失败大概率是安装路径权限或者杀毒软件拦截了服务。把 VMware 安装目录通常C:\Program Files (x86)\VMware\VMware Workstation加入杀毒软件白名单或者用管理员身份重新运行一次 VMware 安装包做修复安装。日常使用尽量右键 VMware Workstation → 以管理员身份运行。有些操作尤其是创建桥接网络、修改虚拟网络需要访问系统网络接口普通权限下会静默失败。还有一个隐蔽原因Windows 更新后系统组件变化VMware 的驱动签名可能被系统安全策略阻止。这种情况在事件查看器里能看到driver blocked相关记录解决方法是重装或升级到最新版 VMware。3.3 从日志定位 VMware 内部错误有时候界面连一点提示都不给只说内部错误。这时候别瞎猜去看日志。Windows 下 VMware Workstation 的日志在宿主机日志%TEMP%\vmware-username\vmware.log虚拟机内日志/var/log/vmware-vmsvc-root.log如果装了 open-vm-tools打开vmware.log搜error、fail、Cannot等关键字。常见的几条记录包括VMX failed to start、Unable to change virtual machine power state、Network connection timed out。这些日志能帮你判断是虚拟机核心文件损坏重新创建虚拟机或恢复快照、网络配置异常重设虚拟网络、还是电源状态卡死直接删.vmx锁文件或把进程结束掉。有一次我遇到虚拟机无法开机日志里反复出现Cannot open disk ... .vmdk排查后发现是虚拟磁盘文件所在路径里有中文字符导致某些组件无法访问。把虚拟机文件移到纯英文路径后问题立刻消失。这种细节靠界面是永远查不到的但日志里写得清清楚楚。养成看日志的习惯比换软件、重装系统高效得多。4. 装完系统别急着关窗口网络、用户与 SSH 基础配置4.1 三种网络模式什么时候选什么虚拟机装完第一件事是确认能不能上网、能不能跟宿主机通信。VMware 的三种网络模式你必须弄懂NAT 模式虚拟机通过宿主机共享 IP 上网宿主机相当于路由器。默认情况下虚拟机可以访问外部网络宿主机也可以访问虚拟机但宿主机和虚拟机之间的访问通常靠虚拟机的内网 IP比如192.168.xxx.xxx。局域网其他电脑访问不到虚拟机。适合新手和大多数开发场景。桥接模式虚拟机直接使用物理网卡的网络像是局域网里另一台独立电脑有自己的局域网 IP可以被其他机器直接访问。适合需要把虚拟机暴露给局域网同事联调的场景但配置上要求网段和网关与宿主机一致偶尔会遇到 DHCP 分配不到 IP 的麻烦。仅主机模式只能和宿主机通信不能访问外网。适合隔离测试、不污染外部网络的实验。我日常开发用NAT。原因很简单不需要关心宿舍/办公室网络里有没有 DHCP 白名单、网关限制之类的幺蛾子虚拟机只要稳定能出网就行。如果要用手机或局域网其他设备连虚拟机里的服务比如演示 demo我再加一块仅主机网卡或切换到桥接。无论是哪种模式安装完系统后动手改静态 IP 是值得的。NAT 模式下 VMware 默认网段是192.168.x.0/24x 通常是 111 或 118DHCP 分配的 IP 每次启动后可能变化导致你走 SSH、配域名、写测试脚本时 IP 对不上。配静态 IP 的方式在不同发行版里不一样Ubuntu 22.04 使用 Netplan。编辑/etc/netplan/01-netcfg.yamlnetwork: version: 2 ethernets: ens33: dhcp4: no addresses: - 192.168.111.128/24 routes: - to: default via: 192.168.111.2 nameservers: addresses: - 223.5.5.5 - 119.29.29.29上面的192.168.111.2是 VMware NAT 模式的默认网关192.168.111.128是我自己规划的固定 IP。改完后执行sudo netplan apply再用ip addr验证。写错了 SSH 会断但别慌虚拟机里 TTY 界面还是能进去调回来的。DNS 我一般建议用国内公共 DNS阿里 223.5.5.5 或腾讯 119.29.29.29比默认的空路由 DNS 更稳。4.2 新建用户、sudo 权限与 SSH 登录配置安装 Ubuntu 时自动创建的用户虽然有 sudo 权限但作为日常使用我建议再单独建一个专用用户这样能用不同的账号区分职责比如deploy、dev。命令如下sudo adduser dev # 交互式设置密码和用户信息 sudo usermod -aG sudo dev # 将 dev 加入 sudo 组adduser在 Debian/Ubuntu 上会自动创建家目录、生成用户组、并让你设置密码比useradd少踩很多坑useradd不带参数是不建家目录、不设密码的很多新手在这里翻车。SSH 远程登录几乎是 Linux 开发环境刚需。Ubuntu 默认没装 openssh-server装一下sudo apt install openssh-server sudo systemctl enable --now ssh然后ssh dev192.168.111.128就能从宿主机连进虚拟机了。想更安全一点可以改用密钥登录在宿主机生成密钥对ssh-keygen -t ed25519把公钥写入虚拟机的~/.ssh/authorized_keys然后修改/etc/ssh/sshd_config里PasswordAuthentication no把密码登录关掉。这样即使 IP 暴露了没有私钥也进不来。4.3 最该先掌握的一组常用命令很多热搜词在问linux 常用命令 xxx这里我不列什么大全只列虚拟机日常使用中最高频的、不会就卡住的那批用途命令备注查看系统信息uname -a、cat /etc/os-release确认发行版版本和内核查看 CPU/内存/磁盘lscpu、free -h、df -h排查资源不足查看网络/进程/端口ip addr、ps -ef、ss -tlnp替代老旧的netstat查找文件find / -name xxx 2/dev/null加2/dev/null避免权限报错刷屏下载文件wget -O或curl -o下载关心断点续传用wget -c查看日志tail -f /var/log/syslog排错时最顺手修改文件权限/属主chmod、chown太常用值得背下来包管理更新sudo apt update sudo apt upgrade装完系统第一步不需要背全。真正要形成肌肉记忆的是cd、ls、cat、grep、ps、ss、systemctl、apt这八条。遇到不会的man 命令名或者命令名 --help永远是你最好的老师。5. 把虚拟机当开发机本地 虚拟机多站点 nginx 与自定义域名5.1 多站点场景的典型需求热搜词里有一条让我觉得特别有意思本地虚拟机 多端口nginx 开发环境多站点自定义域名配置。这个需求其实很普遍你在 Windows 宿主机上写前端代码而接口服务和数据库跑在虚拟机里或者你同时维护好几个项目每个项目用自己的域名和端口希望在浏览器里访问http://project-a.test、http://project-b.test这样的本地开发域名时能自动打到虚拟机里对应的 nginx 服务上。传统做法是直接访问http://192.168.111.128:8080这样的地址但端口一多就乱而且有些前端框架的跨域、Cookie 策略严格要求域名一致。所以自定义域名多站点是更整洁的方案。5.2 域名解析在宿主机 hosts 里把自定义域名指向虚拟机 IP这个方案的核心是把域名解析这件事从 DNS 服务器挪到本机 hosts 文件。在 Windows 宿主机上以管理员身份编辑C:\Windows\System32\drivers\etc\hosts追加192.168.111.128 project-a.test 192.168.111.128 project-b.test注意.test这个顶级域名是 RFC 保留给测试用的不会冲突真实域名这是我最推荐的后缀。不要用什么.com的本地假域名容易和线上域名冲突。编辑完 hosts 后立即生效不需要重启。浏览器里输入http://project-a.test请求会被直接发往192.168.111.128然后由虚拟机里的 nginx 接手。整个链路里域名解析发生在宿主机HTTP 请求到达虚拟机nginx 根据Host头决定转发到哪个后端。5.3 nginx 的多站点配置与端口分发逻辑虚拟机里先装 nginxsudo apt install nginx。然后sites-available里放配置sites-enabled里做软链接/etc/nginx/sites-available/project-a:server { listen 80; server_name project-a.test; root /var/www/project-a; index index.html; location /api/ { proxy_pass http://127.0.0.1:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }/etc/nginx/sites-available/project-b:server { listen 80; server_name project-b.test; root /var/www/project-b; index index.html; location / { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }启用配置sudo ln -s /etc/nginx/sites-available/project-a /etc/nginx/sites-enabled/ sudo ln -s /etc/nginx/sites-available/project-b /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx这里的关键在于nginx 靠server_name区分同一个端口上的不同域名。所以你不需要为每个站点开不同的监听端口而是让 nginx 读取 HTTP 请求头里的Host字段匹配到对应的server块。80 端口统一入站再通过proxy_pass把请求按业务拆到不同的后端端口3000、8080 等这样你在浏览器里输入的是域名实际后端服务各自用独立端口互不干扰。如果项目多到 80 端口都不够用了比如需要一个服务单独监听 8080那就在server块里改成listen 8080;然后宿主机 hosts 里用不同端口访问http://project-c.test:8080。所有端口配置都在虚拟机的 nginx 里做宿主机完全不需要开防火墙端口——因为 NAT 模式下宿主机访问虚拟机本质上是 VMware 虚拟网卡内部通信不经过 Windows 防火墙的入站规则。5.4 这套配置里最容易踩的坑我自己配这套东西时踩过几次坑专门列一下SELinux 干扰反向代理默认安装的 Ubuntu 没有启用 SELinux但如果你换成了 Rocky Linux 等 RHEL 系SELinux 可能阻止 nginx 转发到本地端口。临时排查可以先setenforce 0试试能通就是 SELinux 规则问题再相应配置布尔值setsebool -P httpd_can_network_connect 1。nginx 默认站点抢占请求安装 nginx 后默认有个default站点监听 80。如果你只配置了project-a.test和project-b.test没删除默认站点那么未匹配的域名请求会被默认站点接走返回的是 nginx 欢迎页。建议把sites-enabled里的default连接删掉或者修改默认站点的server_name _兜底逻辑。后端服务没有监听对端口proxy_pass转发不成功先确认后端是否真的在本机端口上跑着。虚拟机里执行ss -tlnp | grep 3000看到LISTEN才说明服务在。很多人配完 nginx 发现 502原因往往是后端根本没启动。hosts 文件被本地 DNS 缓存干扰改完 hosts 但浏览器仍访问旧域名解析结果可以清一下 DNS 缓存ipconfig /flushdns。特别在 Chrome 里chrome://net-internals/#dns也可以清。这套配置跑通之后你的虚拟机就真正变成一个本地开发服务器了。前端代码跑在宿主机里改完代码直接 F5 刷新接口请求自动转发到虚拟机的 nginx 和后端服务一切像是访问真实线上环境一样。多项目并行开发时不用开一堆端口记 IP域名直接区分清爽很多。最后分享一个实用习惯在虚拟机里做完一轮 nginx 配置或系统更新后立刻拍一张快照。我一般是系统刚装好、所有基础配置完成打一个快照然后开发环境装完再打一个快照。这样日常开发把系统搞乱了直接恢复到干净的开发基线而不是恢复到刚装机的裸系统能省下好几个小时的重装时间。