我更新了 Ubuntu 14.04 ( aptitude update
, safe-upgrade
)。之后我检查了 EFI ( efibootmgr -v
) 并发现 Ubuntu 的 EFI 条目不存在。我尝试创建新条目:
efibootmgr -c -d /dev/sda -p 1 -l \\EFI\\ubuntu\\grubx64.efi -L ubuntu
没有新条目并且我收到错误消息:
efivars: set_variable() failed: status=-28
当前版本:
3.13.0-68-generic #111~precise1-Ubuntu SMP Fri Nov 6 18:17:31 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
答案1
我进行了一些挖掘,您收到的“-28”错误转换为 Linux 的错误ENOSPC
,意思是“设备上没有剩余空间”:
http://kernelhistory.sourcentral.org/linux-0.99.2/S/32.html
这反过来又从 EFI 翻译而来EFI_OUT_OF_RESOURCES
:
http://wiki.phoenix.com/wiki/index.php/EFI_STATUS#EFI_OUT_OF_RESOURCES
换句话说,固件无法保存新条目。重启一两次可能就能解决问题。另一种可能是启动条目太多。尝试执行efibootmgr -v
以查看已存在的内容。如果有很多重复条目,您可以尝试使用 删除其中一个或多个sudo efibootmgr -b #### -B
,其中####
是要删除的条目的编号。即使删除条目后,您可能仍需要重启一两次才能使更改生效。
我知道我告诉你可能需要重新启动才能解决问题,而这种尝试可能会导致启动失败。你可能需要准备好可启动的 USB 闪存驱动器或类似工具。(许多服务器允许你通过其 BMC 远程安装虚拟 USB 驱动器或 CD 映像。看看这个。你可以使用我的 USB 闪存驱动器或 CD-R 版本rEFInd 启动管理器)或者,您可以将已知可以正常工作的引导加载程序及其配置和支持文件复制到EFI/BOOT/bootx64.efi
ESP 上(即/boot/efi/EFI/BOOT/bootx64.efi
从 Ubuntu 复制,假设 ESP 安装在 上/boot/efi
)。我无法保证这两种方法都有效;您可能需要在现场解决问题。由于您说受影响的机器是生产服务器,因此您应该对此非常谨慎。也许最好的做法是准备一个备份服务器来接管一段时间,然后安排一些停机时间来解决问题。至少,要随时准备好多种备份启动方法,以便在系统意外崩溃时有机会恢复。