news 2026/6/4 14:50:34

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/6/3 20:24:30

谷歌的ui设计规范主要有哪些

谷歌的UI设计规范核心是‌Material Design‌,其要点包括:设计原则‌材质与动效‌:灵感源于物理世界,通过阴影、层次和自然动效(如重力、摩擦力)增强交互真实感。 无障碍设计‌:遵循WCAG标准&…

作者头像 李华
网站建设 2026/6/3 9:28:50

操作系统应用(四十二)仙盟屏幕录像工具—东方仙盟炼气期

东方仙盟屏幕录像工具亮点 1. 手机发布免二次剪辑 电脑录屏能自动适配移动端竖版比例,录手机讲解内容时会智能放大操作区域。导出后直接就能发抖音、快手等平台,省去用剪映等工具调整尺寸的麻烦,做短视频教程效率翻倍。 2. 录制功能超全面 …

作者头像 李华
网站建设 2026/6/3 9:01:40

javadoc规范、idea生成javadoc等

文章目录idea生成javadocidea生成javadoc时报错 编码GBK的不可映射字符有哪些javadoc注解文档以前不太注意这些规范,认为这个没用,写代码随心所欲,实际这个想法是不对的。idea生成javadoc 可以给整个项目生成,也可以给某个文件生…

作者头像 李华
网站建设 2026/6/3 20:14:59

AtomicInteger实现安全减库存

文章目录安全库存类任意main方法里面调用使用说明并发情况下如何多节点执行并发问题一直是个小难点,自动有了AtomicInteger类,一切都变得简单了。安全库存类 这个类支持几种减库存的方法,挺好的。 代码: public class SafeInve…

作者头像 李华