永久固定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/grub
在sdg2
。
然后我运行了推荐的修复诊断,产生了这个输出 。 这里再次报告了正确的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中,可能无法修改内部磁盘的引导顺序; 在这种情况下,磁盘必须重新连接到电路板。