Debian GRUB救援 - "无效的拱门独立ELF魔法"

Par*_*yes 2 debian grub

我最近用Debian Wheezy双启动了一台Windows PC.安装顺利没有错误,但当我启动Debian时,我立即受到GRUB救援的欢迎:

Welcome to GRUB!

error: unknown filesystem.
Entering rescue mode...
Run Code Online (Sandbox Code Playgroud)

在使用该set命令进一步检查之后,我注意到它正在引导到错误的分区:

grub rescue> set
prefix=(hd0,gpt4)/boot/grub
root=hd0,gpt4
Run Code Online (Sandbox Code Playgroud)

这里指的(hd0,gpt4)是安装Debian的位置是什么时候(hd0,gpt5).所以,我做了一个快速修复,set用于将变量更改回应该是什么:

grub rescue> set prefix=(hd0,gpt5)/boot/grub
grub rescue> set root=gd0,gpt5
Run Code Online (Sandbox Code Playgroud)

在这样做之后,我只做了我记得应该做的事情来启动操作系统并运行:

grub rescue> insmod normal
Run Code Online (Sandbox Code Playgroud)

当我收到错误时,这就是事情开始出错的地方:

error: invalid arch independent ELF magic.
Run Code Online (Sandbox Code Playgroud)

然后我对这个问题做了一些研究,似乎常见的解决方案是从Live CD重新安装GRUB.所以,我启动了Debian的现场CD并执行以下操作:

sudo mount /dev/sda5 /mnt
sudo grub-install --root-directory=/mnt /dev/sda
Run Code Online (Sandbox Code Playgroud)

我收到错误的地方:

The file /mnt/boot/grub/stage1 not read correctly.
Run Code Online (Sandbox Code Playgroud)

虽然我可以保证这个文件确实存在并且可以编辑,因为我可以编辑它

sudo nano /mnt/boot/grub/stage1
Run Code Online (Sandbox Code Playgroud)

那可能是什么问题呢?

Par*_*yes 5

事实证明答案很简单,我需要安装grub-efi包:

sudo apt-get install grub-efi
Run Code Online (Sandbox Code Playgroud)


Tim*_*all 5

在安装 grub-efi 修复系统上的问题时(因为它支持传统 BIOS 引导过程以及 EFI 引导),如果您想修复原始的 grub 安装,答案可能是:

apt-get install --reinstall grub-pc-bin grub-pc

其次是:

grub-install /dev/sdX

其中/dev/sdX应替换为您的引导驱动器(或多个驱动器)。

...这将替换引导驱动器上看起来损坏的 grub 二进制文件版本(这就是“无效的架构独立 ELF 魔法”的含义)。