在阿里云 ECS 上跑 Ubuntu UEFI 版本,核心痛点其实就两个:启动兼容性和网络/存储驱动加载时机。
很多人从传统 BIOS(Legacy)模式迁移到 UEFI 模式,或者新购实例直接选了 UEFI,最容易踩的坑不是系统装不上,而是装完重启后网卡没了、磁盘挂载不上,或者 SSH 连不进去。
下面按实操经验,把需要注意的关键点拆解一下:
1. 镜像选择与创建阶段
不要手动去官网下载 ISO 再上传镜像。
阿里云官方提供的 Ubuntu 镜像绝大多数已经针对 UEFI 做了适配。你在控制台创建实例时,如果选择“公共镜像”,直接选 Ubuntu 20.04/22.04/24.04 等版本即可。这些镜像默认就是 UEFI 引导配置好的。
- 注意内核版本:确保你选择的镜像包含较新的内核(Kernel)。UEFI 对内核版本有一定要求,老版本的 Ubuntu(如 16.04 早期版本)可能需要额外安装
grub-efi-amd64-signed才能正常引导。建议直接使用最新的 LTS 版本。 - 安全组放行:这点老生常谈,但必须强调。新建实例后,第一时间检查安全组是否放行了 22 端口(SSH)和 3389(如果开 Windows 远程桌面习惯的话),以及 ICMP(Ping)。很多新手因为没开安全组,以为 UEFI 有问题,其实是网络不通。
2. 关键依赖包:cloud-init 和 cloud-utils
这是 UEFI 模式下最容易出问题的地方。
在传统的 BIOS 环境下,系统可能还能勉强靠本地硬盘驱动启动。但在 UEFI + 云环境(尤其是阿里云这种虚拟化平台)下,cloud-init 是灵魂。它负责在第一次启动时完成主机名设置、SSH 密钥注入、网络配置初始化。
-
务必确认 cloud-init 已安装且运行正常:
sudo apt update && sudo apt install cloud-init cloud-utils -y如果你是自己制作自定义镜像(Custom Image),一定要确保镜像里包含了
cloud-init。否则重启后,网络接口可能无法获取 IP(因为 DHCP 请求失败或网络管理器未正确配置),导致你“失联”。 -
检查 cloud-init 状态:
systemctl status cloud-init确保它是
active (exited)或running状态。如果是failed,去/var/log/cloud-init.log看报错,通常是网络配置模板(Netplan 或 ifupdown)的问题。
3. 磁盘挂载与 fstab 问题
UEFI 本身不直接导致磁盘问题,但云盘快照恢复或自定义镜像迁移时,/etc/fstab 里的 UUID 变化会导致开机卡住,进不了系统。
-
使用 LABEL 或 UUID 而非 /dev/vda1:
在/etc/fstab中,强烈建议使用 UUID 来标识分区,而不是设备名(如/dev/vda1)。因为云服务器重启或更换宿主机时,设备名可能会变(虽然概率低,但存在),而 UUID 不变。# 查看当前分区 UUID blkid编辑
/etc/fstab,确保格式类似:UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx / ext4 errors=remount-ro 0 1 -
Swap 分区处理:
阿里云 ECS 通常推荐不使用 Swap 分区,而是使用内存交换文件(swapfile),或者完全禁用 Swap。如果在 UEFI 镜像中启用了 Swap 分区,请确保该分区在 fstab 中正确配置,并且没有被错误地标记为需要 fsck 检查(除非你真的有文件系统损坏风险)。
4. 网络配置:Netplan vs ifupdown
Ubuntu 18.04+ 默认使用 Netplan 进行网络配置。在 UEFI 模式下,网络初始化速度非常快,但有时会出现“网络就绪慢于 SSH 服务启动”的情况,导致你刚连上 SSH,发现 IP 还没分配好。
-
检查 Netplan 配置:
配置文件通常在/etc/netplan/目录下。确保 YAML 缩进正确(空格,不要用 Tab!)。network: version: 2 ethernets: eth0: dhcp4: true optional: true # 这行很重要,允许网络延迟启动添加
optional: true可以避免因网络初始化稍慢而导致 systemd 服务启动失败。 -
应用配置:
sudo netplan apply
5. GRUB 引导配置
UEFI 的核心是 GRUB 2。在阿里云上,GRUB 的配置通常由 grub.cfg 自动生成,但你可以通过修改 /etc/default/grub 来调整。
- 超时时间:
如果系统启动时有多个内核选项,适当增加GRUB_TIMEOUT,避免误操作进入错误内核。 - 串行控制台输出:
为了便于调试,建议在 GRUB 命令行中添加console=ttyS0,115200n8,这样即使图形界面挂了,也能通过阿里云控制台的“VNC 登录”看到完整的启动日志。
修改/etc/default/grub:GRUB_CMDLINE_LINUX_DEFAULT="quiet splash console=ttyS0,115200n8"然后执行:
sudo update-grub
6. 常见故障排查清单
如果遇到 UEFI 实例启动异常:
-
无法 SSH 连接:
- 检查安全组。
- 检查
cloud-init是否成功注入了 SSH 公钥。 - 使用阿里云控制台的 VNC 登录(Instance Console Connection)查看启动过程。这是最直接的调试手段。
-
VNC 黑屏或卡在 “Booting from Hard Disk”:
- 可能是 GRUB 未正确安装到 EFI 分区。
- 解决方法:通过 VNC 进入 recovery mode,重新安装 grub-efi-amd64-signed:
sudo apt install --reinstall grub-efi-amd64-signed shim-signed sudo update-grub
-
磁盘空间不足:
- UEFI 分区(EFI System Partition, ESP)通常只有 512MB 或 1GB。不要往里面塞东西。清理
/boot/efi/下的旧内核 initrd 文件(谨慎操作,先备份)。
- UEFI 分区(EFI System Partition, ESP)通常只有 512MB 或 1GB。不要往里面塞东西。清理
7. 总结与建议
- 优先使用官方镜像:别自己折腾 UEFI 安装流程,直接用阿里云提供的 Ubuntu 公共镜像。
- 关注 cloud-init:它是云原生系统的神经中枢,确保它正常工作。
- 善用 VNC 控制台:遇到任何启动问题,第一反应是打开 VNC 看日志,而不是盲目猜测。
- 定期更新内核和 GRUB:保持系统最新,修复已知的 UEFI 兼容性问题。
总的来说,在阿里云上使用 Ubuntu UEFI 版本,只要遵循标准操作流程,基本不会有大问题。主要精力应放在网络配置(Netplan)、cloud-init 状态监控和磁盘 UUID 管理上。
云技术博客