我运行 Ubuntu 20.04,当我执行update-grub
命令时出现此错误:
root@ubuntu:/# update-grub
Sourcing file `/etc/default/grub'
Sourcing file `/etc/default/grub.d/init-select.cfg'
Création du fichier de configuration GRUB…
Image Linux trouvée : /boot/vmlinuz-5.8.0-25-generic
Image mémoire initiale trouvée : /boot/initrd.img-5.8.0-25-generic
Image Linux trouvée : /boot/vmlinuz-5.4.0-53-generic
CentOS Linux 8 (Core) trouvé sur /dev/sdb9
Image Linux trouvée : /boot/vmlinuz-5.8.0-25-generic
Image mémoire initiale trouvée : /boot/initrd.img-5.8.0-25-generic
Image Linux trouvée : /boot/vmlinuz-5.4.0-53-generic
CentOS Linux 8 (Core) trouvé sur /dev/sdb9
Image Linux trouvée : /boot/vmlinuz-5.8.0-25-generic
Image mémoire initiale trouvée : /boot/initrd.img-5.8.0-25-generic
Image Linux trouvée : /boot/vmlinuz-5.4.0-53-generic
Image Linux trouvée : /boot/vmlinuz-5.8.0-25-generic
Image mémoire initiale trouvée : /boot/initrd.img-5.8.0-25-generic
Image Linux trouvée : /boot/vmlinuz-5.4.0-53-generic
CentOS Linux 8 (Core) trouvé sur /dev/sdb9
Image Linux trouvée : /boot/vmlinuz-5.8.0-25-generic
Image mémoire initiale trouvée : /boot/initrd.img-5.8.0-25-generic
Image Linux trouvée : /boot/vmlinuz-5.4.0-53-generic
Adding boot menu entry for UEFI Firmware Settings
erreur : syntax error.
erreur : Incorrect command.
erreur : syntax error.
erreur : Incorrect command.
erreur : syntax error.
Erreur de syntaxe à la ligne 159
Des erreurs de syntaxe sont détectées dans le fichier de configuration
de GRUB. Veuillez vérifier qu'il n'y a pas d'erreur dans les fichiers
/etc/default/grub et /etc/grub.d/*. Sinon veuillez signaler un bogue
en joignant le fichier /boot/grub/grub.cfg.new.
我按照建议检查了第 159 行的文件/boot/grub/grub.cfg.new
,下面是与该行及其周围环境相对应的代码片段:
152 ### END /etc/grub.d/31_linux_xen ###
153
154 ### BEGIN /etc/grub.d/34_memtest86+ ###
155 ### END /etc/grub.d/34_memtest86+ ###
156
157 ### BEGIN /etc/grub.d/35_os-prober_proxy ###
158 submenu "Options avancées pour Ubuntu"{
159 function gfxmode {
160 set gfxpayload="${1}"
161 if [ "${1}" = "keep" ]; then
162 set vt_handoff=vt.handoff=7
163 else
164 set vt_handoff=
165 fi
166 }
167 if [ "${recordfail}" != 1 ]; then
168 if [ -e ${prefix}/gfxblacklist.txt ]; then
169 if hwmatch ${prefix}/gfxblacklist.txt 3; then
170 if [ ${match} = 0 ]; then
171 set linux_gfx_mode=keep
172 else
173 set linux_gfx_mode=text
174 fi
175 else
176 set linux_gfx_mode=text
177 fi
178 else
179 set linux_gfx_mode=keep
180 fi
181 else
182 set linux_gfx_mode=text
183 fi
184 export linux_gfx_mode
我可以看到第 158 行似乎有一个问题,submenu "Options avancées pour Ubuntu"{
它永远不会关闭它的“{”,但我无法找到它来自哪里......
我已经尝试运行启动修复(正如这个答案所建议的那样)GRUB 错误:语法错误。错误:命令不正确)但要求启动的第一个命令是:
sudo chroot "/mnt/boot-sav/mapper/isw_cbgbbifgbg_Volume1p2" dpkg --configure -a
它给了我同样的语法错误问题。
答案1
该update-grub
命令执行grub-mkconfig -o /boot/grub/grub.cfg "$@"
后,又执行目录中的脚本/etc/grub.d/
。这些脚本创建 的内容grub.cfg
,以及注释行,例如
### BEGIN /etc/grub.d/35_os-prober_proxy ###
将指示哪个脚本负责grub.cfg
文件的每个部分。
对于您的情况,您可能应该研究该/etc/grub.d/35_os-prober_proxy
脚本,以及目录中紧随其后的脚本(按默认的 ASCII 字母数字排序顺序)。
另一方面,在我的 Debian 10 系统中,该function gfxmode {
行是 输出的一部分/etc/grub.d/10_linux
,它负责生成普通的 Linux 启动项,然后还有另一个脚本20_linux_xen
为 Xen 风格的虚拟化创建启动项(如果已安装),并且然后30_os-prober
检测并添加其他操作系统的启动项。显然 Ubuntu 的做法有些不同,但这让我怀疑某些部分grub.cfg
可能是在某种程度上被乱序生产的。
答案2
和
- 德比安特里克西
- grub 定制器 5.2.3
跑步:
sudo cp /boot/grub/grub.cfg.new /. # put your home path here
sudo rm /boot/grub/grub.cfg.new
grub-customizer
然后按下恢复按钮(右上方位置)并应用。