Debian 11 上的 update-grub 失败

Debian 11 上的 update-grub 失败

我正在尝试更新 Debian 11 VM 上的 GRUB 配置。我正在使用该update-grub命令,但这似乎不再起作用了。我也尝试过grub-mkconfig > /boot/grub/grub.cfg命令,但也失败了。

两个命令都失败并出现以下错误:

/usr/sbin/grub-mkconfig: 38: /etc/default/grub.d/grub.cfg: function: not found

grub.cfg文件位于/boot/grub/grub.cfg.

当我查看grub-mkconfig第 38 行时,它显示以下几行:

grub_mkconfig_dir="${sysconfdir}"/grub.d

sysconf 目录是/etc/.

我已经查看了手册页,这表明应该grub-mkconfig可以工作。

怎么了?

答案1

我的目录中只有一个init-select.cfg包含一些注释的虚拟文件/etc/default/grub.d/,仅此而已(Debian 11)。

grub.cfg这个目录下不应该有a 。难道是你跑grub-mkconfig -o /etc/default/grub.d/grub.cfg错了?

如果删除该文件,sudo update-grub应该可以再次工作。

答案2

解决此问题的简单方法是重新安装 grub。

将 Debian iso 文件附加到您的 VM,然后启动。一旦完成 chroot 进入损坏的系统,然后重新安装 grub。

以下是更改根目录并重新安装 grub 的方法:(替换sdaXY为您的根分区。)

mkdir -p /tmp/mychroot
mount -t ext4 /dev/sdaXY /tmp/mychroot
mount --bind /proc /tmp/mychroot/proc
mount --bind /dev /tmp/mychroot/dev
mount --bind /sys /tmp/mychroot/sys
update-grub
grub-install /dev/sdX
exit

卸载已安装的分区,然后重新启动。

答案3

您的文件/boot/grub/grub.cfg已损坏。在此文件的第 38 行中,应该有如下文本:

38  function savedefault {
40    if [ -z "${boot_once}" ]; then
41      saved_entry="${chosen}"
42      save_env saved_entry
43    fi
44  }

来自Ubuntu交流的这个答案,我理解错误

/usr/sbin/grub-mkconfig: 38: /etc/default/grub.d/grub.cfg: function: not found

正在告诉你grub-mkconfig 没有找到A文件第38行的函数/etc/default/grub.d/grub.cfg

我启动了虚拟 Debian 11x64 机器,并复制了/etc/default/grub.d/grub.cfg.您可以将现有文件与这个副本

相关内容