我正在尝试更新 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
.您可以将现有文件与这个副本。