问题产生的原因:
某一天心血来潮想要把kali系统装到U盘里,这样方便与随身携带学习用。刚开始还是好好的,从U盘启动到使用都是极好的。后来换了一台笔记本,就突然产生了Grub Rescue这个问题,上面一个提示是:invalid arch independent ELF magic。
在网上查找了一下原因,发现可能是由于主板支持 UEFI BIOS(可扩展固件接口),是用来替代传统的BIOS的,很多的Grub都支持。所以存在几种可能的原因:
主板没有开启UEFI引导(BIOS设置里面UEFI Shell还没有安装)
系统的安装已经检测到UEFI的启动,因此自动将Grub配置为UEFI,因而导致Grub无法正常启动
U盘质量不过关,导致引导失败
将系统安装到U盘里时,由于选择分区安装,导致系统找不到引导。
1.问题现象
2.解决步骤
一般使用平常Grub Rescue模式下的基本操作,输入下面的命令
先使用ls命令,找到Ubuntu的安装在哪个分区:
grub rescue>ls
会罗列所有的磁盘分区信息,比方说:
(hd0),(hd0,msdos3),(hd0,msdos2),(hd0,msdos1)
然后依次调用如下命令: msdosX表示各个分区,注意 msdos 与 数字 之间没有空格!
grub rescue>ls (hd0,msdosX)/boot/grub
如果都找不到的话,需要查一下是否因为Linux版本差异,造成grub的路径不对,
例如直接ls(hd0,X)/grub等等。
假设找到(hd0,msdos3)时,显示了文件夹中的文件,则表示 Linux 安装在这个分区。调用如下命令:
grub rescue>set root=(hd0,msdos3)
grub rescue>set prefix=(hd0,msdos3)/boot/grub
grub rescue>insmod /boot/grub/normal.mod
然后调用如下命令,就可以显示出丢失的grub菜单了。
grub rescue>normal
如果出现前面的错误:invalid arch independent ELF magic。(这里引入的是用U盘装系统时的解决方法,然而并不适用我把系统装在U盘里,很纠结)
接下来就考虑要使用Live CD,尝试着把Grub配置为普通版本进行还原。首先查看分区信息如下:
sudo fdisk -lu /dev/sda
复制代码
显示分区为:
Disk /dev/sda: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders, total 1953525168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0fba0fb9
Device Boot Start End Blocks Id System
/dev/sda1 * 63 409593239 204796588+ 7 HPFS/NTFS/exFAT
/dev/sda2 409593301 1953523711 771965205+ f W95 Ext'd (LBA)
/dev/sda5 409593303 929520899 259963798+ 7 HPFS/NTFS/exFAT
/dev/sda6 929521664 960770047 15624192 82 Linux swap / Solaris
/dev/sda7 960772096 1953523711 496375808 83 Linux
注意我这里是将整个根目录/安装在/dev/sda7上面的。因此可执行操作如下(#后的内容为注释):
sudo apt-get remove grub-efi-amd64 #移除grub-efi
sudo apt-get install grub-pc #安装普通grub
sudo mount /dev/sda7 /mnt #挂载引导分区
sudo grub-install --root-directory=/mnt /dev/sda
复制代码
这里如果你的引导分区位于单独的分区上,还需要挂载至/mnt/boot目录上。在执行完最后一条grub-install命令后,如果安装成功会给出没有错误的提示,这样就把Grub切换回来了,重启就可以看到熟悉的Grub菜单了。
不过不要高兴,如果这时重启,问题依旧存在,我们需要进入Linux中,对grub进行修复。
进入Linux之后,在命令行执行:
sudo update-grub
sudo grub-install /dev/sda
(sda是你的硬盘号码,千万不要指定分区号码,例如sda1,sda5等都不对)
重启测试是否已经恢复了grub的启动菜单
3.解决结果
从网上查了半天一直没能成功解决,综合多个帖子的答案算是勉强确定了问题原因,真的是劝大家以后换个好点的U盘,在不明白linux系统的情况下不要随便对安装系统进行分区。
4.参考
[1] CSDNwoty123
[2] 百度经验
[3] Linux社区 作者:wzhnsc