ubuntu12.04 升级 grub error的修复

发表于2012 年 05 月 03 日 | 标签: , ,
系统: ubuntu12.04 beta (development version)
环境: 这台是测试机,多系统并存在一枚硬盘上(ubunntu12.04/10.04/debian 6/win7/Xen server等等)

几天前通过apt 把ubuntu12.04 beta2升级软件到ubuntu 12.04LTS。升级时,在apt的输出中,看到grub软件包更新有warning,写着“…not a good choice..”,有不详预感,grub的升级一定出了问题。果然,升级后,启动时,进入grub菜单选择后提示:

grub error: no such partition

于是有了这篇短文,此方法对 grub rescue 同样有效

 

出错原因

grub2在升级过程中出错,重新install一遍即可。问题是,连系统都进入不了,如何reinstall呢?

解决方法

使用u盘或cd等外部系统启动,chroot到原系统后 re-install grub。

步骤

找一张liveCD的linux系统,发行版任意,ubuntu/fedora/等等,都行。目的是用它启动机器,挂载硬盘,然后chroot回到原来的系统路径。笔者是使用SD卡中的tinycore linux启动机器。

启动后,检查分区情况,定位你升级失败的ubuntu12.04的根目录安装在哪个分区。

sudo fdisk -l

挂载、绑定所需要的系统设备到原ubuntu12.04系统的分区下

# 例如,我的ubuntu12.04的根目录是在/dev/sda6下。

sudo mkdir /mnt/sda6
sudo mount /dev/sda6 /mnt/sda6

sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys

一切就绪后,chroot到原系统下

sudo chroot /mnt/sda6 /bin/bash      # 若这里提示不能chroot,请看下面的注1

执行grub的恢复 (reinstall)

grub-install /dev/sda       # 安装到MBR
或者
grub-install /dev/sda6      # 把grub安装到分区

安装好后,请退出chroot的环境

logout 或者  exit 或者 CTRL-D

退出挂载的设备和分区

sudo umount /mnt/sda6/sys
sudo umount /mnt/sda6/proc
sudo umount /mnt/sda6/dev
sudo umount /mnt/sda6

至此,重启即可。

 

注1:这个过程中,请注意liveCD运行环境和已安装linux版本的兼容性问题,32bit的要使用32bit的liveCD,64bit的要使用64bit的liveCD,否则在chroot时会出现提示:

can't execute 'bin/bash': Exec format error

 

发表评论

*

  

icon_wink.gificon_neutral.gificon_mad.gificon_twisted.gificon_smile.gificon_eek.gificon_sad.gificon_rolleyes.gificon_razz.gificon_redface.gificon_surprised.gificon_mrgreen.gificon_lol.gificon_idea.gificon_biggrin.gificon_evil.gificon_cry.gificon_cool.gificon_arrow.gificon_confused.gificon_question.gificon_exclaim.gif