周行文 2025-12-16 06:55 采纳率: 98.8%
浏览 6
已采纳

No EFI System Partition导致系统无法引导

问题:在UEFI模式下安装Linux系统后,重启提示“Operating System not found”或无法进入系统。经排查发现磁盘未创建EFI系统分区(ESP),导致引导加载程序(如GRUB2)无法写入必要的启动文件。由于缺少该FAT32格式的ESP分区(通常挂载为/boot/efi),UEFI固件找不到启动项,从而引发系统无法引导。此类问题常见于手动分区时遗漏ESP分区或安装工具未正确配置UEFI引导环境。如何识别并修复此问题?
  • 写回答

1条回答 默认 最新

  • 三月Moon 2025-12-16 06:55
    关注

    1. 问题背景与现象描述

    在UEFI模式下安装Linux操作系统时,若未正确创建EFI系统分区(ESP),系统重启后将提示“Operating System not found”或直接跳过启动项。该问题的根本原因在于UEFI固件依赖于一个特定的FAT32格式分区——即EFI系统分区,用于存放引导加载程序(如GRUB2)的核心文件(例如grubx64.efi)。当此分区缺失时,即使Linux系统已成功安装至根分区,UEFI也无法定位并执行引导代码。

    2. 常见触发场景分析

    • 手动分区遗漏ESP:用户在使用图形化或文本安装器(如Ubuntu、CentOS Anaconda)时,未主动创建大小为512MB~1GB的FAT32分区,并设置其类型为“EFI System”。
    • 自动分区逻辑错误:部分旧版本安装工具在检测到GPT磁盘但未识别UEFI环境时,仍采用传统BIOS引导方式配置分区表。
    • ESP未正确挂载:虽创建了ESP分区,但在安装过程中未将其挂载至/boot/efi,导致GRUB无法写入启动文件。
    • 多重操作系统干扰:双系统环境中,Windows的ESP被删除或覆盖,造成UEFI启动项丢失。

    3. 故障诊断流程图

    graph TD
        A[系统重启提示'OS not found'] --> B{是否处于UEFI模式?}
        B -->|是| C[检查磁盘是否存在ESP分区]
        B -->|否| D[应使用Legacy BIOS安装]
        C -->|无ESP| E[需创建并格式化ESP]
        C -->|有ESP但无法启动| F[检查/boot/efi是否挂载及GRUB是否安装]
        E --> G[使用parted/gdisk创建EFI分区]
        F --> H[重新安装GRUB2至ESP]
    

    4. 检测方法与工具命令

    可通过以下命令组合判断当前系统状态:

    命令作用说明
    lsblk -f查看所有块设备及其文件系统类型,确认是否有FAT32分区标记为/boot/efi
    fdisk -l /dev/sda列出磁盘分区结构,识别ESP(类型ID为EF00或标签为EFI System)
    mount | grep efi检查EFI分区是否已挂载
    efibootmgr显示UEFI启动项列表(仅在UEFI运行环境下有效)
    cat /sys/firmware/efi/fw_platform_size输出64表示系统正以UEFI模式运行

    5. 修复步骤详解

    1. 准备可启动救援介质:使用Live USB进入Linux救援环境,确保支持UEFI启动。
    2. 确认磁盘布局sudo parted /dev/sda print 查看分区表类型(必须为gpt)。
    3. 创建ESP分区
      # 使用gdisk创建EFI系统分区
      gdisk /dev/sda
      # 输入n创建新分区
      # 分区号默认,起始扇区回车,大小输入+550M
      # 类型代码输入EF00(代表EFI System)
      # w保存退出
      
    4. 格式化为FAT32mkfs.fat -F32 /dev/sda1(假设新分区为sda1)。
    5. 挂载ESP和根分区
      mkdir /mnt/boot/efi
      mount /dev/sda1 /mnt/boot/efi
      mount /dev/sdaX /mnt       # X为实际根分区编号
      
    6. 绑定虚拟文件系统
      for i in /dev /dev/pts /proc /sys /run; do mount -B $i /mnt$i; done
      
    7. 切换至原系统环境chroot /mnt
    8. 重新安装GRUB2grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUB
    9. 生成配置文件update-grubgrub2-mkconfig -o /boot/grub/grub.cfg
    10. 验证UEFI启动项efibootmgr --verbose 确认GRUB条目存在。

    6. 预防措施与最佳实践

    为避免此类问题反复发生,建议遵循以下规范:

    • 在UEFI模式下安装前,务必确认主板设置中启用UEFI(禁用CSM/Legacy Support)。
    • 使用GPT分区表(可通过parted -l确认)。
    • 手动分区时,预留至少512MB空间给ESP,使用FAT32格式,并挂载至/boot/efi
    • 安装完成后,执行efibootmgr验证启动项注册情况。
    • 对关键服务器部署,建议通过自动化脚本预检分区结构与UEFI兼容性。
    • 多系统共存时,共享同一ESP分区(推荐),避免重复创建。
    • 定期备份ESP内容,防止意外损坏导致系统不可引导。
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 12月17日
  • 创建了问题 12月16日