1. 动手之前,先想清楚:为什么用 VirtualBox 跑 Ubuntu
说实话,现在装虚拟机的主流选择就那么几个:VMware Workstation、VirtualBox,还有 Windows 自带的 Hyper-V。我自己电脑上 VMware 和 VirtualBox 都留着,但如果只是想在 Windows 里快速起一个 Ubuntu 环境做开发、测试或者学习 Linux 操作,我绝大多数时候会打开 VirtualBox。
原因很直接。第一,VirtualBox 对个人用户完全免费,没有授权弹窗,也不用去找什么许可证。第二,它足够轻,安装包一百多兆,装完即用,不像 Hyper-V 那样需要修改 Windows 功能开关、折腾固件虚拟化设置,重启一遍才能用。第三,VirtualBox 的快照、克隆、网络模式这几项功能,对于日常搭环境来说完全够用,稳定性也经历过多年的考验。
当然,这不是说 VirtualBox 没坑。正相反,我见过太多人卡在几个非常基础的地方:装完系统分辨率上不去、虚拟机里没网、剪贴板和宿主机不通、拖个文件进去半天没反应。这些问题本身都不是什么大毛病,大多是因为漏装了一个东西,或者某个默认配置没有调对。
这篇文章就打算把这些事一次讲透。我默认你用的是 Windows 宿主机,目标是在上面通过 VirtualBox 跑一个 Ubuntu 22.04 LTS 的虚拟机。整个过程我会按实际操作的顺序来走,从下载镜像到装完系统之后的一系列常规配置,尽量把每一步为什么要这样做也说清楚,而不是只丢给你一串下一步下一步的点击路径。
适合看这篇文章的人,我大概分三类:
- 刚接触 Linux,想先弄个虚拟机练手的零基础用户;
- 在 Windows 上做开发,工作流里需要连 Linux 服务器或者跑 Linux 环境的后端、运维、测试同学;
- 想在自己电脑上搭一个隔离环境做实验,又不想折腾双系统的人。
如果你属于其中某一种,那这篇应该能帮你少走一点我当时趟过的弯路。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 版本选型和下载准备:这一步决定了你后面会不会翻车
2.1 VirtualBox 版本选哪个
VirtualBox 的版本更新速度不算快,但也不算慢,Oracle 基本保持着一年两三个大版本的节奏。很多人在第一步就栽了跟头:官网一打开,看到最新版本号是 7.x,直接下载安装,结果发现和某个旧版 Ubuntu 镜像配合时出现了兼容性问题。或者反过来,公司电脑上装的还是 5.2.44 这种老版本,打开新版创建的虚拟机直接报错。
我的建议很简单:下载当前官网提供的最新稳定版,不要追着测试版跑,也不要翻出四五年前的版本继续用。
这里补充一个很多教程不会告诉你的细节:VirtualBox 从 6.1 开始对 Ubuntu 22.04 这样的新版内核支持得已经相当好了,到 7.0 以后,无论是 USB 3.0 设备直通、Wayland 会话支持,还是高分屏下的缩放体验,都有明显改善。如果你装的是 Ubuntu 22.04 或者更新的 24.04,建议用 VirtualBox 7.0 以上的版本。
另外,安装完 VirtualBox 主程序之后,记得去官网下载对应版本的 Extension Pack(扩展包)。这个包提供了 USB 2.0/3.0 设备直通、RDP 远程桌面、磁盘加密这些功能。不加这个包,虚拟机也能跑,但很多日常用得上的功能会被锁住。扩展包的版本号必须和主程序严格一致,不分前后脚更新,否则 VirtualBox 会提示版本不匹配,拒绝加载。
提示:下载扩展包时看准自己装的主程序版本号。比如主程序是 7.0.18,扩展包也必须下载 7.0.18。在 VirtualBox 主界面的“帮助 > 关于”里能看到精确的版本号。
2.2 Ubuntu 镜像用哪个版本
Ubuntu 的镜像大概分两类:桌面版(Desktop)和服务器版(Server)。如果你是想在虚拟机里看到图形界面、拿来当日常 Linux 环境去操作,选 Desktop 版;如果你纯粹是想搭一个命令行环境跑服务,那 Server 版更合适,占用资源也少。
但如果让我只推荐一个的话:初学者直接上 Ubuntu 22.04.3 LTS 桌面版,而不是最新刷出来的 24.04 LTS。原因不复杂,22.04 的知识积累时间更长,网上搜到的问题帖九成以上都基于这个版本,真遇到卡住的情况,照方抓药成功率更高。24.04 的内核、GNOME 版本都更新了,有些老问题消失了,但也可能蹦出一些新问题。等你在 Ubuntu 里攒够了经验再升级,是更稳的路径。
镜像下载的位置也有讲究。网上搜到的那些第三方站点,什么“xx下载站”“xx系统之家”,尽量别碰,一个不小心就下载到捆绑了额外东西的镜像,或者干脆是损坏的文件。正规渠道就两个:
- Ubuntu 官网:ubuntu.com/download/desktop
- 国内各大学的镜像源(比如清华、中科大),速度比官网快得多:mirrors.tuna.tsinghua.edu.cn 这类地址
下载的时候留意一下文件后缀,正常应该是 .iso 格式,体积大概 4.7GB 左右。下载完可以顺手校验一下 SHA256,官网会给出来,Windows 下用 PowerShell 执行 Get-FileHash 就能算,这一步不算必须,但它能避免两个小时的安装过程进行到一半突然报错,发现是镜像坏了。
2.3 宿主机资源确认
虚拟机的本质是把物理机的 CPU、内存、硬盘、网络这四样资源切一块出来给虚拟机用。所以动手之前先看一眼自己的 Windows 宿主机配置,心里有个数:
- 内存:宿主机最少留出 8GB,虚拟机才能分 4GB 走。如果你的机器只有 8GB 内存,那虚拟机的内存建议最多分 3GB,否则 Windows 自己会先卡到怀疑人生。
- CPU:建议分配 2 核起步,如果你是 6 核以上的处理器,分配 4 核给虚拟机体验会好很多。
- 磁盘:Ubuntu 22.04 桌面版安装完纯净系统大概占 6~8GB,加上后续装 Docker、开发工具这些,建议分配 40GB 以上的动态磁盘空间。
这些参数理论上讲是越小越不占资源,但你也不想装完系统之后发现磁盘空间不够,再做扩容操作。那可是一趟新的折腾。
3. 创建虚拟机的核心流程:我这几个选项是怎么选的
3.1 新建虚拟机的参数该怎么填
VirtualBox 主界面点“新建”,弹出的向导看起来简单,里面的选项却有不少讲究。
实例名称随意,但建议起得有辨识度,比如 “Ubuntu2204-Dev”,后面创建多台虚拟机的时候好区分。文件夹路径保持默认就行,除非你的 C 盘空间确实告急,那样的话可以指到其他盘符,但注意路径里不要带中文和空格,规避掉一些莫名其妙的权限和路径解析问题。
“ISO 映像”这一步是 VirtualBox 7.0 之后变方便的地方——可以直接在下拉列表里选到你下载好的 Ubuntu ISO 文件。选择之后,VirtualBox 会在“类型”栏自动识别为 Ubuntu,“版本”栏自动填上 Ubuntu (64-bit)。如果你的下拉列表里版本识别成别的名字,比如 Unknown,说明 ISO 文件有问题或者你选错了文件,回去重新下载。
然后是“硬件”设置界面。内存大小前面说了,建议 4GB,但要结合宿主机实际内存来调。CPU 核心数给 2 个以上,勾选“启用 EFI”吗?对于 Ubuntu 22.04 来说,不需要特意勾选 EFI,保持默认的 BIOS 兼容模式反而更稳。为什么?因为 Ubuntu 的安装器对两种引导模式都支持得很好,但 VirtualBox 默认的 BIOS 模式遇到问题时的排查路径更简单,网上可参考的资料也更多。
磁盘创建界面,“现在创建虚拟硬盘”,文件大小我建议设置成 50GB,但关键在“文件存放于哪个盘、什么格式”这两个问题上。
- 硬盘文件类型:选 “VDI(VirtualBox 磁盘映像)”,这是 VirtualBox 的自家格式,后续要做快照、克隆操作兼容性最好。
- 存储在物理硬盘上:选 “动态分配”。这一项的差别在于:动态分配的文件是随着虚拟机里实际写入数据逐渐增长的,初始可能只有 2GB;固定大小则是立刻把 50GB 全部占满成一个平铺文件。动态分配更省空间,代价是性能略低一点,但日常跑桌面系统感知不强。
- 文件位置和大小:位置默认跟着虚拟机文件夹走,大小可以调到 50GB。
这里多说一句,网上很多教程会让新手直接点“完成”,把磁盘大小留成默认的 10GB 或者 12GB。亲测下来这个容量装完系统就快满了,后面想再装个 OpenCV、PyTorch 之类的开发库都要精打细算,别问我怎么知道的,第一批虚拟机全死在这上面。
3.2 虚拟机的系统设置里还有几个务必改的地方
虚拟机创建完成后,先别急着点“启动”,右键虚拟机,进入“设置”,还有几个配置建议先调整到位。
第一,“系统 > 处理器”里有个“扩展特性”选项,勾选 “启用 PAE/NX”。Ubuntu 内核会用上这个特性,如果你的 CPU 比较老,不开启可能导致启动阶段直接黑屏。
第二,“显示 > 显存大小”,默认给的 16MB 明显偏小,Ubuntu 桌面版跑起来之后,拖动窗口和动画都会感觉卡。把它拉到 128MB。同时,“图形控制器”这一项,VirtualBox 7.0 之后默认是 VMSVGA,这个对 Linux 桌面的 X.org 和 Wayland 兼容性都还可以,保持默认就好,别手痒改成 VBoxSVGA。
第三,“存储 > 存储介质”里,确认一下有没有加载好 Ubuntu 的 ISO 文件。虚拟光驱的位置会有一个“没有盘片”的空光驱图标,右侧分配光驱里选到你下载的 ISO。这一步漏掉的话,启动虚拟机后你会看到一行黑底白字 “FATAL: No bootable medium found”,很多第一次弄的人就在这一步慌神。
第四,“网络”这一页先不动,等系统装完再改,原因后面网络配置那一节会详细讲。
注意:我在安装系统前通常还会把“音频”选项里的“启用音频”勾掉,Ubuntu 桌面在虚拟机里的音频驱动偶尔会导致 PulseAudio 进程报错,虽然不影响使用,但每次开机都在系统日志里刷错误看着心烦。等你熟悉了再折腾音频不迟。
3.3 启动虚拟机:光标抓取和释放这个基础小操作
双击虚拟机列表里的 Ubuntu 条目启动。第一次启动会看到一个白色的小窗口,里面的画面最终会停留在紫色或黑底色的 GRUB 引导菜单上,这个时候 ISO 已经被正确地加载进虚拟光驱了。
这里有个绕不开的小知识点:鼠标的“抓取”和“释放”。当你在虚拟机窗口内点击鼠标时,VirtualBox 会把鼠标光标捕获进虚拟机系统里,鼠标会从你的 Windows 桌面上“消失”,整个光标只在虚拟机窗口里移动。想释放出来,按键盘右侧的 Ctrl 键即可。这枚按键是 VirtualBox 的“热键”,如果你用单手指头按不过来的话,在“管理 > 工具 > 偏好设置 > 输入”里可以改成别的组合键。
如果你发现 Ubuntu 安装界面里鼠标动不了,或者鼠标乱飘,不要怀疑人生,就是还没有点进虚拟机窗口里,在窗口中央单击一下就行了。
4. Ubuntu 安装过程全记录:哪些选项选错会导致返工
4.1 安装引导中出现 GRUB 菜单时怎么选
虚拟光驱引导起来之后,会先显示 GRUB 引导菜单,两个主要选项:
- Try or Install Ubuntu(尝试或安装 Ubuntu)
- 其他高级选项
直接选第一个回车。此时系统会加载一个完整的 Ubuntu 试用环境,加载时间取决于你的镜像存放在机械硬盘还是固态硬盘,一般半分钟到一分钟。
在试用环境里,可以双击桌面上的 “Install Ubuntu” 图标开始正式安装。我这个做法看起来多了一步,但它是保险的:可以先进试用环境确认一下鼠标键盘是否正常、网络是否已经连通,如果试用阶段就有问题,说明虚拟机配置哪里不对,直接关掉调整,不用白等一个完整的安装流程。
4.2 语言、键盘布局和网络这几个选择不痛但会影响后续体验
安装器会按步骤让你选择语言、键盘布局、网络连接、安装类型等,这里逐一说下我当时的选择,以及为什么。
- 语言:选 English 还是 简体中文,看个人习惯。选中文的话,后续系统的目录名不会变成中文(新建的主目录和用户目录依然是英文),主要影响的是界面语言,放心选。
- 键盘布局:选 English (US) 是最保险的。除非你用的是带德语、法语的键盘布局没改过的机器,否则不要为了“中文输入法”这一点去选 “Chinese”。中文输入法和键盘布局是两个层面的事,键盘布局不对才是真的麻烦,那些特殊字符键位全错位。
- 无线网络连接:安装阶段先不连。这个建议和主流的“安装时联网下载更新”观点不同,我的经验是安装时联网反而容易踩到 Ubuntu 源的网络问题,导致安装过程卡住。先断网安装,装完再调网络和软件源是更可靠的做法。
下一步是 Installation type(安装类型)。这一步极其重要,因为 VirtualBox 给你创建的那块虚拟磁盘是一个空盘,上面没有别的操作系统,所以正确选项是:
- Erase disk and install Ubuntu(清除整个磁盘并安装 Ubuntu)
这里很多没接触过的朋友会慌——“清除整个磁盘,我的 Windows 会不会没了?” 不会。在虚拟机环境里,所谓的“整个磁盘”指的是 VirtualBox 创建的那个 VDI 虚拟磁盘文件,它只是 Windows 下的一个普通文件,和物理磁盘是隔离的。这个选项就等于告诉安装器:“这块干净的地盘我全给你,随便造。”
再往下,安装器会问是否启用 LVM 或者全盘加密。保持默认 “Erase disk and install Ubuntu” 即可,暂时不需要启用这些高级选项。加上 LVM 和加密确实能提高安全性和灵活性,但如果遇到系统启动故障,需要 chroot 进系统修复时,多了 LVM 和加密这两层会给排查增加额外成本,初期不建议给自己加戏。
4.3 账号信息设置:唯一一个必须认真对待的步骤
最后一步 Your name / Computer name / Username / Password 这四个字段,决定你之后每次使用这台虚拟机时的身份和主机名,值得认真填。
- Your name:显示名称,随意。
- Computer name:主机名,默认会基于用户名自动生成。这里不要使用带有空格或下划线的名字,主机名里的非法字符会给你后面配置 SSH、Docker 时添一堆无用麻烦。
- Username:登录名,建议全小写字母,不要用管理员权限去跑永久性服务。
- Password:可以顺手设一个,方便自己日常操作。同时安装器会问你 “Require my password to log in”,这里建议选 Log in automatically(自动登录)。原因很简单,这是开发虚拟机,不是生产环境,每次打开 VirtualBox 后还要输一遍密码,浪费时间没有意义。
全部设置完成后,安装器会开始往虚拟磁盘写入系统。这个阶段会出现一段轮播式的展示页,什么“欢迎使用 Ubuntu”之类的,别急着离开,耐心等它跳完。有时候表面上看进度条卡住不动,其实是在安装引导器。判断系统装好没装好的标志,是最后弹出一个 “Installation Complete, Please restart the computer” 的消息。点击 “Restart Now” 后,如果提示你移除安装介质,直接把虚拟光驱里的 ISO 文件移除,然后回车重启。
4.4 开机进入黑屏或者循环重启的排查思路
这部分是额外加进来的,因为装完系统重启之后最容易出状况。这时候你需要知道一些基本排查手段,而不是干瞪眼。
如果重启后虚拟机停在黑屏,或者一直循环重启:
- 先强制关闭虚拟机(虚拟机菜单里的 “关闭 > 强制关机”)。
- 右键虚拟机进入“设置 > 存储”,确认虚拟光驱里已经不再挂载 ISO 文件。
- 重新启动。如果仍然无法进入系统,尝试在 GRUB 菜单出现时按
Shift或者Esc(如果系统已经安装成功,GRUB 菜单默认隐藏,需要按键唤起),在 GRUB 菜单中选择 “Advanced options for Ubuntu”,进入后选带 “(recovery mode)” 的内核项,从恢复模式进入系统。 - 如果恢复模式能进,说明内核本身没有问题,问题多半出在显卡驱动或 Wayland 会话上。在恢复菜单里选择 “root Drop to root shell prompt”,在 shell 里执行下面的命令,把系统组件更新一遍:
bash复制apt update && apt upgrade -y
然后安装 VirtualBox 的驱动增强包(安装方法与作用下一节专门说),再重启,黑屏问题大概率就解决了。
这一套排查思路不只是针对 VirtualBox,在任何虚拟机环境里装 Linux 遇到引导问题都是同样的路子:先确认引导介质是否已移除,再确认进入恢复模式是否能行,最后把驱动和内核刷新到一致。有了这个思路,你在虚拟机这个场景里就基本不会因为“开不了机”这种问题手足无措。
5. 安装增强功能:让虚拟机从“能用”变成“好用”
5.1 没有增强功能的虚拟机是一间贴满报纸的屋子
Ubuntu 装完第一次进系统,画面默认是 800x600 的分辨率,窗口小的可怜,而且你没有办法把虚拟机窗口拉大,因为分辨率是硬的。鼠标从虚拟机里移回 Windows 桌面必须要按键释放,剪贴板完全不通,虚拟机里的文件拖到宿主机想都不用想。
这些痛点,一个模块全都能解决:VirtualBox Guest Additions(增强功能)。
Guest Additions 是一套由 VirtualBox 提供的驱动程序集合,装在虚拟机内部的系统里,作用大致可以理解为给虚拟机配齐一套完整的“硬件驱动”:动态分辨率适配、鼠标无缝切换、共享剪贴板、拖放文件、共享文件夹、更好的显卡加速等等。没装它之前,虚拟机像一个不合作的客人;装完之后,虚拟机窗口和普通应用窗口的体验几乎没有差别。
很多人说 VirtualBox 不好用,窗口小、鼠标卡,其实 80% 的抱怨都来自缺了这步安装。
5.2 增强功能手动安装:按下正确的按钮,还要敲几行命令
安装 Guest Additions 有两种方式,我推荐用手动方式,因为可控性更强,出问题也知道出在哪。
第一步,启动 Ubuntu 虚拟机,在菜单栏点击 “设备(Devices) > 安装增强功能(Insert Guest Additions CD image)”。这个操作会把一个虚拟的光盘镜像装进虚拟光驱。
第二步,进入 Ubuntu 桌面后,打开文件管理器,在侧边栏找到挂载上来的VBOXADDITIONS 光盘,双击打开。你会发现里面有一堆文件,文件名分类清晰:
VBoxLinuxAdditions.run:这是适用于 Linux 的安装脚本;VBoxWindowsAdditions.exe:这是 Windows 用的;- 其他平台的安装文件。
在文件管理器里右键空白处,选择 “在终端中打开(Open in Terminal)”。
第三步,安装前建议先安装编译工具链,因为 VirtualBox 的模块需要通过内核源码编译。不同版本的 Ubuntu 系统,包的名字略有不同,以 22.04 为例执行:
bash复制sudo apt update
sudo apt install -y build-essential linux-headers-$(uname -r)
linux-headers-$(uname -r) 这个命令会自动匹配当前运行内核版本的开发头文件,确保模块能针对你的正在运行的内核编译。
然后执行安装脚本:
bash复制sudo ./VBoxLinuxAdditions.run
执行完,终端会刷出几屏编译日志,最后一行如果出现类似 “VirtualBox Guest Additions installed successfully” 的字样,说明安装成功。但有个细节,模块的加载可能需要重启之后才生效,所以先执行:
bash复制sudo shutdown -r now
重启后,你把虚拟机窗口拉伸到任意大小,Ubuntu 的分辨率都会自动跟着变,鼠标也可以自由进出窗口不需要按右 Ctrl 了。这时候体验才算真正到位。
5.3 增强功能装失败的常见原因对策
如果说整个流程里最容易出意外的就是这一步,遇到的错误信息五花八门。我几乎每次给别人远程排查问题,十次有八次是卡在这。
最常见的问题是:“安装界面提示 Unable to find the sources of your current Linux kernel”。这表示内核头文件没装对。解决方案是重新执行一次内核头文件的安装命令,并且确认安装以后版本号和 uname -r 的输出一致:
bash复制sudo apt install -y linux-headers-$(uname -r)
uname -r
ls /usr/src/ # 确认有 linux-headers-xxx 开头的目录
另一个常见问题是:VirtualBox 菜单栏的 “安装增强功能” 选项是灰色的,点不了。这通常是因为虚拟光驱里还挂载着之前的系统安装 ISO,VirtualBox 默认只允许一个光驱有盘片。解决方法是到虚拟机的存储设置里,把那个旧的 ISO 移除,然后再点一次“安装增强功能”。
还有一类问题出现在 Wayland 环境下,安装脚本虽然完成了,但拖放功能不好用。Ubuntu 22.04 默认用的是 Wayland 会话,而 VirtualBox 的拖放功能对 X11(Xorg)会话的支持更加成熟。解决方式是登录界面选择齿轮图标,把会话切换成 “Ubuntu on Xorg”,再重新登录。我自己日常也是用 Xorg 开虚拟机,Wayland 里有些高分屏缩放问题会让人崩溃。
到这里 VirtualBox 基础安装流程算是彻底完成了。这个模块是整套流程里成本收益比最高的一步,花五分钟装好,之后每天使用省下的时间可远不止五分钟。
6. 网络模式到底怎么选:NAT、桥接还是仅主机,谁的适用场景是什么
6.1 VirtualBox 三种网络模式的分工
Ubuntu 虚拟机里跑 ifconfig 或者 ip addr 查看网络信息,能不能看到 IP、能不能上网,取决于虚拟机的“网络”设置里选的是哪种模式。VirtualBox 给虚拟机提供了好几种网卡模式,日常用得上的主要就是三种:NAT、桥接、仅主机(Host-Only)。
| 网络模式 | 虚拟机能否访问外网 | 宿主机能否访问虚拟机 | 外部设备能否访问虚拟机 | 典型使用场景 |
|---|---|---|---|---|
| NAT | 能 | 能,但需要端口转发 | 不能 | 日常能上网的虚拟机 |
| 桥接 | 能 | 能,直接用局域网 IP 访问 | 能(和其他设备平级) | 需要对外提供服务的虚拟机 |
| 仅主机 | 不能 | 能 | 不能 | 宿主机与虚拟机之间的专用通信 |
解释一下背后机制。
NAT 模式相当于给你的虚拟机发了一张虚拟网卡,它在一个私有的虚拟子网里(默认一般是 10.0.2.x),虚拟机的流量通过 VirtualBox 提供的 NAT 服务转发出去。这个模式下,虚拟机上网没问题,Windows 宿主机想直接 ping 通虚拟机是 ping 不通的,因为虚拟机躲在 NAT 网关后面,宿主机看到的只有 VirtualBox 进程的“虚拟路由器”,比如 VirtualBox DHCP Server 分配的那个地址。
桥接模式就相当于直接给你的虚拟机在物理网卡上开了一条“旁路”,虚拟机的网卡直接和宿主机一样,接入同一个局域网。在这种模式下,虚拟机有自己的局域网 IP,局域网里其他设备可以直接访问它,宿主机也可以直接用这个 IP 访问虚拟机。
仅主机模式最特殊,它创建了一个完全私有的虚拟网段(默认通常是 192.168.56.x),只有宿主机和归属于这个模式的虚拟机地址能互相通信。虚拟机不能通过它上网,但宿主机与虚拟机之间的通信完全不受外网环境影响,稳定可靠,适合做开发调试。
6.2 我说的“日常开发用 NAT+端口转发”是什么意思
很多初次接触虚拟机的朋友会陷入一个误区:觉得只要选了 NAT 模式,在 Windows 浏览器里输入虚拟机的 IP 就能访问里面跑的服务。实际上根本不通。NAT 模式下,宿主机访问虚拟机必须靠端口转发规则。
我自己平时的开发环境会同时起好几台虚拟机,每台虚拟机里有不同的服务,我会给它们规划一套固定的端口转发策略。比如:
- 虚拟机上跑了 SSH 服务(默认端口 22),Windows 宿主机想连,可以在 VirtualBox 的端口转发规则里,把宿主机的 2222 端口转发到虚拟机的 22 端口。之后在 Windows 上的 SSH 软件里连接
localhost:2222即可。 - 虚拟机上跑了 Nginx(默认端口 80)或某个开发服务(端口 8080),转发规则写法同理。
设置路径:虚拟机右键“设置 > 网络 > 高级 > 端口转发”,点击加号,添加规则。
这里有个最大的好处:端口转发规则和 IP 地址无关。无论虚拟机的 DHCP 分配到的 IP 变了多少次,只要你的宿主机上对应的端口规则在,就能访问到虚拟机里对应的服务。这就好比“虚拟机 IP 变了,但宿主机的入口始终不变”。
以我实际搭建的一套环境为例:
| 宿主机端口 | 虚拟机 IP | 虚拟机端口 | 服务说明 |
|---|---|---|---|
| 2222 | 10.0.2.15 | 22 | SSH 远程登录 |
| 8080 | 10.0.2.15 | 8080 | Spring Boot 开发服务 |
| 3307 | 10.0.2.15 | 3306 | MySQL 数据库 |
| 27017 | 10.0.2.15 | 27017 | MongoDB 数据库 |
这些规则设置一次,除非虚拟机被删除,否则永久生效。日常开发这个模式足够了。
6.3 什么时候需要把虚拟机改成桥接模式
如果你在虚拟机上部署了需要被局域网内其他真实设备(比如手机、同事电脑)直接访问的服务,比如跑一个后台管理页面、一个内网的文件共享服务,那就需要把网络模式切换为桥接。
操作路径:虚拟机设置里,把“网络”下的“连接方式”从 NAT 改成“桥接网卡”,界面名称选你 Windows 当前使用的物理网卡(一般是 “Realtek PCIe GbE Family Controller” 或者 “Intel(R) Wi-Fi …” 之类的名字,有无线网卡和有线网卡时注意别选错)。
切换后,在 Ubuntu 里重启网络,或者直接 sudo systemctl restart NetworkManager,然后用 ip addr 看网络信息,你会看到虚拟机获得了和宿主机同一网段的 IP。这一下,宿主机的浏览器输入这个 IP 就能访问虚拟机里的服务了,其他局域网设备也可以。
但桥接模式也有个不算坑的坑:虚拟机获取局域网 IP 的租约问题。有些公司或宿舍的局域网 DHCP 租约时间短,虚拟机跑久了 IP 可能会变化,你得定期回去查 IP,需要在路由器里做静态 DHCP 绑定才能一劳永逸。
所以我的建议是:日常开发、学习、测试用 NAT 即可;需要对外提供服务时再临时切到桥接模式。两种模式并不是互斥的,VirtualBox 最多支持给虚拟机装 4 块网卡,你可以同时启用两块:第一块走 NAT 用于外网访问,第二块走桥接或者仅主机用于局域网设备通信。高级玩家可以这样玩,普通用户先掌握 NAT 和桥接的切换就够了。
6.4 虚拟机做内网穿透,从外网访问宿主机里的服务
如果你需要在公司外访问自己电脑上的虚拟机服务,这就成了另一个范畴的事,属于“内网穿透”。做法通常是借助 frp、Ngrok 这类工具,把宿主机的某个端口映射到一个公网服务器上,从而让外网用户通过公网地址访问。
这需要一台有公网 IP 的服务器做中转,单纯指望着 VirtualBox 本身解决不了这个问题。我在本地做过类似实验,思路是:
- 在 Windows 宿主机上安装 frp 客户端,把你本来用于端口转发的宿主机端口(比如 2222 或 8080)推送出去;
- 在公网服务器上安装 frp 服务端;
- 绑定一个域名,把公网访问到的域名解析到那台服务器上;
- 外网设备访问
公网域名 + 映射端口,流量会经由 frp 服务端转发到 Windows 宿主机上的对应端口,最终进入虚拟机里面那条 NAT 端口转发链路。
这个方案的链路比单纯的虚拟机环境长得多,中间任何一个环节不稳定都会导致链接偶尔断开。我自己的经验是,如果只是临时调试,用内网穿透工具体验尚可;如果打算长期使用这个服务,还是建议买个固定公网 IP 的 VPS,一劳永逸,不要在一根细线上叠太多转发层。
7. 虚拟机里的环境配置:换源、装输入法、调整用户权限
7.1 换 Ubuntu 软件源
装完系统后的第一件事,强烈建议把 Ubuntu 默认的软件源替换成国内镜像源。不换也行,就是后续每执行一次 apt install,下载速度可能只有几十 KB/s,装个 Docker 都要等到地老天荒,体验非常糟糕。
Ubuntu 22.04 的软件源配置文件在 /etc/apt/sources.list,打开编辑:
bash复制sudo sed -i 's@//.*archive.ubuntu.com@//mirrors.tuna.tsinghua.edu.cn@g; s@//security.ubuntu.com@//mirrors.tuna.tsinghua.edu.cn@g' /etc/apt/sources.list
我不会在这里展开具体的配置文件语法,因为源镜像站的官网上都有对应系统版本的标准文本,比如清华源页面就提供了一整段适用于 22.04 的 sources.list 内容,直接复制覆盖即可。关键点是覆盖完后执行:
bash复制sudo apt update && sudo apt upgrade -y
如果报错 GPG error、签名验证失败,说明源的地址和系统版本不匹配,或者更新缓存时网络中断了。重新确认 URL 里有没有拼错,再试一次。
7.2 配置中文输入法:搜狗还是系统自带 fctix
安装 Ubuntu 桌面版时选了英文界面的朋友,大概率会遇到这个需求:想用中文输入法打字。Ubuntu 系统自带的中文输入法框架有两种主流选择——IBus 和 Fcitx5。Ubuntu 22.04 默认预装的是 IBus,如果你需要联想词库、云拼音一类更好用的输入体验,可以试试在命令行中安装 fcitx5 和中文输入引擎:
bash复制sudo apt install fcitx5 fcitx5-chinese-addons fcitx5-config-qt
安装完之后,到“设置 > 区域与语言”里,把输入法系统切换成 Fcitx 5,重启登录一次,任务栏右上角会出现键盘图标,点击可以添加 “Pinyin” 输入法。
至于搜狗输入法 for Linux,近年已经停止更新,新版本 Ubuntu 上安装完经常会碰到无法启动、Qt 缺失的问题。虽然有热心网友提供了各种绕行方案,但我只能说,从维护成本和稳定性两个维度平衡下来,系统自带的 Fcitx5 目前更值得花时间熟悉。
7.3 Ubuntu 里 root 账号和 sudo 的使用逻辑
不少从 Windows 转过来的新手朋友对 Ubuntu 的权限管理一头雾水,最典型的困惑是:虚拟机里的 Ubuntu 怎么切换到超级管理员(root)?root 的密码又是多少?
这里有一个 Linux 权限模型的基本概念需要理清。Ubuntu 默认关闭了 root 账号的直接登录,日常系统管理全部通过 sudo 来完成。你自己创建的那个用户(安装系统时设的用户名)默认在 sudo 用户组里,拥有管理员权限。
执行需要管理员权限的命令时,在命令行前面加 sudo,系统会提示输入当前用户的密码(不是 root 的密码),密码验证通过后,该条命令就拥有了 root 权限。
如果你想进入一个 root 的 shell 环境,用:
bash复制sudo -i
执行完后,你会看到提示符从 $ 变成了 #,说明当前是 root 身份。这里输入的密码同样是当前用户的密码,而不是另行设置的 root 密码。
那能不能给 root 账号设置一个密码、然后像 su root 那样切过去登录呢?可以,用:
bash复制sudo passwd root
然后按提示输入两次想要设置的 root 密码。执行完后,su - 切到 root 用户时就得用这个密码了。
注意:日常使用建议始终使用
sudo前缀执行单条管理命令,而不是长期保持在 root shell 环境下操作。原因不是觉得你水平不行,而是 root 下命令的行为不像普通用户那样有权限保护,万一哪条命令拼写错了,删掉系统关键文件也就是一瞬间的事。
7.4 查看系统架构、显卡驱动的正确姿势
群里经常有人说“我跑一个软件提示架构不对,在网上怎么查都说命令是 uname 什么的”,这里把常用命令列一下,以后用到就不用来回搜了。
查看操作系统版本和系统架构:
bash复制# 查看当前内核信息(包含架构)
uname -a
# 查看 CPU 架构,x86_64 表示 64 位 x86 架构,aarch64 表示 ARM64
dpkg --print-architecture
# 查看系统发行版详情
cat /etc/os-release
查看显卡、驱动和 GPU 使用情况:
bash复制# 查看 PCI 设备列表里 GPU 信息
lspci | grep VGA
# 查看已加载的内核显卡驱动模块
lsmod | grep -E 'nvidia|amdgpu|i915'
# 如果安装了 NVIDIA 驱动
nvidia-smi
# 如果安装了 AMD 显卡的 ROCm 栈
rocm-smi
在虚拟机里,显卡一般会认成 VirtualBox 的虚拟显卡(VMSVGA 这类),nvidia-smi 不会输出,自然也就没有 NVIDIA 驱动可供查看。这是正常的,虚拟机里你根本用不到物理显卡直通,除非你做了 GPU 直通这种硬核操作,否则不用在虚拟机里费劲去找“独立显卡驱动”。
7.5 Docker 安装的一个额外提醒
很多人的虚拟机上会装 Docker,用来跑一些容器化的开发服务。Ubuntu 上装 Docker 现在很成熟了,官方给的安装步骤基本不会踩坑。要点集中在两处:
第一,安装 Docker 官方源而不是直接 apt install docker.io。后者虽然是一条命令装完,但你的 Docker 版本会和 Ubuntu 仓库的更新节奏绑定,通常滞后,某些新特性用不了。
第二,官方仓库的添加脚本里依赖 HTTPS 相关的软件包,你需要先把这些装上:
bash复制sudo apt update
sudo apt install -y ca-certificates curl
然后用 Docker 官方提供的安装脚本:
bash复制curl -fsSL https://get.docker.com | sudo sh
脚本执行完 Docker 会自动设置为开机自启。为了避免每次敲 docker 命令都要加 sudo,把当前用户加入 docker 用户组:
bash复制sudo usermod -aG docker $USER
执行完这行命令后需要重新登录(关掉终端重开,或重启虚拟机)才能生效。
这里要特别提醒一句:把用户加入 docker 组的实质是让该用户拥有了与 root 同等级的容器管理权限,一旦你的普通用户账号被攻破,攻击者可以借由 Docker 的守护进程直接控制宿主机。在自己的开发虚拟机上这么配置没有太大问题,但在生产服务器上务必谨慎。如果虚拟机只是拿来自己练手,这个操作的便利性大于风险,可以做。
8. 磁盘扩容、快照备份与虚拟机迁移:环境搭建好之后的保护手段
虚拟机环境搭好之后,下一个问题就是:它不像物理机那样有厂商维保,坏了要自己修,所以平时做备份和保护是必须养成的习惯。
8.1 通过快照保护你的系统状态:VirtualBox 里性价比最高的功能
快照(Snapshot)是 VirtualBox 里我认为性价比最高的一个功能。简单理解就是:给虚拟机拍一张“照片”,记录下当前的系统状态、磁盘内容、内存状态等。如果以后虚拟机出了问题(系统崩溃、误删文件、装软件把系统搞坏了),你可以一键回滚到拍快照时的状态。
操作方式:虚拟机运行的时候,点菜单栏的“机器 > 生成备份(Take Snapshot)”,或者直接右键虚拟机列表里的条目,选“快照”,右侧有个“生成”按钮。
我的快照策略是:在干净的系统初始状态下打一个快照,然后在重大配置变更前再打一个。
比如,在装完 Ubuntu 系统、完成所有基础配置(换源、Guest Additions、Docker)之后,把一个干净的快照打好。然后每次要在虚拟机上装比较大的软件或者进行实验性配置之前,再补一个快照。这样即使后续操作把系统搞坏了,回滚最多损失几分钟的操作时间,不影响整体进度。
要注意,快照不等于完整的备份方案,如果虚拟机的 VDI 磁盘文件本身损坏了(比如你的 Windows 宿主机上的固态硬盘掉盘了),快照也会一并丢失。所以对重要的虚拟机,还需要定期把整个虚拟机导出一份作为备份文件,VirtualBox 的导出功能在“文件 > 导出虚拟电脑”,导出的 .ova 文件可以拷贝到移动硬盘。
8.2 虚拟机磁盘空间不够了,如何扩容而不丢数据
前面建议创建磁盘时直接给到 50GB,但我还是预见到还是有人会撞到容量不够的墙——这几乎是新手期必经的。如果虚拟机的虚拟磁盘空间真的不够了,VirtualBox 提供了扩容途径,但操作路径有点拧巴。
第一步,关闭虚拟机。任何磁盘扩容操作都必须先把虚拟机关机。
第二步,Windows 命令行(以管理员身份运行)里执行:
bash复制VBoxManage modifymedium disk "D:\VirtualBox VMs\Ubuntu2204-Dev\Ubuntu2204-Dev.vdi" --resize 81920
这里面 81920 的单位是 MB,等于 80GB。VBoxManage 是 VirtualBox 自带的命令行工具,安装目录通常在 C:\Program Files\Oracle\VirtualBox\,如果你没有把它加进 PATH,可以先切换到那个目录再执行命令。
第三步,虚拟机的 VDI 文件容量变大了,但 Ubuntu 里的分区表和文件系统还是原来的大小,需要进入虚拟机内部把新增的容量用起来。这步是分区的操作,处理不慎数据全无,务必小心。
在 Ubuntu 里执行:
bash复制sudo parted /dev/sda
在 parted 的交互界面里,输入 print 查看当前分区表,找到根分区(通常是 /dev/sda2 或 /dev/sda3),记录下它的分区号。然后删除这个分区再重建一个覆盖全盘的更大分区——听起来凶险,但实际上只要你在同一个起始扇区开始重建,分区数据不会丢。重建完成后输入 quit 退出 parted,最后执行:
bash复制sudo resize2fs /dev/sda2 # 用你刚才分区对应的设备名
操作过程中一旦断电或误操作,分区表损坏的风险是真实存在的,所以在动手前务必快照或者把虚拟机导出备份。如果你觉得这套操作风险太高,最省事的方案是新建一块虚拟硬盘挂载给 Ubuntu,然后用 rsync 把数据搬到新盘上去。虽然多一步搬运,但过程直观可控,适合对分区操作没有把握的朋友。
8.3 Ubuntu 系统重装和恢复:保留已有虚拟磁盘,直接重新安装系统
还有一个常见的场景是:系统被自己折腾到彻底无法恢复,干脆重装。如果你有一块单独的“数据盘”或者关键文件已经备份好,重装系统并不需要删掉整个虚拟机。
更优雅的做法是走下面这个流程:
- 先把虚拟机里的重要文件复制到 Windows 宿主机上,或者用 VirtualBox 的导出功能完整备份一次。
- 虚拟机的设置里,在“存储”中添加一个新的虚拟光驱,挂载 Ubuntu ISO。
- 设置里把这个新的虚拟光驱放到“启动顺序”的最上面。
- 启动虚拟机,进入 GRUB 菜单,选择从光驱启动,进入新的安装流程。
- 在安装类型选择时,如果原来的分区不多,可以选 “Erase disk and install Ubuntu”;如果原来有 /home 分成独立分区,也可以选 “Something else”(自定义分区),只格式化根分区,保留 /home 分区不动。
第二种“只格根分区保留 /home”的方式,重装后你的个人文件、脚本、配置都还在,代价是系统里新装的各种软件包全部需要重新装一遍。相比之下我更推荐“整盘重装 + 提前备份关键文件”的做法,干净、彻底、省心。
提示:养成习惯,平时的个人重要文件不要放在虚拟机的
/root、/etc、/usr这类系统目录下,一律放到/home/你的用户名/或者专门的/data分区。后面无论要重装、迁移还是做备份,都只需要处理一块区域,不需要在系统目录里翻箱倒柜地捞东西。
9. 显示模糊、分辨率与宿主机不一致的处理方式
用 VirtualBox 跑 Ubuntu,还有一个特别影响日常体验的问题:显示分辨率与宿主机不一致导致桌面字体发虚、窗口缩放模糊。这个问题的出现分两类原因,处理方式完全不同。
第一类,完全是没装好 Guest Additions 导致的。VirtualBox 默认的显卡驱动只支持 800x600 或 1024x768,远低于宿主机的 1920x1080,Ubuntu 的桌面缩放渲染出来自然字迹模糊。把 Guest Additions 装好,虚拟显卡驱动切换成 VMSVGA 并启用 3D 加速后分辨率自动适配,模糊现象消失。
第二类,Guest Additions 已经装好,但宿主机开的是 125% 或 150% 的显示缩放,虚拟机里的 Linux 桌面仍然发虚。这个问题在 Windows 宿主机上尤其明显。解决办法是给 Ubuntu 设置适合虚拟机的分辨率和缩放:
Ubuntu 桌面的“设置 > 显示器(Displays)”里,把分辨率调成和宿主机工作区一致的分辨率,同时把“缩放(Scale)”调整到 100% 或 200% 这种整数倍率。因为非整数倍的缩放(比如 125% 加 150%)在 Linux 的 X11 环境下特别容易造成文字模糊。如果你用的是 Wayland 会话,缩放的渲染质量会好一些,但部分 Qt 应用仍可能发虚。建议稳定走 Xorg 会话。
还有一种情况出现在多显示器环境下:你在 Windows 宿主机上把 VirtualBox 的窗口从主屏拖到副屏,虚拟机的分辨率不会自动跟随。VirtualBox 的处理方式是,在 View 菜单里选择 “Virtual Screen 1”,在其子菜单中手动选择分辨率,或者按 Host + F 快捷键切换全屏模式,让 VirtualBox 根据当前屏幕自动匹配最接近的分辨率。
10. 关于虚拟机里跑 Windows、麒麟系统等其他系统的补充
虽然标题是 Ubuntu,但很多朋友会顺手问了:VirtualBox 能不能装 Windows 镜像、怎么装 Kylin 系统这类问题,我这边一并说一下。
VirtualBox 装 Windows 虚拟机和装 Linux 的流程差异不大。创建时类型选择 Microsoft Windows,版本按镜像选 Windows 10 (64-bit) 即可。然后下载 Windows 的 ISO,启动安装,流程和物理机装系统几乎一致。但 VirtualBox 对 Windows 虚拟机的 3D 支持不算太好,所以别指望在虚拟机里跑大型游戏或者依赖 GPU 的软件,轻度办公和软件测试没问题。
另外,市面上有些特殊定制的 Linux 发行版,比如 Kylin Server、统信 UOS 等,它们的 ISO 内核和引导方式和 Ubuntu 有些微差异。在 VirtualBox 里安装时,如果遇到卡在启动界面、黑屏,通常需要手动把虚拟机的“系统 > 主板 > 芯片组”从 PIIX3 改成 ICH9,把“启用 EFI”勾选上,再把“系统 > 处理器”里的“启用嵌套 VT-x/AMD-V”打开。这几项是针对特殊 Linux 发行版的一组兜底配置,亲测对不少国产发行版有效。
补充说明:Kylin Server 这类系统的特殊之处在于它们的内核和 Ubuntu Server 不同,部分授权模块依赖特定芯片组和引导模式,所以 VirtualBox 默认的 BIOS 兼容模式可能识别不了它。手动切到 UEFI 模式基本能解决。
11. 实战复盘:从零到能干活的一台 Ubuntu 虚拟机,我花了多长时间
到这里为止,整个搭建流程基本走完了。作为经验分享,我最后说几个“真实时间成本”和“真实使用心得”点,供你建立预期。
之前带过几个零基础的朋友按这套流程操作,从他们打开 VirtualBox 官网开始计时,到虚拟机能正常上网、装上了 Docker 和常用开发工具,平均用时大约在 40 分钟到一个小时。这个时间还包含了不少系统安装时跑进度条的等待时间。真正需要全神贯注操作的步骤不超过十几分钟,剩下的难点全在等待和各种小问题的排查上。
我在实际使用中最大的心得是:把虚拟机当成一台“一次性可用、随时可重建”的机器,而不是“花了两个小时装的系统,千万别弄坏了”的宝贝。 VirtualBox 的快照功能给足了试错成本,你可以放心大胆地在虚拟机里折腾。装坏了就回滚快照,或者重新建一台,整个过程不值一提。有了这个心态,你学 Linux 的效率会高得多。
最后再分享一个小技巧:虚拟机里跑 Ubuntu 桌面,平时不用时建议直接在 VirtualBox 里“保存虚拟机状态”(Save the machine state),相当于把当前运行状态冻结在磁盘上,下次打开不到十秒就能接着干活。这比每次关机再开机、等系统加载完软件启动,体感上不是一个级别。如果你的 Ubuntu 里有长时运行的服务需要保持在线,那就让它挂在后台跑着,不要保存状态,因为保存状态等于是给整个系统按了暂停键,网络服务在暂停期间是不对外响应的。
先把这些基础的操作和内化的排查思路吃透,接下来什么配置 Docker 开发环境、搭 Kubernetes 集群、挂载数据盘这些问题,本质上都是在这台虚拟机上继续盖楼而已。地基今天已经打好了,可以开工了。
