努力
加油

在UEFI固件的服务器上安装Ubuntu 22.04需要注意哪些启动配置?

在 UEFI 架构的服务器(无论是物理机还是云主机裸金属)上安装 Ubuntu 22.04,核心痛点通常不在“能不能装”,而在“装完能不能正常引导”以及“后续维护是否方便”。

相比传统的 BIOS+MBR 时代,UEFI 引入了安全启动、分区的规范性要求以及更严格的文件系统限制。以下是基于实际生产环境踩坑经验总结的关键配置点:

1. EFI System Partition (ESP) 是重中之重

这是最容易出错的地方。在 UEFI 模式下,必须存在一个 FAT32 格式的分区作为 EFI 系统分区(ESP)。

  • 大小建议:官方文档说 512MB 足够,但在服务器场景下,如果你打算多版本共存或保留多个内核备份,建议给 512MB – 1GB。太小了装几个内核更新就满了,导致无法启动。
  • 挂载点:必须是 /boot/efi。注意,不要把它和 /boot 混在一起。
  • 格式与标签:确保格式化为 vfat。为了方便识别,可以用 mkfs.vfat -F 32 -n EFI /dev/sdXN 设置卷标为 EFI,这样在多磁盘环境中更容易定位。
  • 权限:默认情况下,ESP 分区应该是全局可读可写,但通常不需要特殊权限修改。确保安装过程中没有因为权限问题导致 grub 文件写入失败。

2. GPT 分区表 vs MBR

  • 强制使用 GPT:UEFI 机器必须配合 GPT 分区表。如果你看到选项里有 MBR,直接忽略。
  • BIOS Boot Partition(仅针对特殊情况):
    • 如果你只是做纯 UEFI 引导,不需要创建所谓的 “bios_grub” 分区(那是 Legacy BIOS + GPT 混合模式才需要的)。
    • 但是,如果你的服务器 RAID 卡或者某些特定硬件对纯 UEFI 支持有 bug,可能需要预留一个 1MB 左右的未格式化分区用于 GRUB 第二阶段引导。大多数现代 Ubuntu 22.04 安装器会自动处理,但如果手动分区,请确认你的引导加载器能直接读取 ESP 中的文件。

3. Secure Boot(安全启动)的处理策略

国内很多云服务器厂商(如阿里云、腾讯云、华为云)的裸金属实例或自建 IDC 服务器,出于兼容性考虑,往往默认关闭 Secure Boot,或者只允许签名过的内核。

  • 生产环境建议:关闭 Secure Boot。
    • 原因:Ubuntu 22.04 虽然支持 Secure Boot,但当你需要安装第三方驱动(如 NVIDIA 闭源驱动、ZFS 模块、某些网卡驱动)时,这些驱动往往没有经过微软或 Canonical 的严格签名认证。开启后会导致模块加载失败,系统蓝屏或黑屏。
    • 操作:进入 BIOS/UEFI 设置,找到 Secure Boot 选项,设为 Disabled。
  • 如果必须开启:你需要提前导入 Machine Owner Key (MOK),并在安装后通过 mokutil --import 导入你的公钥,这在自动化部署中非常麻烦,不适合大规模服务器集群。

4. 网络接口命名与 IPMI/iLO 冲突

服务器网卡数量多,且常有管理口(BMC/IPMI)和业务网口。

  • 预测性网络命名:Ubuntu 22.04 默认启用 systemd-networkd 或 NetworkManager 的预测性命名规则(如 ens1f0)。这比旧的 eth0 更可预测,但需要你在配置静态 IP 时明确对应关系。
  • 关键检查:在安装前,务必通过 IPMI/iLO/ILO 查看当前物理网口的 MAC 地址和名称映射。避免把业务流量配到了管理口上。
  • Netplan 配置:22.04 使用 Netplan。编辑 /etc/netplan/*.yaml 时,确保指定正确的 match 条件(MAC 地址或 driver),而不是硬编码接口名,因为重启后接口名可能因 PCIe 枚举顺序变化而改变。

5. Grub 配置与内核参数

  • GRUB_TIMEOUT:服务器通常无人值守,建议将 GRUB_TIMEOUT=0 或极小值,避免卡在启动菜单。
  • console=ttyS0,115200n8:对于远程管理至关重要的服务器,确保内核命令行包含串口控制台输出。这样即使图形界面挂了,你还能通过 IPMI 的虚拟控制台看到日志。
    • 修改 /etc/default/grub 中的 GRUB_CMDLINE_LINUX_DEFAULT,添加上述参数。
    • 执行 sudo update-grub 生效。
  • UEFI 变量清理:如果之前装过 Windows 或其他 Linux,UEFI NVRAM 里可能有残留的启动项。安装 Ubuntu 后,用 efibootmgr 检查并删除无用的启动条目,防止混乱。

6. 文件系统选择:ext4 vs ZFS

  • 推荐 ext4:对于大多数通用服务器,ext4 稳定、性能可预测、恢复工具丰富。
  • 谨慎使用 ZFS:虽然 Ubuntu 22.04 对 ZFS 支持很好,但在 UEFI 服务器上,ZFS 的 bootfs 机制需要额外配置。如果选 ZFS,安装器会自动创建 ESP 和 ZFS 根文件系统。但要注意,ZFS 的内核模块较大,可能影响启动速度,且在某些老旧 RAID 卡上兼容性不佳。除非你有明确的快照/复制需求,否则优先选 ext4。

7. 常见坑点排查清单

问题现象 可能原因 解决方案
安装后重启进不了系统,直接跳回 BIOS ESP 分区未正确挂载或 grub 未安装到 ESP 检查 /boot/efi 是否存在,重新运行 sudo grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu
启动时提示 “No bootable device” UEFI 启动顺序错误,或 ESP 分区不是 FAT32 进 BIOS 调整启动顺序,确认 ESP 分区格式
无法获取 IP 地址 网卡驱动缺失或 netplan 配置错误 检查 ip a,确认网卡是否被识别;检查 /etc/netplan/ 下的 yaml 语法
时间不同步 NTP 服务未启动或时区设置错误 安装 chrony 或 ntp,设置 timedatectl set-timezone Asia/Shanghai

8. 自动化部署建议(Kickstart/Autoinstall)

如果是批量部署,推荐使用 Ubuntu 22.04 的 Autoinstall 功能(基于 cloud-init)。

  • 编写 user-data YAML 文件。
  • 重点配置 storage 部分,明确定义 ESP 分区的大小和类型。
  • 示例片段:
    storage:
      config:
        - ptable: gpt
          path: /dev/sda
          type: disk
          wipe: superblock
        - {ptype: ef00, size: 512M, flag: boot, number: 1, type: partition} # ESP
        - {fstype: fat32, volume: <partition_id>, label: EFI} # 格式化 ESP
        - {fstype: ext4, volume: <root_partition_id>}

总结

在 UEFI 服务器上装 Ubuntu 22.04,记住三个关键词:GPT、ESP (/boot/efi)、关 Secure Boot。只要这三个环节不出错,剩下的就是标准的 Linux 安装流程。别迷信图形化安装器的“自动分区”,对于服务器,手动规划分区表永远是最稳妥的选择。