BIOS与UEFI是启动范式的代际更替而非界面换皮:BIOS为16位实模式,依赖MBR和INT中断;UEFI为32/64位PE/COFF环境,依赖ESP分区与.efi文件加载,支持安全启动、网络协议及模块化驱动。

服务器 BIOS 和 UEFI 不是“换皮”关系,而是启动范式的代际更替。选错模式会导致装机失败、硬盘无法识别、Secure Boot 报错、PXE 启动中断,甚至虚拟化功能不可用。生产环境里,UEFI 已是默认要求,但老设备兼容、混合架构运维、固件升级回滚等场景仍需精准掌握两者的边界与切换逻辑。
BIOS 与 UEFI 的本质差异:不止是界面变化
BIOS 是 16 位实模式固件,靠硬编码中断(如 INT 13h)访问硬件,启动流程绑定 MBR + 512 字节引导扇区,不支持大于 2TB 磁盘、无模块化驱动、无安全启动能力。UEFI 是 32/64 位 PE/COFF 可执行环境,自带 FAT32 驱动、网络协议栈、运行时服务(如 GetTime)、可签名 EFI 应用,启动依赖 EFI 系统分区(ESP),路径固定为 /EFI/BOOT/BOOTX64.EFI(x86_64)或 BOOTIA32.EFI(32 位旧平台)。
关键区别不是“有没有图形界面”,而是:
- BIOS 启动靠“跳转执行一段扇区代码”,UEFI 启动靠“加载并验证一个.efi 文件”
- BIOS 的启动项存储在 CMOS 中且不可扩展;UEFI 的启动项存在 NVRAM 里,可增删、可命名、可带参数(如
bootmgr -d /dev/sda1 -p 1) - BIOS 无原生网络协议支持;UEFI 内置 IPv4/IPv6、DHCP、TFTP、HTTP 客户端,PXE 启动无需额外 ROM
生产环境如何判断当前启动模式
不能只看设置界面叫“BIOS Setup”还是“UEFI Firmware Settings”。真实模式由固件行为和磁盘分区共同决定:
- Linux 下执行
ls /sys/firmware/efi:目录存在即为 UEFI 模式;不存在则极大概率是 BIOS(Legacy) - 检查磁盘分区表:
sudo fdisk -l /dev/sda | grep 'Disklabel',显示 gpt 且系统已从 ESP 启动,才是完整 UEFI 流程;仅 gpt + BIOS 启动 = 不推荐的混合模式,易出问题 - 查看启动日志:
dmesg | grep -i "efi\|boot",含EFI: EFI v2.70 by AMI或efi: EFI Memory Map即确认 UEFI 运行 - Windows 下运行
msinfo32,查看“BIOS 模式”字段:显示“UEFI”或“Legacy”
UEFI 生产部署必须做对的五件事
很多线上故障源于 UEFI 基础配置疏漏,而非高级功能误用:
- 强制启用 Secure Boot 并预载密钥:vSphere 8、RHEL 9/CentOS Stream 9、Ubuntu 22.04+ 默认要求。若使用自定义内核或驱动,需用 shim.efi + MOK(Machine Owner Key)机制签名,不能直接禁用
-
ESP 分区必须独立且格式为 FAT32:大小建议 ≥500MB;挂载点固定为
/boot/efi;不能与/boot合并(否则 GRUB 更新可能破坏 ESP 结构) - 禁用 CSM(Compatibility Support Module):CSM 是 UEFI 芯片内置的 BIOS 兼容层,开启后会降级为 Legacy 启动,导致 GPT 磁盘被识别为 MBR、Secure Boot 失效、NVMe 启动异常
-
校准 NVRAM 启动项:用
efibootmgr -v查看当前顺序;新增项用efibootmgr -c -d /dev/sda -p 1 -L "CentOS" -l '\EFI\centos\grubx64.efi';避免依赖“BootNext”临时项,应写入永久 BootOrder -
固件更新前备份 NVRAM 启动项:部分厂商(如 Dell iDRAC、HPE iLO)升级后清空 NVRAM;可用
dd if=/sys/firmware/efi/efivars/... of=efi-backup.bin(需 root)或厂商工具导出
PXE 网络装机:BIOS 与 UEFI 必须分离部署
同一台 PXE 服务器要同时支持两类客户端,不能共用一套文件路径或配置逻辑:
-
BIOS 客户端:请求
pxelinux.0→ 从 TFTP 根目录读取pxelinux.cfg/default→ 加载vmlinuz和initrd.img(位于/var/lib/tftpboot/centos8/等子目录) -
UEFI 客户端:请求
grubx64.efi(或BOOTX64.EFI)→ 从 TFTP 根目录读取grub.cfg(路径需匹配 EFI 应用所在位置,如/var/lib/tftpboot/uefi/grub.cfg)→ 加载内核需用linuxefi和initrdefi命令,且镜像路径必须是 TFTP 可达的相对路径(如centos8/vmlinuz) -
关键隔离点:DHCP Option 66/67 要区分;TFTP 目录结构建议分
/bios/和/uefi/;GRUB 配置中避免混用linux和linuxefi;Kickstart 文件中bootloader --location=mbr(BIOS)与--location=partition(UEFI)必须对应
不复杂但容易忽略——真正卡住交付的,往往不是内核参数调优,而是第一块磁盘有没有正确格式化为 GPT、ESP 分区有没有被 mkfs.fat -F32 重建、NVRAM 启动项有没有被 efibootmgr 正确写入。把这四步做扎实,UEFI 就稳了。











