我的 Debian Jessie 安装运行良好,但后来我运行了apt-get update && apt-get upgrade && apt-get dist-upgrade
.
然后重启后就直接进入BIOS了。我意识到 Grub 丢失了,所以我运行了 live cd 并输入Rescue mode
,安装了我的根分区,+引导分区并运行了以下命令:
Grub 找到 linux 映像:
root@debian:~# update-grub
Generating grub configuration file ...
Found background image: /usr/share/images/desktop-base/desktop-grub.png
Found linux image: /boot/vmlinuz-4.9.0-3-amd64
Found initrd image: /boot/initrd.img-4.9.0-3-amd64
Found linux image: /boot/vmlinuz-4.9.0-0.bpo.3-amd64
Found initrd image: /boot/initrd.img-4.9.0-0.bpo.3-amd64
Found linux image: /boot/vmlinuz-3.16.0-4-amd64
Found initrd image: /boot/initrd.img-3.16.0-4-amd64
Found Ubuntu 16.10 (16.10) on /dev/sdb2
Adding boot menu entry for EFI firmware configuration
done
进而grub-install
:
root@debian:~# grub-install /dev/sda
Installing for x86_64-efi platform.
Could not prepare Boot variable: No such file or directory
grub-install: error: efibootmgr failed to register the boot entry: Input/output error.
lsblk
:
root@debian:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 223.6G 0 disk
├─sda1 8:1 0 92.6G 0 part /
├─sda2 8:2 0 130.4G 0 part
└─sda3 8:3 0 573M 0 part /boot/efi
我做错什么了吗?我的分区空间太小了吗/boot/efi
?
root@debian:~# ls -l /boot/efi/EFI/debian/
total 120
-rwx------ 1 root root 121856 Jul 20 20:29 grubx64.efi
efibootmgr
不显示 Debian 安装:
root@debian:~# efibootmgr --verbose | grep debian
编辑 :
每次我尝试使用以下命令创建引导加载程序时,我都会收到此错误efibootmgr
:
grub-install: info: executing efibootmgr -c -d /dev/sda -p 3 -w -L grub -l \EFI\grub\grubx64.efi.
Could not prepare Boot variable: No such file or directory
grub-install: error: efibootmgr failed to register the boot entry: Input/output error.
答案1
通过安装引导变量修复了 efibootmgr 错误efibootmgr
:
# mount -t efivarfs efivarfs /sys/firmware/efi/efivars
然后efibootmgr
给我关于空间的错误:
Could not prepare Boot variable: No space left on device
通过删除转储文件修复了这个问题:
# rm /sys/firmware/efi/efivars/dump-*
然后像往常一样运行
update-grub
grub-install -v --target=x86_64-efi --recheck /dev/sda
并且运行成功!
答案2
如果您的磁盘不是 /dev/sda,请尝试指定包含加载程序的磁盘:
efibootmgr --create --disk /dev/nvme0n1 --part 1 --label Ubuntu
答案3
我在华硕主板上的 Ubuntu 上也遇到了同样的问题。我没有找到任何要删除的转储文件。或者任何可以安全删除的大东西。
我可以通过使用efi_no_storage_paranoia
内核命令行选项重新启动系统来解决该问题。我已经丢失了 Ubuntu UEFI 启动项。幸运的是,我仍然可以通过 BIOS 设置中的启动选择来启动到我的 Ubuntu 分区。之后,我使用 grub 菜单中的“e”键将该选项添加到内核命令行。然后我可以通过运行来完成之前失败的系统升级apt -f install
。
如果系统处于无法启动状态,一种选择是从 Ubuntu USB 记忆棒启动并从那里修复问题。
如果问题稍后再次出现,我会考虑将该内核选项永久添加到/etc/default/grub
.
内核对于填充 UEFI 变量空间非常偏执。它报告说即使还有剩余空间,它也已满。这是为了防止永久填满某些主板上的空间。我怀疑对于我的主板来说这可能太偏执了。也许 BIOS 不会启动垃圾收集,除非空间变得更满。
以前,我可以通过使用主板上的“Clear CMOS”标头从相同的情况中恢复。很高兴找到一个软件解决方案。