☰
VMware 安装 Ubuntu 20.04 虚拟机:从零配置到快照避坑指南
2026/9/30 19:48:34 网站建设 项目流程

Ubuntu 20.04 这个版本到今天依然有大量人在装,尤其是做机器人、视觉、嵌入式开发的同学,很多工具链的官方文档还停在 Focal Fossa 这一代。我自己的主力机器是 Windows,每次要快速搭一个干净的 Linux 环境,第一反应永远是打开 VMware 建个虚拟机装 Ubuntu 20.04,而不是去折腾双系统。原因很实在:虚拟机可以随时拍快照、随时删掉重来,分区搞坏了不用拿 U 盘救砖,宿主机上的微信、浏览器、Office 一个都不用关。这篇就按我自己的实操顺序,把从零建虚拟机到系统跑起来的完整过程拆开讲,包括那些填参数时容易懵的选项、装完之后必须补的几个动作,以及我踩过的几类坑。不管你是第一次碰 Linux 虚拟机,还是装过好几次但总有小毛病没解决,应该都能从里面捞到点东西。

1. 先想清楚:为什么用虚拟机而不是双系统

1.1 虚拟机与双系统在真实使用中的取舍

很多人一上来就问"虚拟机性能是不是很差",这个问题的答案取决于你要干什么。如果你的目标是跑深度学习训练、编译大型 C++ 工程、做视频渲染,那虚拟机确实会吃亏,因为 CPU 指令要经过一层虚拟化转换,磁盘 IO 也要过虚拟磁盘文件,性能损失通常在 5% 到 20% 之间,具体看负载类型。但如果你的目标是跑 ROS 节点、写 Python 脚本、调试一个 Web 服务、跟着教程学 Linux 命令,虚拟机完全够用,甚至比双系统更舒服。

双系统的优势是性能无损、能直接访问全部硬件,但代价也很明显:切换要走重启流程,两个系统共享磁盘空间需要提前规划好,装错了引导项还可能把 Windows 弄得起不来。我自己早年给一台笔记本装过 Ubuntu 20.04 双系统,结果一次内核更新之后 GRUB 引导顺序乱了,折腾了一晚上才恢复。从那之后,除非客户明确要求物理机环境,我都是用虚拟机先做验证。

虚拟机还有两个双系统给不了的能力:快照和克隆。快照相当于游戏存档,装驱动装崩了、改配置把网络搞没了,回滚一下十秒钟解决。克隆可以复制出一台一模一样的机器,我做分布式测试的时候经常一次克隆三台,改改 IP 就能组个小集群。这两个能力在实际排查问题和做实验的时候价值极高。

提示:如果你的工作涉及需要直接访问 USB 加密狗、串口硬件、PCIe 采集卡,虚拟机的透传虽然有方案,但稳定性不如物理机,这种情况建议老老实实装双系统或者单独备一台机器。

1.2 版本怎么选:Workstation Pro 还是 Player,桌面版还是 Server

VMware 这边的产品线现在比较清爽了:Workstation Pro 是完整版,支持快照、克隆、多虚拟机同时运行、虚拟网络编辑器这些高级功能;Workstation Player 是精简版,个人使用免费,但没有快照和克隆,虚拟网络的可定制程度也低。我的建议是直接用 Workstation Pro,因为现在官方对个人使用场景提供了免费的授权路径,去官网注册个账号按引导走就行。

这里要特别强调一句:不要去网上搜所谓"密钥生成器"或者来路不明的序列号。这类东西一是可能带木马,二是版本对不上会导致激活失败甚至软件异常退出,为了省几分钟埋个雷不划算。正规渠道拿到的授权,用起来心里踏实。

Ubuntu 这边要区分 Desktop 版和 Server 版。Desktop 版带图形界面,适合日常开发、跑 IDE、看仿真窗口;Server 版没有图形界面,占用资源少,适合当服务器练手。新手我强烈建议从 Desktop 版开始,因为图形界面能帮你确认很多状态,比如网络连没连上、磁盘挂没挂上,命令行搞不定的时候还能开个浏览器搜一下。

另外提醒一句,Ubuntu 20.04 LTS 的标准维护期已经走完了,现在处于扩展安全维护阶段。如果你只是本地学习、跑跑实验,不暴露在公网,继续用没什么问题;如果是长期跑的服务器,建议认真评估一下是不是直接上 22.04 或 24.04。我写这篇还是以 20.04 为主,因为大量机器人相关的教程和依赖包都是针对它的。

2. 动手前的准备工作,别急着点下一步

2.1 镜像下载与完整性校验

Ubuntu 20.04 的桌面版镜像文件大概 2.5GB 左右,官方发布页面上会同时提供 SHA256 校验值。下载完之后一定要校验一遍,尤其是用某些下载工具断点续传过的文件,看着下完了实际上尾部可能缺字节,装到一半报"无法读取介质"就是这个原因。

Windows 上校验可以用 PowerShell 里的命令:

Get-FileHash .\ubuntu-20.04.6-desktop-amd64.iso -Algorithm SHA256

Linux 或者 macOS 下更简单:

sha256sum ubuntu-20.04.6-desktop-amd64.iso

把输出的哈希值和官网公布的值逐位比对,一致就说明文件没问题。这一步花不了三十秒,但能省掉后面最难排查的一类故障。

2.2 硬盘空间与内存该怎么算

虚拟机的资源分配不是越多越好,要给宿主机留足余量。我的经验公式是这样的:宿主机内存 16GB 的话,虚拟机给 4GB 到 6GB;宿主机 32GB 的话,虚拟机给 8GB;宿主机只有 8GB,那虚拟机最多给 2GB 到 3GB,再多宿主机自己就开始疯狂读盘了。

CPU 核心数同理,不要把所有核心都分给虚拟机。假设宿主机是 8 核 16 线程,虚拟机给 2 核或者 4 核就够日常开发用。分太多的后果是宿主机响应变慢,而且虚拟机内部调度反而容易抖动。

磁盘空间的估算要分两块看。系统本身加上常用开发工具,40GB 是起步线;如果你还要装 ROS、编译大型工程、下载数据集,建议直接给 80GB 到 100GB。虚拟磁盘的"精简置备"模式意味着你给 100GB 不代表立刻占用 100GB 物理空间,它是用多少占多少,所以放心给大一点。

注意:虚拟机磁盘文件必须放在有足够剩余空间的物理盘上。很多人把虚拟机放在 C 盘,结果系统盘剩 10GB 就红了,虚拟机一开就报磁盘空间不足。养成习惯,单独建一个目录,比如D:\VMs\,所有虚拟机都放这里。

2.3 宿主机必须打开的硬件虚拟化开关

这一步是新手最容易漏掉的。VMware 要跑得动 64 位虚拟机,宿主机 CPU 的虚拟化扩展必须打开。Intel 平台叫 VT-x,AMD 平台叫 AMD-V,需要在 BIOS 或 UEFI 里手动开启。判断有没有开,任务管理器"性能"标签页里看 CPU 那一栏,会有一行"虚拟化:已启用/已禁用"。

还有一类情况是开关打开了但还是不行,原因是 Windows 上开启了 Hyper-V 相关的功能,包括 WSL2、Windows 沙盒、内核隔离里的内存完整性检查、设备防护这些。这些功能会抢占虚拟化层,导致 VMware 报错或者性能大幅下降。我遇到过一台机器,虚拟机跑起来像幻灯片,查了半天发现是开了内存完整性。关掉重启之后流畅得完全不像同一台机器。

判断方法也简单:如果 VMware 启动时弹窗提示"此平台不支持虚拟化的 Intel VT-x/EPT",或者运行起来特别卡,先去检查这几项。Windows 专业版可以在"启用或关闭 Windows 功能"里看到 Hyper-V 是否被勾选,家庭版则重点看"内核隔离"设置。

3. 新建虚拟机的参数怎么填才不返工

3.1 新建向导里每一项背后的含义

打开 Workstation,选"创建新的虚拟机",我一般选"自定义(高级)",因为典型模式给的默认值往往偏小,后面还是要改。硬件兼容性保持最新版本就行,除非你要把虚拟机文件拷到低版本 VMware 上用。

客户机操作系统这一页选"Linux",版本选"Ubuntu 64 位"。虚拟机名称建议用有意义的名字,比如ubuntu2004-ros-dev,别用默认的Ubuntu 64 位,不然克隆几台之后你根本分不清哪台是哪台。位置就是前面说的D:\VMs\这样的独立目录。

处理器配置页,按前面算的给。内存页同样。网络类型这一页很关键,三个选项的区别值得说清楚:

网络模式工作方式适用场景主要坑点
桥接(Bridged)虚拟机和宿主机同处一个物理网段,向路由器要 IP需要局域网内其他设备访问虚拟机,比如手机测页面公司网络可能限制每个设备的 MAC 地址,容易拿不到 IP
NAT虚拟机借宿主机 IP 出去,宿主机做路由日常上网、下载包、做实验外部设备默认访问不到虚拟机,需要手动做端口转发
仅主机(Host-only)只能和宿主机通信,出不了网做纯隔离的渗透测试实验、断网环境验证完全没法更新软件包

日常开发我选 NAT,省心。需要局域网访问的时候临时加一块桥接网卡,比一开始就选桥接然后发现拿不到 IP 要舒服得多。

磁盘页选"创建新虚拟磁盘",容量按前面估算给,不要勾选"立即分配所有磁盘空间",勾了会立刻占满物理磁盘。磁盘存储为单个文件还是拆成多个文件?单个文件性能略好,但单文件超过 4GB 之后没法直接拷到 FAT32 的移动硬盘上。现在基本都是 NTFS 或者 exFAT,单文件没问题,我一般选单个文件。

3.2 生成之后值得手动改的几处配置

虚拟机建好但还没开机的时候,进"编辑虚拟机设置"再检查一遍。有几个地方向导里没提但很有用。

USB 控制器:默认是 USB 2.0,如果你要用 USB 3.0 的移动硬盘或者高速调试器,改成 USB 3.1。改了之后虚拟机里的 Ubuntu 才能识别到 USB 3.0 设备。

声卡:如果虚拟机只当开发环境用,声卡可以直接移除或者取消"启动时连接",能省一点资源,也避免宿主机音频设备被抢占。

共享文件夹:这个可以在装完系统后再配,也可以在设置里先加上。先加的时候记得勾选"在 Windows 客户机中映射为网络驱动器"是不需要的,那是给 Windows 虚拟机用的。

显示器:默认"使用主机设置",最多支持 1 台显示器。如果你打算给虚拟机双屏,这里要改成"指定监视器设置",把数量调上去。

配置文件的细节如果感兴趣,可以在虚拟机目录里找到扩展名为.vmx的文本文件,用记事本打开就能看到所有硬件参数。比如memsize = "8192"是内存大小(单位 MB),numvcpus = "4"是 CPU 核心数。改这个文件必须在虚拟机关机状态下进行,改完保存再开机才生效。这是排查一些诡异问题的好入口,比如虚拟机莫名只认到 1 个核心,很可能就是这里写死了。

4. Ubuntu 20.04 安装过程实操记录

4.1 引导启动与安装模式选择

虚拟机设置里选中"CD/DVD",指向前面下载好的 ISO 文件,勾上"启动时连接"。点"开启此虚拟机",会先看到 VMware 的启动画面,然后进入 GRUB 菜单。这里有个细节:如果几秒内不操作,它会自动进入默认项,如果宿主机性能一般,建议用方向键选中"Ubuntu"再按回车,不要等它自动跳。

进入之后会有一段自检和加载过程,屏幕左下角有个键盘图标和一个无障碍图标。想省事可以直接等它进安装界面,想自定义语言和辅助功能就先点一下。

安装界面第一步选语言,选中文或者英文都行。我习惯选英文,原因是命令行下的报错信息、日志、搜索结果全是英文,中文界面下遇到问题去搜反而要多翻译一层。如果你习惯中文,选中文完全没问题,只是注意某些老教程里的菜单路径可能对不上。

第二步是"更新和其他软件",选"正常安装"。这里有个选项叫"安装 Ubuntu 时下载更新",我建议第一次装的时候取消勾选,因为安装过程本身就要读写大量文件,再叠加下载更新会明显变慢,还容易在网速不稳的时候卡住。等系统跑起来之后再统一更新,可控得多。第三方软件那个勾也可以先不打,后面需要什么装什么。

4.2 分区方案怎么定,别用默认的整盘

这一步是虚机和双系统最容易出分歧的地方。虚拟机里因为整块虚拟磁盘都归 Ubuntu 用,选"清除整个磁盘并安装 Ubuntu"是不会影响宿主机的,安全性上没有任何问题。但我还是建议选"其他选项"手动分区,理由有两个:一是手动分区能让你彻底搞清楚 Linux 的目录结构,二是后面要做磁盘扩容或者迁移的时候,知道分区布局会省很多事。

针对一块 100GB 的虚拟磁盘,我通常这么分:

挂载点建议大小文件系统说明
EFI 系统分区512MBfat32仅 UEFI 启动时需要,传统 BIOS 可跳过
/boot2GBext4存放内核和引导文件,独立出来避免根分区满了开不了机
/(根)40GBext4系统和软件包都在这,给大点留余量
swap4GBswap内存 8GB 以下建议与内存等大或略大,8GB 以上给 4GB 够用
/home剩余全部ext4个人数据和配置都在这里,重装系统时可以保留

swap 分区的争议一直很大。现在的观点是内存足够大的话不需要太大 swap,甚至可以用 swapfile 代替分区。但虚拟机有个特殊场景:挂起和恢复对 swap 有一定依赖,而且做实验的时候经常要跑一堆进程吃内存,所以我习惯留一个 4GB 的 swap 兜底。

分区的时候要特别注意"安装启动引导器的设备"这个下拉框。UEFI 模式下应该指向 efi 分区对应的磁盘(比如/dev/sda),千万不要指到某个具体分区上,指错了会导致引导装不上,重启之后直接进 BIOS。

4.3 用户设置与安装完成后的第一轮操作

分区确认之后会提示"将以下分区格式化",核对一遍没问题就继续。接下来选时区,国内选 Shanghai。然后是用户信息,这里有几个点值得说。

用户名建议全小写、不带特殊字符,因为很多脚本和路径拼接都假设用户名是纯小写字母。密码设一个你记得住的,但别用 123456,因为后面sudo要频繁输密码。计算机名同理,全小写加短横线比较稳妥,比如ubuntu-dev。

安装过程大概十几分钟,取决于宿主机磁盘速度。装完提示重启,重启时如果卡在黑屏或者一直转圈,先等一两分钟,虚拟机首次启动有时候要做文件系统检查。如果超过三分钟还是没动静,强制关机,检查一下是不是引导装错了位置。

进入桌面之后,我固定做这几件事:

第一件,打开终端跑一次全面更新:

sudo apt update sudo apt upgrade -y sudo apt autoremove -y

第二件,装 open-vm-tools 的桌面版。这是 Ubuntu 官方维护的虚拟机工具包,比手动挂载 VMware Tools 的 ISO 要省事,而且更新走 apt 流程:

sudo apt install -y open-vm-tools open-vm-tools-desktop

装完之后重启,分辨率能自动跟随 VMware 窗口大小,剪贴板双向复制和文件拖拽也都能用了。

第三件,换软件源。默认源在国内速度不理想,换成国内镜像站会快很多。编辑之前先备份:

sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo sed -i 's|http://archive.ubuntu.com|https://mirrors.tuna.tsinghua.edu.cn|g' /etc/apt/sources.list sudo sed -i 's|http://security.ubuntu.com|https://mirrors.tuna.tsinghua.edu.cn|g' /etc/apt/sources.list sudo apt update

改完跑一次apt update,如果没报错就说明源可用。

第四件,拍第一个快照。这是整个流程里我最看重的一步。快照名字用base-clean-install这种格式,一眼就能看出状态。后面不管装什么搞崩了,回滚到这个点都是干净环境。

5. 装完之后那些容易卡住的问题

5.1 网络类问题:没有适配器、拿不到 IP、访问不到宿主机服务

"虚拟机没有网络适配器"是我被问得最多的一个问题。表现是ifconfig或者ip addr里只有 lo,没有 ens33 之类的网卡。绝大多数情况下不是系统问题,而是虚拟机设置的"网络适配器"那一栏被取消了勾选,或者选了"仅主机"模式而宿主机上对应的虚拟网卡被禁用了。

排查顺序是这样:先在 VMware 的"编辑虚拟机设置"里确认网络适配器存在且勾选了"启动时连接";然后看 VMware 菜单里"编辑 - 虚拟网络编辑器"中,对应模式的虚拟网卡(VMnet0/VMnet1/VMnet8)是不是正常工作;最后再进系统里看网卡有没有被识别。

如果是 NAT 模式下能上网但访问不了宿主机上的服务,这是因为 NAT 网络里宿主机通常是被屏蔽的,需要在 VMware 的 NAT 设置里加端口转发规则。反过来,如果你希望从宿主机直接访问虚拟机上的 Web 服务,最简单的方式是给虚拟机加一块仅主机网卡,然后用那个网段的 IP 访问。

还有一个很隐蔽的坑:克隆虚拟机之后 MAC 地址冲突。VMware 在克隆的时候会询问是否重新生成 MAC 地址,如果选了"否",两台虚拟机在同一个网络里就会出现 IP 争抢,表现为网络时通时断。遇到这种情况,在虚拟机设置里点"生成新的 MAC 地址",重启网卡就好了。

5.2 显示与虚拟机工具相关的问题

关于"继续运行脚本未能在虚拟机中成功运行",这个提示一般出现在你手动挂载 VMware Tools 的 ISO 然后执行安装脚本的时候。原因是 VMware 自带的那套工具安装脚本对新版本内核的适配经常滞后,编译内核模块失败。解决思路很直接:别用 ISO 里的老版本,改用 apt 里的 open-vm-tools。如果已经装了 ISO 版,先卸载再装 apt 版。

sudo apt purge -y open-vm-tools open-vm-tools-desktop vmware-tools sudo apt install -y open-vm-tools open-vm-tools-desktop sudo reboot

分辨率不能自动调整,通常也是 open-vm-tools-desktop 没装或者没生效。可以先确认服务状态:

systemctl status open-vm-tools systemctl status vmtoolsd

如果服务是 active 但分辨率还是不对,试试手动设置:

xrandr --output Virtual1 --mode 1920x1080

关于显卡驱动,这里必须澄清一个常见的误区。热词里有"ubuntu20.04安装显卡驱动 apt install nvidia-driver-535",这条命令在物理机上确实很常用,但在 VMware 虚拟机里跑是没有意义的。虚拟机看到的显卡是 VMware 模拟出来的 SVGA 设备,lspci | grep -i vga出来的是 VMware 自己的标识,NVIDIA 的闭源驱动根本不认识它。强行装上去轻则报错,重则 X 服务起不来直接黑屏。

虚拟机里真正的图形加速走的是 open-vm-tools 里的 3D 驱动通道,需要在虚拟机设置里勾选"加速 3D 图形"(注意这个选项一旦勾选,内存分配会受一定限制)。如果你确实需要用到物理显卡的算力,那要靠 PCI 直通把独显整个透给虚拟机,这需要宿主机支持 IOMMU、主板和显卡都有一定要求,完全是另一个话题了。

如果你装 Ubuntu 20.04 的最终目的是部署 ORB-SLAM3 这类视觉项目,那显卡驱动的问题在虚拟机里基本无解,因为这类项目很多环节依赖 CUDA,而 CUDA 要求真实的 NVIDIA 驱动栈。我的建议是:虚拟机里先把代码编译通过、流程跑通,用 CPU 模式验证逻辑,等真要跑实时性能测试的时候再上物理机。这样能省掉大量在虚拟机里折腾驱动的无效时间。

5.3 其他高频故障排查速查

现象可能原因处理方式
开机直接进 BIOS 或报 no bootable device引导安装位置选错重新安装,引导器指向磁盘而非分区
界面卡死、鼠标动不了3D 加速与显卡驱动冲突虚拟机设置里关闭 3D 加速,或在 GRUB 里加 nomodeset 参数
系统时间每次都慢几个小时挂起恢复后时钟漂移安装 open-vm-tools 后执行sudo timedatectl set-ntp true
虚拟机整体卡顿严重宿主机开启了 Hyper-V 或内存完整性关闭相关功能并重启宿主机
磁盘写满但看着还有空间虚拟机磁盘快照占用过多在快照管理器里删除旧快照,注意删除快照本身也耗时
剪贴板无法双向复制缺少 open-vm-tools-desktop安装后重启,确认 vmtoolsd 进程在跑
宿主机访问不到虚拟机内的网站NAT 模式默认隔离加仅主机网卡,或配置 NAT 端口转发
复制进来的文件没有执行权限共享文件夹挂载参数限制改用 scp 传输,或在挂载参数里调整权限选项

最后一行说的共享文件夹,有个细节值得展开。Ubuntu 20.04 下共享文件夹默认挂载在/mnt/hgfs,但新版内核里这个挂载不再自动完成,需要手动执行:

sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other -o uid=1000 -o gid=1000

allow_other让普通用户也能访问,uid和gid指定文件归属,这样复制进去的文件权限才正常。要做成开机自动挂载,把这行写进/etc/fstab:

.host:/ /mnt/hgfs fuse.vmhgfs-fuse allow_other,uid=1000,gid=1000,defaults 0 0

6. 我从这些年的虚拟机使用里攒下的几点经验

6.1 快照要有策略,别当成无限存档

快照很好用,但滥用会出问题。快照的原理是把当前磁盘状态冻结,后续写入全部记到增量文件里,所以快照开得越多,磁盘 IO 越慢,占用的空间也越大。我见过有人开着七八个快照跑了大半年,虚拟机磁盘文件从 40GB 涨到了 200GB,卡得没法用。

我的做法是:装完干净系统拍一个,叫base;装完主要开发环境拍一个,叫dev-ready;做某个有风险的实验之前临时拍一个,名字带上日期,实验做完确认没问题立刻删掉。删除快照的时候要留意,VMware 需要把增量数据和基础磁盘合并,这个过程可能持续十几分钟,期间千万别强行关虚拟机。

另外,拍快照之前最好把虚拟机关机,而不是在运行状态下拍。运行状态快照会连同内存一起保存,文件体积大,恢复之后网络状态有时候也会异常。

6.2 克隆与磁盘扩容的取舍

需要多台机器做实验的时候,克隆比重新装一遍快得多。这里要区分完整克隆和链接克隆:完整克隆是彻底复制一份,占用完整的磁盘空间,但独立性强,删掉母盘也不影响;链接克隆共享母盘的只读数据,省空间,但母盘一旦损坏,所有链接克隆全部报废。日常用完整克隆更省心。

克隆完第一件事是改主机名和 IP,不然几台机器重名会在网络里出乱子:

sudo hostnamectl set-hostname ubuntu-node2 sudo sed -i 's/ubuntu-dev/ubuntu-node2/g' /etc/hosts

磁盘空间不够用的时候,扩容流程分两步。先在 VMware 设置里把磁盘容量调大,这一步只是改了大小的声明,虚拟机内部还没感知到;然后进系统用gparted或者命令行扩分区和文件系统。如果有快照存在,扩容操作会被拒绝,必须先删掉所有快照。这也是我建议平时别留太多快照的原因之一,关键时刻它会挡路。

6.3 后续可以怎么接着折腾

环境跑起来之后,往哪个方向走取决于你的目标。做机器人的话,Ubuntu 20.04 对应的是 ROS Noetic,这是 ROS1 的最后一个长期支持版本,安装流程比较成熟:

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu focal main" > /etc/apt/sources.list.d/ros-latest.list' sudo apt install -y ros-noetic-desktop-full

装完记得source /opt/ros/noetic/setup.bash,并且写进.bashrc。

做通用开发的话,把 zsh、oh-my-zsh、tmux、docker 这套配起来,虚拟机基本就变成一个随时能带走的工作站。Docker 在虚拟机里跑还有一个额外好处:外层的虚拟机本身就是一层隔离,你可以在里面随便折腾容器而不用担心影响宿主机。

我个人最后的体会是,虚拟机最大的价值不是省钱,而是它把"试错成本"压到了最低。随便改、随便装、随便搞崩,回滚一次就回到原点。这台 20.04 的虚拟机我用了很久,前后回滚过十几次,里面装过 ROS、编译过大型工程、也跑过 Web 服务,每次搞坏了都不心疼。如果你正准备开始,建议就在第一次装完、更新完、确认网络和显示都正常的那一刻,老老实实拍下一个快照——这个动作会在此后无数次救你的命。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询