永久固定GRUB文件夹的绝对位置

当16.04安装程序错误配置GRUB文件夹的位置时,我最近遇到了一个相对常见的问题。 在这种情况下,系统会使用以下消息引导到救援shell:

error: file '/grub/i386-pc/normal.mod' not found. Entering rescue mode... grub rescue> 

这意味着GRUB能够启动,但它正在寻找错误位置的模块。 众所周知的解决方案是在其模块的位置上即时指示GRUB。 在我的情况下,这是:

 grub rescue> set prefix=(hd1,msdos2)/boot/grub grub rescue> insmod normal grub rescue> normal 

这将成功恢复引导过程。 但是,下次系统启动时,GRUB会再次返回救援控制台,并且必须再次指示其模块的位置。 我重新安装了GRUB,但它没有解决问题。

如何永久性地指示GRUB模块的正确位置?

更新 :我按照WinEunuuchs2Unix的建议 ,尝试了Boot-Repair工具。 我首先validation了GRUB的位置,它显然是正确的: /boot/grubsdg2

然后我运行了推荐的修复诊断,产生了这个输出 。 这里再次报告了正确的GRUB位置:

 sdg2: __________________________________________________________________________ File system: ext4 Boot sector type: - Boot sector info: Operating System: Ubuntu 16.04.3 LTS Boot files: /boot/grub/grub.cfg /etc/fstab /boot/grub/i386-pc/core.img 

但是,报告的最后部分出现错误,指出device.map存在问题:

 grub-probe: error: cannot find a GRUB drive for /dev/sdi1. Check your device.map. Unhide GRUB boot menu in sdg2/boot/grub/grub.cfg An error occurred during the repair. 

关于可以做些什么的任何建议?

理解错误的关键是需要指导GRUB走向hd1 。 BIOS默认启动到hd0 ,并且在此工作站中有一些MBR的残余,试图在安装到该磁盘后加载GRUB(因此引用/grub而不是/boot/grub )。

解决方案是更改BIOS中内部磁盘的引导顺序。 首先使用hd1 ,启动过程在没有人为干预的情况下成功结束。 在某些BIOS中,可能无法修改内部磁盘的引导顺序; 在这种情况下,磁盘必须重新连接到电路板。