第4章:固件更新机制:传统更新方式(DOS/Windows)与现代更新方式(Linux下fwupd、UEFI Capsule Update)
固件更新这事儿,说简单也简单,说复杂能让你折腾一宿。我这些年经手过的服务器,少说也有上千台了,每次固件升级都像是一次“心脏手术”——搞好了性能提升,搞砸了直接变砖。今天咱们就聊聊固件更新的几种主流方式,从老掉牙的DOS到现代的UEFI Capsule,我都会把实际踩过的坑讲清楚。
4.1 传统更新方式:DOS下的“硬核”操作
说实话,DOS更新方式现在用得越来越少了,但有些老旧的服务器,比如2015年以前的Xeon E5平台,你绕不开它。我记得有一次去某数据中心巡检,客户一台关键业务服务器还是E5 v3的,BIOS版本停留在2017年,死活不肯升级。为啥?因为运维团队没人会做DOS启动盘了。
DOS更新的核心流程其实很简单:
- 制作DOS启动盘:用Rufus或HP USB Format Tool,把U盘做成FreeDOS或MS-DOS启动盘
- 拷贝固件文件:把Intel提供的BIOS/BMC更新文件(通常是.bin或.efi格式)拷进去
- 执行更新命令:比如
flashupdt.exe /bios /file:BIOS.bin - 等待重启:更新完成后自动重启,期间绝对不能断电
DOS方式的优点很明显——兼容性好,几乎任何Intel服务器都能用。但缺点也致命:操作繁琐,需要重启到DOS环境,而且更新过程中一旦断电,服务器就彻底“凉凉”了。我见过最惨的一次,某机房UPS故障,更新到一半断电,那块主板直接报废,换新花了2万多。
4.2 Windows下的固件更新:图形化更友好
Windows环境下的更新,说白了就是Intel把DOS那套东西包装成了图形界面。你只需要在Windows系统里双击运行更新程序,剩下的交给它自动完成。
具体步骤大概是:
- 下载Intel Server Board对应的Windows更新包(通常是.exe格式)
- 以管理员身份运行,选择要更新的组件(BIOS、BMC、FRU等)
- 程序会自动检测当前版本,提示是否需要升级
- 点击“Update”,系统会重启进入一个临时环境执行更新
- 更新完成后自动回到Windows
我个人习惯在Windows下更新时,先把杀毒软件关了,把不必要的服务停掉。为啥?因为有一次我在更新BMC固件时,Symantec Endpoint Protection突然弹窗拦截了更新进程,结果BMC刷了一半卡住了,最后只能进维护模式重新刷。嗯,从那以后我学乖了。
UpdatePackage.exe /s /silent。批量部署时特别好用,我曾在200台服务器上同时执行静默更新,一晚上搞定。
4.3 现代更新方式:Linux下的fwupd
说到fwupd,这玩意儿真是Linux运维的福音。你想想看,以前在Linux下更新固件,要么重启进DOS,要么用Intel提供的Linux工具手动刷,麻烦得要死。fwupd的出现,让固件更新变得跟装个软件包一样简单。
fwupd的核心原理是通过LVFS(Linux Vendor Firmware Service)获取固件更新,然后通过UEFI Capsule机制在下次重启时完成更新。整个过程不需要你手动下载文件,也不需要进什么特殊环境。
基本操作就这几步:
# 安装fwupd
sudo apt install fwupd fwupd-signed # Debian/Ubuntu
sudo yum install fwupd # RHEL/CentOS
# 刷新固件元数据
sudo fwupdmgr refresh
# 查看可更新的固件
sudo fwupdmgr get-updates
# 执行更新
sudo fwupdmgr update
我去年帮一家互联网公司升级了300多台Intel服务器,全部用fwupd搞定。最爽的是,你可以用 fwupdmgr update --offline 让系统在下次重启时自动更新,完全不影响业务运行。你想想看,以前更新固件要停机,现在只需要计划一次重启就行了。
实际项目经验:有一次我遇到fwupd检测不到Intel服务器的固件更新,查了半天发现是LVFS里没有收录该型号的固件。后来手动添加了Intel的官方仓库才解决。命令是:fwupdmgr enable-remote lvfs-testing,但注意测试仓库的固件可能不够稳定。
4.4 UEFI Capsule Update:最优雅的更新方式
UEFI Capsule Update,说白了就是让固件更新在UEFI环境下完成,不需要依赖任何操作系统。这种方式的好处是——你可以在Windows、Linux、甚至ESXi下触发更新,然后系统重启进入UEFI环境自动执行,更新完再回到原来的系统。
它的工作流程是这样的:
- 操作系统把固件更新包(Capsule)写入到EFI系统分区(ESP)
- 系统重启时,UEFI固件检测到ESP里有待处理的Capsule
- UEFI在启动操作系统之前,先执行Capsule里的更新程序
- 更新完成后,清除Capsule标记,正常启动系统
在Linux下触发UEFI Capsule Update也很简单:
# 使用Intel的System Update工具
sudo sysupdate --bios --file=BIOS.cap
# 或者直接通过efibootmgr触发
sudo efibootmgr --create-only --disk /dev/sda --part 1 --loader \\EFI\\Intel\\capsule.efi
4.5 三种方式的对比与选择
说了这么多,到底该用哪种方式?我根据自己的经验整理了一张表,你一看就明白:
| 更新方式 | 适用场景 | 优点 | 缺点 | 我的推荐指数 |
|---|---|---|---|---|
| DOS | 老旧服务器、不支持UEFI的平台 | 兼容性最好,几乎100%能刷 | 操作繁琐,需要制作启动盘,风险高 | ⭐⭐ |
| Windows | Windows Server环境 | 图形化操作,支持静默安装 | 依赖Windows系统,更新过程可能被干扰 | ⭐⭐⭐ |
| fwupd | Linux环境,批量部署 | 自动化程度高,支持离线更新 | 依赖LVFS仓库,部分固件可能缺失 | ⭐⭐⭐⭐ |
| UEFI Capsule | 现代服务器,支持UEFI 2.3.1+ | 最优雅,不依赖OS,更新过程最安全 | 对UEFI实现有要求,部分老主板有bug | ⭐⭐⭐⭐⭐ |
我个人现在的习惯是:新服务器一律用UEFI Capsule Update,Linux环境优先用fwupd,只有遇到老古董才搬出DOS。你想想看,能一键搞定的事,何必折腾自己呢?
flashupdt.exe /bios /backup:backup.bin(DOS下)或 fwupdmgr get-devices --json > backup.json(fwupd下)。花30秒备份,能省你3小时的麻烦。