努力
加油

在阿里云ECS中使用Ubuntu UEFI版本需要注意什么?

在阿里云 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 实例启动异常:

  1. 无法 SSH 连接:

    • 检查安全组。
    • 检查 cloud-init 是否成功注入了 SSH 公钥。
    • 使用阿里云控制台的 VNC 登录(Instance Console Connection)查看启动过程。这是最直接的调试手段。
  2. 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
  3. 磁盘空间不足:

    • UEFI 分区(EFI System Partition, ESP)通常只有 512MB 或 1GB。不要往里面塞东西。清理 /boot/efi/ 下的旧内核 initrd 文件(谨慎操作,先备份)。

7. 总结与建议

  • 优先使用官方镜像:别自己折腾 UEFI 安装流程,直接用阿里云提供的 Ubuntu 公共镜像。
  • 关注 cloud-init:它是云原生系统的神经中枢,确保它正常工作。
  • 善用 VNC 控制台:遇到任何启动问题,第一反应是打开 VNC 看日志,而不是盲目猜测。
  • 定期更新内核和 GRUB:保持系统最新,修复已知的 UEFI 兼容性问题。

总的来说,在阿里云上使用 Ubuntu UEFI 版本,只要遵循标准操作流程,基本不会有大问题。主要精力应放在网络配置(Netplan)、cloud-init 状态监控和磁盘 UUID 管理上。