因此,我在使用 Grub Customizer 时犯了一个错误,然后在尝试按照中的说明恢复以前的配置时又犯了一个错误/etc/grub.d/backup/RESTORE_INSTRUCTIONS
,这导致我的 grub 配置文件损坏。
现在当我尝试运行时sudo update-grup
我得到了
Sourcing file `/etc/default/grub'
Sourcing file `/etc/default/grub.d/init-select.cfg'
Generating grub configuration file ...
Script `/boot/grub/grub.cfg.new' contains no commands and will do nothing
Syntax errors are detected in generated GRUB config file.
Ensure that there are no errors in /etc/default/grub
and /etc/grub.d/* files or please file a bug report with
/boot/grub/grub.cfg.new file attached.
结果grub.cfg.new
是空的(它仅包含关于它正在生成的初始注释)。
我尝试重新安装 grub这个答案经过
sudo apt-get purge grub-pc grub-common
但它不再起作用。首先,它apt
抱怨未满足的依赖项,当我将其添加grub2-common grub-pc-bin
到要删除的列表中时,它告诉我需要安装这些
... grub-common:i386 grub-efi-amd64 grub2-common:i386 ...
犹豫了一会儿之后,我接受了,并安装这些软件包,打算稍后再替换它们,但我在安装过程中再次遇到了这个问题
Script `/boot/grub/grub.cfg.new' contains no commands and will do nothing
...
dpkg: error processing package grub-pc (--configure):
installed grub-pc package post-installation script subprocess returned error exit status 1
因此,显然update-group
现在是安装后脚本的一部分,如果失败,则软件包安装失败。因此,现在我处于依赖关系在两个方面都被破坏的状态,并且两个 grub 版本都没有正确安装,无法修复。
清除期间,grub 的配置文件(/etc/default/grub
和)从未被删除和覆盖。如果我手动删除它们,它们将永远不会再次安装。/etc/grub.d/*
我现在能做些什么来保存我的操作系统安装?
答案1
apt purge
对于这种情况,几乎总是错误的解决方案。这种方法很可能会删除关键内容,如果你删除了足够多的内容,你就会陷入需要重新安装才能解决的困境。删除软件包唯一有帮助的情况是,如果它们替换了你试图重新安装的其他软件包。
相反,我建议使用dpkg -V
查找损坏的文件和权限,并使用apt install --reinstall
重新安装已损坏的软件包。这将替换核心损坏的文件,但可能会使配置文件损坏。但这是一个开始。
当您发现损坏的配置文件时,您可以尝试修复它们或重命名它们,并使用dpkg --reconfigure
相关包尝试重建配置文件。 dpkg --configure
如果配置完全混乱或被删除,这可能会有所帮助。
另一种可能性是额外的config 目录中损坏了配置的文件。同样,apt purge 不会删除这些文件,也不会修复任何问题。查找这些额外的文件需要通过排除法来完成,但并非不可能。
答案2
问题出在权限上,不是文件丢失/损坏或语法错误,而是权限错误。Grub Customizer 在 中创建的备份文件/etc/grub.d/backup/etc_grub_d
没有执行标志。这就是生成空 grub.cfg 的原因。我看不到它,因为 的错误消息update-grub
具有误导性。
RESTORE_INSTRUCTIONS
因此,仅仅照搬/etc/grub.d/backup/
并复制/etc/grub.d/backup/etc_grub_d
是不够的/etc/grub.d
。你还必须
sudo chmod +x 0* 1* 2* 3* 4*
但我也认为应该将此问题报告给软件包维护人员。成功安装软件包需要运行依赖于易破坏用户配置的脚本,这是不可以的。尝试临时卸载并重新安装该软件包会导致安装 i386 子系统,这也是不可以的。
吐槽完毕,感谢所有帮助过的人。