【前情提要】 小林装好了 Homebrew,下载了 Ubuntu 26.04 LTS ARM64 镜像,准备在 VMware Fusion 里装虚拟机。他以为跟装 App 一样简单,结果卡在了第一屏。

一、新建虚拟机,第一屏就卡住了

第二天一早,小林打开 VMware Fusion,点“新建”,把桌面上的 Ubuntu 镜像拖进去。

VMware Fusion 自动识别,弹出一个界面:

操作系统:Linux
版本:Ubuntu 64-bit ARM

小林看了一眼,心想“挺智能的嘛”,直接点“继续”。

下一步,它问:

固件类型:UEFI / BIOS

小林愣了。BIOS 他听过,UEFI 也听过,但选哪个?

他喊了一声:“周哥,UEFI 和 BIOS 选哪个?”

老周端着保温杯晃过来,看了一眼:“选 UEFI。现代系统都用 UEFI,BIOS 是上古遗产。你以后面试被问到‘UEFI 和 BIOS 区别’,就说 UEFI 支持更大磁盘、更快启动、更安全,BIOS 是 legacy。”

小林选了 UEFI,继续。

下一步,它问:

磁盘大小:20 GB

“20G 够吗?”小林问。

“装 Ubuntu Desktop 够了。”老周说,“但你以后要装 Prometheus、Grafana、Nginx,日志还会涨。我给个建议,50G 起步。虚拟磁盘不会立刻占满你的 Mac 硬盘,它是按需增长的。”

小林改成 50G,继续。

下一步,它问:

网络类型:NAT / 桥接 / 仅主机

小林又卡住了。

老周叹了口气:“你这卡点密度,跟我当年学车一样。来,我给你讲清楚。”

二、NAT、桥接、仅主机:三种网络模式

老周拉过椅子坐下,拿笔在纸上画了三个圈。

“虚拟机网络,就三种模式,你记住这三句话就行。”

NAT(网络地址转换)

“虚拟机躲在你 Mac 后面上网。虚拟机可以访问外网,但你 Mac 之外的机器访问不了虚拟机,除非你做端口转发。最稳,最不容易出问题,推荐你用这个。”

桥接(Bridged)

“虚拟机直接接入你 Mac 所在的局域网,相当于你家路由器又接了一台设备。虚拟机会拿到一个和 Mac 同网段的 IP,别人可以直接访问它。但公司网络、学校网络经常限制,桥接可能拿不到 IP。”

仅主机(Host-Only)

“虚拟机和 Mac 之间能通信,但虚拟机不能上外网。适合做隔离实验,但你装软件、发邮件都不行。”

老周放下笔:“你选哪个?”

“NAT。”小林说。

“聪明。”老周说,“NAT 模式,你 Mac 能访问虚拟机,虚拟机也能上网。你以后要用 Mac 浏览器访问虚拟机里的博客,做端口转发就行。够用了。”

小林选了 NAT,继续。

下一步,它问:

磁盘类型:SCSI / SATA / NVMe

“NVMe。”老周直接说,“快。SCSI 和 SATA 是老接口,NVMe 是现在的主流。”

小林选了 NVMe,点“完成”。

VMware Fusion 弹出一个窗口,虚拟机开始启动。

三、黑屏了

屏幕一片漆黑。

小林等了十秒。二十秒。三十秒。

“周哥,黑了。”

老周凑过来看了一眼:“正常,它在引导。你等等。”

又等了半分钟。还是黑的。

“不对。”老周皱眉,“你镜像下对了吗?”

小林打开下载目录,看了一眼文件名:

ubuntu-26.04-desktop-amd64.iso

老周沉默了。

“你 Mac 是 M2,对吧?”

“对啊。”

“M2 是 ARM 架构。”老周说,“你下的是 amd64,那是 Intel/AMD 的架构。架构不匹配,虚拟机根本跑不起来。”

小林脸红了:“我昨天看官网,它默认给我推 amd64……”

“官网有时候根据你的 IP 推版本,你得自己手动选。”老周说,“去 Ubuntu 官网,找 ARM64 版本,文件名应该是 ubuntu-26.04-desktop-arm64.iso。”

小林重新下载,这次仔细看了文件名:

ubuntu-26.04-desktop-arm64.iso

“这回对了。”老周说,“把刚才那个虚拟机删了,重新建。”

排错思路总结:

  1. Apple Silicon Mac 必须使用 ARM64 架构的 Ubuntu 镜像。
  2. 文件名中的 amd64 是 Intel/AMD 架构,arm64 才是 Apple Silicon。
  3. 镜像架构和 Mac 架构不匹配,虚拟机会黑屏、卡死或无法启动。
  4. 下载镜像时,手动选择 ARM64 版本,不要依赖官网自动推荐。

四、第一次启动 Ubuntu

重新新建虚拟机,这次一切顺利。

虚拟机启动,屏幕出现 Ubuntu 的紫色启动画面,然后是语言选择界面。

“选中文。”老周说,“但你记住,以后在终端里,系统提示全是英文。你得习惯英文报错,那是你的工作语言。”

小林选了“中文(简体)”,继续。

下一步,安装类型:

交互式安装
自动安装

“交互式。”老周说,“自动安装会帮你分区,但你现在不需要学自动。交互式,手动来一遍,你才知道系统装在哪。”

小林选了交互式。

下一步,它问:

安装类型:默认 / 扩展 / 最小

“默认。”老周说,“扩展装一堆办公软件,你用不上。最小连浏览器都没有,你以后查资料不方便。默认刚好。”

下一步,磁盘分区。

老周说:“直接选‘清除整个磁盘并安装 Ubuntu’。反正是虚拟机,整块盘给它,不用纠结。”

小林照做。

下一步,创建用户。

老周说:“用户名别用中文,别用空格,别用大写。你就用 devops。密码设个简单的,反正是虚拟机。”

小林输入:

用户名:devops
密码:123456

“这么简单?”老周看了一眼,“行,虚拟机无所谓。但你在公司服务器上敢用这个密码,我第一个开除你。”

小林嘿嘿一笑。

安装开始,进度条缓慢前进。十分钟后,提示重启。

重启后,Ubuntu 桌面出现了。

五、nano:你的“救命编辑器”

小林兴奋地打开终端,想试试命令。

老周说:“先别急。你以后要改配置文件,得先会用一个编辑器。Linux 上编辑器很多,vim、emacs、nano。我让你用 nano。”

“为啥不用 vim?”

“vim 学习曲线陡,你现在连 hjkl 都记不住,用 vim 就是给自己找罪受。”老周说,“nano 简单,打开就能打字,底部有快捷键提示。你先把 nano 用熟,以后想学 vim 再说。”

老周让小林打开一个测试文件:

nano ~/test.txt

nano 界面弹出来,顶部是文件名,底部是一排快捷键。

“你记住三个救命操作就行。”老周竖起三根手指。

第一,保存:Ctrl + O,然后回车。

“你改完东西,按 Ctrl + O,底部会问 File Name to Write,直接回车,就保存了。”

第二,退出:Ctrl + X。

“保存完想退出,按 Ctrl + X。如果没保存,它会问你要不要保存,按 Y 再回车。”

第三,搜索:Ctrl + W。

“文件太长找不到关键词,按 Ctrl + W,输入关键词,回车,光标跳过去。”

小林试了一遍:输入 Hello Ubuntu,Ctrl + O 回车,Ctrl + X 退出。然后又打开文件,内容还在。

“记住了。”小林说。

“再教你一个组合技。”老周说,“Ctrl + K 剪切当前行,Ctrl + U 粘贴。 你以后改配置文件,经常要删一行、加一行,用这个比按退格键快。”

小林在笔记本上写下:

  • 保存:Ctrl + O → 回车
  • 退出:Ctrl + X
  • 搜索:Ctrl + W
  • 剪切行:Ctrl + K
  • 粘贴:Ctrl + U

“nano 就这些?”小林问。

“常用的就这些。”老周说,“其他快捷键你自己看底部提示,用多了就记住了。记住,nano 底部带 ^ 符号的,就是 Ctrl 键。 ^O 就是 Ctrl + O。”

六、快照:你的“后悔药”

装好系统,老周让小林先别急着装软件。

“你先做个快照。”

“快照?”

“虚拟机快照,相当于游戏存档。”老周说,“你现在系统刚装好,干干净净。你存个档,以后搞坏了,恢复回来,三秒钟。”

小林打开 VMware Fusion 菜单,找到“快照” → “拍摄快照”。

弹出一个窗口:

名称:刚装好系统
描述:(可选)

小林输入名称,点“拍摄”。

几秒钟后,快照创建完成。

“以后你每完成一个阶段,就存一个档。”老周说,“比如‘装好 Nginx’、‘配好监控’、‘日志分析跑通’。搞坏了就回滚,不用重装。”

“那快照占空间吗?”

“占。”老周说,“但比你重装系统快多了。你 Mac 硬盘够大,不用担心。”

小林点点头,又存了一个快照,命名为“装好 Homebrew”。

“等等,”老周说,“Ubuntu 里不叫 Homebrew,叫 apt。Homebrew 是 Mac 的,apt 是 Ubuntu 的。你以后装软件,在 Mac 上用 brew install,在 Ubuntu 上用 sudo apt install。别搞混。”

小林在笔记本上写下:

  • Mac 包管理:brew install
  • Ubuntu 包管理:sudo apt install
  • 红帽系包管理:sudo dnf install

“红帽系是啥?”小林问。

“CentOS、Rocky、AlmaLinux,都是红帽系。”老周说,“你以后工作中会遇到,它们的包管理是 dnf,防火墙是 firewalld,日志路径也不一样。但你现在先把 Ubuntu 学好,遇到红帽系我再跟你说。”

七、Mac 怎么连上 Ubuntu?

系统装好了,快照也做了。小林问了一个关键问题:

“周哥,我 Mac 怎么访问 Ubuntu?我总不能一直在虚拟机窗口里操作吧?”

“好问题。”老周说,“两种方式。第一种,直接在 VMware 窗口里操作,简单但难受。第二种,用 SSH 从 Mac 终端连过去,舒服。”

“我要第二种。”

“那得先知道 Ubuntu 的 IP。”老周说,“在 Ubuntu 终端里敲 ip a。”

小林敲了:

ip a

输出一堆,他找到 ens160 或者 ens33 之类的网卡,下面有一行:

inet 192.168.x.x/24

“这个 192.168.x.x 就是你的 Ubuntu IP。”老周说,“你在 Mac 终端里敲 ssh devops@192.168.x.x,输入密码,就能连上了。”

小林回到 Mac 终端,敲:

ssh devops@192.168.x.x

提示:

The authenticity of host '192.168.x.x' can't be established.
ED25519 key fingerprint is SHA256:...
Are you sure you want to continue connecting (yes/no/[fingerprint])?

“敲 yes。”老周说。

小林敲了 yes,然后输入密码。

终端提示符变成:

devops@ubuntu:~$

“进来了。”小林兴奋地说。

“以后你就这么连。”老周说,“Mac 终端操作 Ubuntu,比你切窗口快多了。而且你以后写脚本,在 Mac 上写好,直接 SSH 过去跑。”

“那端口转发呢?”

“你现在 NAT 模式,Mac 能直接访问 Ubuntu 的 IP,不用端口转发。”老周说,“但如果你想让 Mac 浏览器访问 Ubuntu 里的 Nginx,就得做端口转发。比如 Ubuntu 里 Nginx 跑在 80 端口,你在 VMware 网络设置里,把 Mac 的 8080 转发到 Ubuntu 的 80。这样你 Mac 浏览器访问 http://localhost:8080,就是访问 Ubuntu 的 Nginx。”

“记住了。”小林说。

“今天先到这。”老周站起来,“你熟悉一下 Ubuntu,把 nano 用熟,把 SSH 连熟。明天开始,我们搭博客。”

八、排错挑战:虚拟机启动后黑屏

第三天,小林想再装一台 Ubuntu 虚拟机做测试。他新建虚拟机,选了之前下载的镜像,启动。

黑屏。

他想起上次的教训,检查了镜像文件名:

ubuntu-26.04-desktop-arm64.iso

“架构没错啊。”小林嘀咕。

他又检查了虚拟机设置:

  • 固件:UEFI ✓
  • 磁盘:50G NVMe ✓
  • 网络:NAT ✓

都没问题。但就是黑屏。

他喊来老周。

老周看了一眼,问:“你分配了多少内存?”

小林打开设置:

内存:2 GB

老周笑了:“2G 跑 Ubuntu Desktop,你这是在为难它。Ubuntu Desktop 最少要 4G,推荐 8G。你给它 2G,它启动到一半就 OOM 了,当然黑屏。”

小林改成 8G,重新启动。

这次,Ubuntu 顺利进入桌面。

排错思路总结:

  1. 虚拟机黑屏,先检查镜像架构是否匹配(ARM64 vs amd64)。
  2. 再检查固件类型(UEFI)、磁盘类型(NVMe)、网络模式(NAT)。
  3. 如果都正确,检查内存和 CPU 分配。Ubuntu Desktop 最少 4G 内存,推荐 8G。
  4. 内存不足会导致启动过程中 OOM,表现为黑屏或卡死。

九、练习

  1. 练习一:在 Ubuntu 里用 nano 创建一个文件 ~/hello.txt,写入三行内容,保存并退出。然后用 cat ~/hello.txt 验证内容。
  2. 练习二:在 Ubuntu 里执行 ip a,找到你的 IP 地址。然后在 Mac 终端里用 SSH 连接 Ubuntu,执行 hostname 和 whoami,确认连接成功。
  3. 练习三:在 VMware Fusion 里为你的 Ubuntu 虚拟机创建一个快照,命名为“刚装好系统”。然后故意在 Ubuntu 里删除一个系统文件(比如 sudo rm /etc/hostname),重启后观察现象,再用快照恢复。

参考答案

练习一:

nano ~/hello.txt

输入三行内容,例如:

Hello Ubuntu
This is my first file
nano is easy

按 Ctrl + O,回车保存。按 Ctrl + X 退出。

cat ~/hello.txt

输出三行内容。

练习二:

Ubuntu 里:

ip a

找到 inet 192.168.x.x。

Mac 终端:

ssh devops@192.168.x.x

输入密码后,执行:

hostname    # 输出 Ubuntu 主机名
whoami      # 输出 devops

练习三:

创建快照:VMware Fusion 菜单 → 虚拟机 → 拍摄快照 → 名称“刚装好系统”。

故意破坏:

sudo rm /etc/hostname
sudo reboot

重启后,系统可能卡在启动阶段,或者主机名变成 localhost。

恢复快照:VMware Fusion 菜单 → 虚拟机 → 快照 → 恢复到“刚装好系统”。

下集预告

Ubuntu 装好了,SSH 连上了,nano 也会用了。老周说:“明天开始,第一个项目——搭博客。”但小林不知道,Hugo 安装、主题配置、Nginx 部署,每一步都有坑。而第一个坑,就藏在他以为最简单的 git clone 里。

下一集:《老师当年说,Linux 的“房间”和“钥匙”要先搞清楚》