服务器运维

UEFI 和 Legacy 的区别:服务器装系统该选哪个

UEFI 和 Legacy 的区别在于固件怎样找到操作系统:Legacy(传统 BIOS 或 CSM 兼容模式)执行磁盘第一个扇区里的引导代码,配 MBR;UEFI 从 EFI 系统分区加载 .efi 引导程序,配 GPT。服务器装系统没有特殊理由就选 UEFI,装好以后不要再切换模式。

作者 顶联产品团队发布于 7 分钟阅读

UEFI 和 Legacy 的区别,归根到底是开机时固件用哪种方式把控制权交给操作系统。Legacy 是传统 BIOS 的启动方式:读出磁盘第一个扇区(MBR)里的几百字节引导代码并执行,分区表也记在这个扇区里;UEFI 则直接读取磁盘上一个 FAT32 格式的 EFI 系统分区,加载其中的 .efi 引导程序,分区表用 GPT。2 TiB 启动盘限制、安全启动、PXE 引导文件这些差异,都是由此而来。服务器装系统没有特殊理由就选 UEFI:新平台默认就是它,有的已经不再提供 Legacy;但装好之后不要再切换模式,否则原系统会起不来。

一张表看懂 UEFI 和 Legacy 的区别

项目 Legacy(BIOS / CSM) UEFI
引导代码在哪 磁盘第 0 扇区(MBR)里的 446 字节,加上紧随其后的扇区 EFI 系统分区(ESP)里的 .efi 文件
启动项存在哪 只记录设备的尝试顺序,不记录具体系统 主板 NVRAM 里的 Boot#### 变量,指向某块盘上的某个文件
分区表 MBR;Linux 也能用 GPT,但要加一个 BIOS boot 小分区,Windows 只能用 MBR GPT;Linux 也能用 MBR,Windows 只能用 GPT
启动盘可用容量 MBR 下最多 2 TiB GPT 下没有实际限制
分区数量 4 个主分区,更多要用扩展分区 默认 128 个
安全启动(Secure Boot) 不支持 支持,校验引导程序和驱动的签名
网络启动 PXE,只支持 IPv4,用 pxelinux.0 等文件 PXE(IPv4、IPv6)和 HTTP 启动,用 .efi 文件
扩展卡固件 加载卡上的传统 Option ROM,可用空间很小 加载卡上的 UEFI 驱动
32 位系统 可以引导 x64 服务器的 UEFI 固件不能引导 32 位系统

今天的服务器固件几乎都是 UEFI,所谓“Legacy 模式”,是 UEFI 固件里的兼容支持模块(CSM,Compatibility Support Module)在模拟传统 BIOS。BIOS 设置里的写法因品牌而异:有的是 Boot Mode 选 UEFI 或 Legacy BIOS,有的是 CSM Support 选 Enabled 或 Disabled,Dell 的 Boot Mode 选项是 BIOS 和 UEFI。开启安全启动前,一般要先关闭 CSM。Intel 早在 2017 年就提出要在平台上逐步取消 CSM,新一代服务器陆续只保留 UEFI,例如 HPE ProLiant Gen11 已不再提供 Legacy 启动模式;具体到品牌和机型,以官方文档为准。

两种引导流程:MBR 首扇区与 EFI 系统分区

Legacy 启动的过程:

  1. 开机自检后,BIOS 按启动顺序找到第一块可启动的硬盘;
  2. 读出它的第 0 扇区,共 512 字节:446 字节引导代码、64 字节分区表、2 字节结束标志 55AA,然后把控制权交给这段代码;
  3. 引导代码加载下一阶段:Linux 的 GRUB 把核心镜像放在 MBR 之后的空闲扇区里;Windows 则读取活动分区的引导扇区,再由它加载 bootmgr;
  4. 最后加载内核,Windows 是 winload.exe。

UEFI 启动的过程:

  1. 开机自检后,固件读取 NVRAM 里的 BootOrder 和各条 Boot#### 启动项;
  2. 每条启动项指向“哪块盘、哪个分区上的哪个文件”,例如 \EFI\rocky\shimx64.efi、\EFI\Microsoft\Boot\bootmgfw.efi;
  3. 固件直接读 ESP 的 FAT32 文件系统,加载这个文件;所有启动项都无效时,再尝试回退路径 \EFI\BOOT\BOOTX64.EFI;
  4. 引导程序加载内核,Windows 是 winload.efi。

两种流程的差别带来一个直接后果:Legacy 的引导信息全在硬盘上,换主板、清 BIOS 都不影响;UEFI 有一半信息存在主板 NVRAM 里,换主板、刷 BIOS 或恢复默认设置后,启动项可能丢失,硬盘完好也开不了机,要重新添加启动项。

查看一台已经装好的系统是用哪种方式启动的:

# Linux
ls /sys/firmware/efi >/dev/null 2>&1 && echo UEFI || echo Legacy
efibootmgr -v          # Legacy 启动的系统会提示 EFI variables are not supported
mokutil --sb-state     # 安全启动是否开启
# Windows,以管理员身份运行 PowerShell
$env:firmware_type                 # 输出 UEFI 或 Legacy
bcdedit | findstr /i winload       # winload.efi 是 UEFI,winload.exe 是 Legacy
Confirm-SecureBootUEFI             # 返回 True 或 False;Legacy 启动的系统上会报不支持

图形界面里也能看:运行 msinfo32,“系统摘要”中的“BIOS 模式”一行显示 UEFI 或“传统”。

2 TiB 限制从哪来:MBR 和 GPT 的算术

MBR 分区表的每个表项用 32 位记录分区的起始扇区和扇区数。按 512 字节的扇区算,能描述的最大范围是:

2³² × 512 字节 = 2,199,023,255,552 字节 = 2 TiB(约 2.2 TB)

超出的部分,分区表根本写不进去。GPT 用 64 位记录扇区地址,实际使用中没有容量上限;它在磁盘开头和末尾各存一份分区表,坏了一份还能用另一份恢复。

服务器上碰到这个限制,往往不是因为单块盘大,而是因为 RAID。4 块 4 TB 硬盘做 RAID 10,阵列卡交给系统的是一块 8 TB 的虚拟盘;Legacy 模式下装 Windows,安装程序只能用 MBR,8 TB 里只有 2 TiB 能分区,剩下的空间用不上。解决办法有两个:

  • 改用 UEFI + GPT,整块虚拟盘都能用,这是首选;
  • 在阵列卡上切出一块小的启动虚拟盘(例如 200 GB)装系统,剩余空间建第二块虚拟盘做数据盘,数据盘单独用 GPT 分区。Legacy 启动的系统可以正常读写 GPT 数据盘,只是不能从它启动。

另一个看似可行的绕法是用 4Kn 硬盘:扇区变成 4096 字节,MBR 能描述的范围随之扩大到 16 TiB。但 4Kn 盘作为启动盘一般要求 UEFI,这条路绕不过去。

UEFI PXE 和 Legacy PXE:要下发的文件不同

网络装机时,两种模式走的是两套引导代码,PXE 服务端要按客户端的模式下发不同的文件。网卡在 DHCP 请求的选项 93 里报告自己的架构,服务端据此区分:

项目 Legacy PXE UEFI PXE
DHCP 选项 93 的值 0 7 或 9(x64 UEFI,不同固件报的值不同);UEFI HTTP 启动为 16
常用引导文件 pxelinux.0、undionly.kpxe shimx64.efi 加 grubx64.efi、ipxe.efi、syslinux.efi
下载方式 TFTP TFTP;支持 HTTP 启动的固件可以直接用 HTTP 下载
IPv6 不支持 支持 PXE over IPv6
安全启动 不涉及 开启时引导文件必须带受信任的签名,用发行版自带的 shim 和 GRUB

落到操作上,有四点影响:

  • 一批机器的启动模式要统一。 模式混杂时,服务端要准备两套文件、维护两份菜单,排错时还得先分清是哪种。
  • UEFI 下网卡的网络引导往往要单独打开。 很多 BIOS 里叫 Network Stack 或 PXE Device,没打开的话启动菜单里根本没有网卡项。
  • 通过 BMC 设置一次性 PXE 启动时,要说明是 UEFI。 ipmitool 加上 options=efiboot,例如 ipmitool -I lanplus -H 10.20.0.15 -U admin -P '密码' chassis bootdev pxe options=efiboot,否则部分机型会按 Legacy 方式去引导。
  • 装好的系统跟着装机时的模式走。 用 UEFI PXE 装出来的就是 UEFI 系统,以后也必须以 UEFI 模式启动。

服务器装系统选 UEFI 还是 Legacy

新服务器默认 UEFI,原因很实际:

  1. 启动盘不受 2 TiB 限制,RAID 虚拟盘可以整块使用;
  2. 支持安全启动,引导链被篡改时固件拒绝加载,部分安全合规要求会用到;
  3. 从 NVMe 启动更可靠,Legacy 模式下 NVMe 盘能否作为启动盘,取决于有没有对应的 Option ROM,很多平台只在 UEFI 下支持;
  4. 扩展卡多了也不怕,Legacy 只给扩展卡的 Option ROM 留了很小的一块内存空间,插多块网卡、HBA 时可能提示 Option ROM 空间不足,部分卡的引导功能加载不上;
  5. 网络启动能力更全,PXE over IPv6 和固件原生的 HTTP 启动只在 UEFI 下提供;
  6. 平台正在淘汰 Legacy,今天选了 Legacy,换代时还得再迁移一次。

仍然需要 Legacy 的场景不多:

场景 原因 建议
安装 32 位操作系统 x64 服务器的 UEFI 固件不能引导 32 位系统 只能 Legacy;更好的办法是换 64 位系统
恢复按 Legacy + MBR 制作的老系统镜像 镜像里没有 EFI 分区和 UEFI 引导程序 临时用 Legacy,计划重做镜像
要从只有传统 Option ROM 的老扩展卡启动 这张卡在 UEFI 下无法作为启动设备 只影响从这张卡启动;能换卡就换卡
只能在 DOS 下运行的固件升级工具 需要从 DOS 启动盘引导 临时切换,用完切回,期间不要动系统盘的引导
PXE 服务端只准备了 pxelinux.0 没有 UEFI 引导文件 补齐服务端的 UEFI 文件,而不是让机器迁就

定下来之后,同一批机器统一设置。Dell 服务器可以通过 racadm 批量查看和修改,以下以 14、15 代为例,属性名和取值以对应版本的 RACADM 文档为准:

racadm get BIOS.BiosBootSettings.BootMode
racadm set BIOS.BiosBootSettings.BootMode Uefi
racadm jobqueue create BIOS.Setup.1-1
racadm serveraction powercycle

后两条先创建 BIOS 配置任务,再对服务器断电重启,任务在重启过程中写入 BIOS。其他品牌可以通过 Redfish 的 BIOS 属性或厂商自己的命令行工具修改,同样先在一台机器上验证,再推到整批。

切换模式后原系统起不来怎么办

典型场景:一台用 Legacy 装好的机器,有人为了做 UEFI PXE 把启动模式改成了 UEFI;或者刷了 BIOS、换了主板、清除了 CMOS,启动模式回到了出厂默认值。重启后要么提示找不到启动设备,要么直接进了 PXE 或 UEFI Shell,具体提示因品牌而异。这时硬盘上的系统和数据其实都还在。

按这个顺序处理:

  1. 先切回原来的模式。 判断原系统是哪种:盘上有一个一百 MB 到 1 GB 左右、FAT32 格式的 EFI 系统分区,就是 UEFI 装的;分区表是 MBR、没有 EFI 分区,就是 Legacy 装的。在救援系统里用 lsblk -f 和 fdisk -l 就能看出来。切回去,绝大多数情况就能正常启动。
  2. 模式对了,UEFI 系统还是起不来。 多半是换主板或恢复默认设置后,NVRAM 里的启动项没了。在 BIOS 的启动选项里用“添加启动项”浏览到 ESP 上的 .efi 文件,或者从救援系统用 efibootmgr 重新添加。
  3. 确实要从 Legacy 转到 UEFI,比如要用上 2 TiB 以外的空间或开启安全启动,再考虑转换。

Windows 有现成的转换工具 mbr2gpt,Windows 10 1703 起提供,在 Windows Server 上使用前先确认 C:\Windows\System32 下有 mbr2gpt.exe。先验证再转换,转换前暂停 BitLocker 并做好备份:

mbr2gpt /validate /allowFullOS
mbr2gpt /convert /allowFullOS

验证不通过时它会说明原因,例如主分区超过 3 个或存在扩展分区。转换成功后重启进 BIOS,把启动模式改为 UEFI。

Linux 没有一键工具,要手动完成,大致步骤是:

  1. 备份数据,把 BIOS 切到 UEFI 模式,从救援介质以 UEFI 方式启动;
  2. 用 sgdisk -g /dev/sda 把 MBR 分区表原地转换为 GPT,分区和数据保留;磁盘末尾要留出 33 个扇区存放备份分区表,最后一个分区顶到盘尾时要先缩小它;
  3. 腾出空间新建 EFI 系统分区:sgdisk -n 0:0:+512M -t 0:EF00 /dev/sda,再用 mkfs.vfat -F 32 格式化,没有空闲空间时要先缩小或删掉 swap 分区;
  4. 挂载原系统并 chroot,把新分区挂到 /boot/efi 并写进 fstab,安装 UEFI 版的 GRUB 和 shim 软件包,重新生成 grub.cfg 并添加启动项;
  5. 保持 BIOS 的 UEFI 模式重启,从新添加的启动项进入原系统。

注意,做完第 2 步,这块盘就已经无法用 Legacy 方式启动了:GRUB 原先放在 MBR 之后空闲扇区里的代码,位置被 GPT 分区表占用。所以必须一口气做完第 4 步再重启。这个过程出错的代价高,能重装的机器,备份数据后直接用 UEFI 重装往往更省时间。

在管理系统里怎么落地

改启动模式、判断系统卡在哪一步,都离不开看开机画面:BIOS 里当前是什么模式,启动菜单里有哪些项,屏幕上提示了什么错误。Toplink DCIM 的 IPMI 远程管理提供走 BMC 通道的 VNC 控制台,开机自检、BIOS 设置到安装程序的全过程都能在浏览器里看到和操作,也能发送 Ctrl+Alt+Del 等特殊按键;还可以设置下一次从 PXE、在线 ISO 或硬盘启动,远程挂载安装镜像,系统起不来时进入救援模式抢修。为了改一个启动模式专门跑一趟机房,这样的事就可以省掉了。

常见问题

UEFI 模式下一定要关闭安全启动才能装系统吗?

不一定。主流 Linux 发行版和 Windows Server 的安装介质都带有签名的引导程序,开着安全启动可以直接安装。需要关闭或另行登记密钥的情况,是引导程序或驱动没有受信任的签名,例如自己编译的 iPXE、部分第三方内核模块。

EFI 系统分区要多大?

UEFI 规范没有规定固定大小。Windows 安装程序默认建 100 MB(4Kn 盘上是 260 MB),Linux 发行版的安装程序通常建几百 MB 到 1 GB。手动分区时给 512 MB 左右、格式化为 FAT32 一般就够,要放多个引导程序时再留大一些。

虚拟机也要区分 UEFI 和 Legacy 吗?

要。QEMU/KVM 不指定固件时用 SeaBIOS,也就是 Legacy,Proxmox VE 新建虚拟机默认也是它,改选 OVMF 固件才是 UEFI;Hyper-V 的第 1 代虚拟机是 BIOS,第 2 代是 UEFI。导入或迁移虚拟机镜像时,固件类型要和镜像装机时的模式一致,否则同样起不来。

想看看在你的机房里怎么用?

从一次产品演示开始,梳理你的业务链路。

查看价格
服务热线 400-112-2951

让我们聊聊你的 IDC 业务

扫码添加企业微信,预约产品演示或申请试用。

Toplink 企业微信二维码

长按保存或使用企业微信 / 微信扫描

也可致电
400-112-2951
Telegram
@TopLink88