解决Grub Rescue: invalid arch independent ELF magic问题

来源:互联网 发布:孤岛危机1画面优化 编辑:程序博客网 时间:2024/06/07 17:53

转自:http://datamining.xmu.edu.cn/bbs/forum.php?mod=viewthread&tid=624

在这里,要感谢上面写贴的那位牛人,解决了我的问题

 

新鲜出炉的解决文档,起因是301集群slave05安装Ubuntu 12.04出现的问题,当然此问题在安装11.10的时候也出现过,只是没能记下来。这次解决完了,把这个好好整理下了。

1、问题描述:
华硕ASUS P8H67-V安装完Ubuntu 12.04后,高高兴兴地像平常一样重启,直接卡在grub rescue>了,上面一个提示是:invalid arch independent ELF magic。

2、问题分析:
查了下原因,尤其查了下该款主板的特别之处,发现其奇葩地支持UEFI BIOS,表示都木有听说过这号东东,莫非就是这号东东让这系统启不动的?网上查了下,这东东UEFI叫可扩展固件接口,是用来作为传统BIOS的替代产品的,而且目前的Grub版本都支持UEFI作为引导了,更多内容可参考维基百科页面[1]。
这里的问题说起来有可能是主板没有开启UEFI引导,原因是在BIOS设置里面我看到UEFI Shell还没有安装起来,而另外一个原因是Ubuntu的安装已经检测到UEFI的启动,因此自动将Grub配置为UEFI,因而导致Grub无法正常启动。

3、问题解决:
其实上面的思路也是慢慢摸索出来的,最开始时使用平常Grub Rescue模式下的基本操作,其中的grub rescue>是提示符,(hd?,?)表示安装的引导分区:

  1. grub rescue>ls
  2. grub rescue>ls (hd?,?)/boot/grub
  3. grub rescue>set root(hd?,?)
  4. grub rescue>set prefix=(hd?,?)/boot/grub
  5. insmod /boot/grub/normal.mod
复制代码
结果到这里就出现前面的错误:invalid arch independent ELF magic(本来下面还有一条normal命令,参考[2]),于是大概可以估计问题就是在这里了。
接下来就考虑要使用Live CD,尝试着把Grub配置为普通版本进行还原。首先查看分区信息如下:
  1. 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上面的。因此可执行操作如下(#后的内容为注释):
  1. sudo apt-get remove grub-efi-amd64   #移除grub-efi
  2. sudo apt-get install grub-pc  #安装普通grub
  3. sudo mount /dev/sda7 /mnt    #挂载引导分区
  4. sudo grub-install --root-directory=/mnt /dev/sda
复制代码
这里如果你的引导分区位于单独的分区上,还需要挂载至/mnt/boot目录上,可参见[3][4]。在执行完最后一条grub-install命令后,如果安装成功会给出没有错误的提示,这样就把Grub切换回来了,重启就可以看到熟悉的Grub菜单了。

4、后记:
在重启完后,Grub菜单可能会有乱码,可通过update-grub命令更新下Grub即可,执行命令如下:
  1. sudo update-grub
复制代码
最后想说的是,对于这个UEFI新东东还是没能去深入,有错误的地方欢迎高手指正,也还有一些没解决的问题,如UEFI引导比起传统的BIOS引导有什么优势及区别?如何安装UEFI引导支持?以及后续的问题,没有时间去整了,有兴趣的童鞋欢迎一起讨论。

5、参考:
[1] 维基百科页面-UEFI繁体中文,http://zh.wikipedia.org/wiki/可延伸韌體介面
[2] Grub Rescue模式操作, http://www.cnblogs.com/samcn/archive/2011/03/30/1999615.html
[3] Grub-EFI修复(1), http://askubuntu.com/questions/7 ... ll-on-macbook-pro-5
[4] Grub-EFI修复(2), http://askubuntu.com/questions/3 ... fter-install-on-ssd
原创粉丝点击