news 2026/7/7 19:01:21

BIOS兼容UEFI

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
BIOS兼容UEFI
背景: 传统legacy启动的机器,能否适配uefi 启动模式,使能系统从uefi 启动。

UEFI 启动引导文件是安装在 EFI 分区(EFI system partition ESP )的,分区大小通常在 100 -500 M 左右,且 efi 分区只支持FAT 文件系统(FAT12 FAT16 FAT32)。

UEFI 启动下系统分区通常是GPT格式的,传统legacy 使用MBR格式分区,相比MBR,GPT格式可以支持更大(2T以上)的分区大小。

legacy 兼容适配uefi
第一步 创建EFI分区

对非系统盘的磁盘进行分区,创建EFI 分区。注意备份数据。建议给虚拟机挂载1G大小的空磁盘(vdb),避免影响系统/数据。

需要将磁盘格式化成fat 文件系统类型,及 gpt格式分区

mkfs.fat -F32 /dev/vdb parted -s /dev/vdb mklabel gpt

mkfs.fat 可以通过下载 dosfstools 来获取。

格式化磁盘后,使用gdisk 工具,给磁盘分区,创建EFI 分区 gdisk /dev/vdb, 分区大小 100-200M就可以了。

给创建的分区设置系统类型时,输入编号 EF00(小写ef00也可以)。就设置该分区是 EFI 分区了。

gdiks 分区时的系统类型对应的编号 详见下表

EFI 分区设置好后将根分区 挂载到 /data (需要先创建下) 下, EFI 分区就设置好了。

梳理整个EFI 分区的创建过程,可以看到与系统的启动模式无关,bios/uefi 系统都可以完成这个步骤。

第二步,在EFI 分区安装grub

安装grub 需要用到 gurb2-install

安装bios 的gurb 时, 使用的命令是 grub2-install target=i386-pc /dev/vda。 安装UEFI 的 grub 时,需要加上 --efi-directory 参数 指定EFI 分区的路径。为了方便调试,可以再后面加上 --debug 参数,查看详细过程。

grub2-install --target=x86_64-efi --efi-directory=/data --bootloader-id=centos

--target 参数是指要安装grub的平台,在bios 中该处参数是 i386-pc,在UEFI中,是x86_64-efi。这里需要安装grub2-efi-x64-modules.noarch 这个包,提供该模块。

--bootloader-id 这个参数

命令后面没有跟EFI 分区的磁盘device(/dev/vdb) ,这块可以不用写,即使提供了 device 参数,grub2-install 也会忽略。

在bios 启动的系统上执行改步骤时,执行结果如下图

加上 --debug 上,查看如下

在执行 efibootmgr时报错,因为系统不是EFI启动的,没有相关变量。导致添加系统项失败。

关于efibootmgr,:是 UEFI 启动管理工具,在下图的文档中有说明,要成功执行efibootmgr 来添加启动项,需要使得 efibootmgr 能获取到EFI 变量,这就要求系统是从EFI 启动的,否则EFI 变量就无法获取。

安装grub, grub2-mkconfig -o /data/EFI/centos/grub.cfg

修改grub 中的filename 为 linuxefi

切换虚拟机的bios 参数,以UEFI 模式启动虚拟机,进入UEFI shell

在UEFI shell 中调试引导启动系统

执行 grubx64.efi 引导启动,该文件会读取grub.cfg 启动系统

此时,系统便以UEFI 模式启动系统了。 若在启动中因grub 参数问题导致启动失败,可在启动界面中出现版本信息时按 e 来修改grub 按ctrx + X 或者 F10 来启动系统。

结论:BIOS 启动系统,在创建EFI 分区,安装grub 引导文件后,切换uefi 启动,(目前调试结果是需要在UEFI shell中导引进入),可以进入系统。

下一步: 解决 efibootmgr 不能正常引导EFI 启动问题。

参考链接
https://wiki.archlinux.org/index.php/GRUB_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)#Chainload_%E4%B8%80%E4%B8%AA_Arch_Linux_.efi_%E6%96%87%E4%BB%B6

https://wiki.archlinux.org/index.php/EFI_system_partition#Mount_the_partition

https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface

https://wiki.archlinux.org/index.php/GPT_fdisk_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)

https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/7 7:23:18

N-乙酰-D-半乳糖胺——引领靶向递送新时代的关键糖分子 CAS:1811-31-0

在药物化学与递送系统飞速发展的今天,精准靶向已成为提高疗效、降低毒副作用的核心追求。N-乙酰-D-半乳糖胺(GalNAc),作为一种天然存在的氨基糖,正从基础生物化学研究走向生物医药应用的前沿,成为开发肝靶向…

作者头像 李华
网站建设 2026/7/7 17:47:40

【数据库】【Redis】基本概念和特点

Redis的基本概念和特点 Redis(Remote Dictionary Server)是一种开源的、基于内存的键值存储系统,支持多种数据结构(如字符串、哈希、列表、集合、有序集合等)。其核心特点包括: 高性能:数据存储…

作者头像 李华
网站建设 2026/7/7 17:12:05

基于Spring Boot 图书管理系统

基于Spring Boot 图书管理系统 一、系统背景与目的 随着信息技术发展和图书馆规模扩大,传统图书管理方式难以满足现代需求。基于 Spring Boot 开发的图书管理系统,旨在通过实现图书增删改查、用户管理、借阅管理等功能,提升管理效率与准确性…

作者头像 李华
网站建设 2026/7/7 5:53:07

Linux网络日志怎么查看?

Linux网络日志是排查网络故障、检测入侵行为的核心依据,但不同服务的日志分散在不同目录,且日志格式复杂,新手常陷入 找不到日志、看不懂内容的困境。那么Linux网络日志怎么查看?以下是详细内容介绍。Linux系统中的网络日志主要用于记录与网…

作者头像 李华
网站建设 2026/7/7 17:50:46

第十八篇:Day52-54 前端跨端开发进阶——从“多端适配”到“跨端统一”(对标职场“全栈化”需求)

一、前置认知:跨端开发的核心价值与职场痛点随着移动互联网、小程序、桌面应用等场景的爆发,企业面临“多端布局”与“研发成本”的矛盾:某电商平台需维护iOS、Android、H5、微信小程序4套代码,新增一个商品详情页需4个团队同步开…

作者头像 李华