zeerd's blog     Article     Search     About     Tags     Pebble     Feed

闲来生雅趣,无事乐逍遥。对窗相望雪,一盏茶香飘。

使用live cd恢复ubuntu的grub

#Grub #Ubuntu


install grub from ubuntu live cd 11.04

先安装ubuntu,后安装win7。这样grub被win7删除,而导致ubuntu无法进入。

处理办法:

1、使用ubuntu live cd引导系统(安装win7之前特意跑去电脑城买了一张cd-r);

2、打开“终端”;

3、Ubuntu 11.04的live cd是不带grub的,因此要先 sudo apt-get install grub,进行安装;

4、由于折腾的太多了,不缺定上面的第三步是否必要……

5、使用sudo mount /dev/sda6 /mnt,将ubuntu所在的分区加挂到mnt目录(不知道sdax的,可以sudo fdisk -l来查看);

6、然后,好象是执行了 sudo chroot /mnt。然后,update-grub。如果不对,就是“sudo grub-install --boot-directory=/mnt /dev/sda”。这一步实在是迷糊了,反复尝试了好久,也记不得是哪步起作用了。总之,结果是重启之后,进入了grub的菜单“grub>”;

7、先不要重启,直接在live cd里面打开硬盘,找到boot文件夹。里面有grub什么。从里面找到grub.cfg或者类似的文件。打开,里面会有很多内容。向下找,后半部分就是之前的grub启动菜单。知道之前ubuntu的启动项,就是某个menuentry。然后找个本本,抄写linux开头和initrd开头的两行内容。注意,一定不要抄写错,否则会吐血的……

8、终于可以重启了。进入grub的菜单;

9、执行“find /boot/grub/stage1”,此时会显示“(hdx,y)”之类的内容。反正我的显示了,如果你没显示,请google……

10、然后,这个应该就是ubuntu所在的分区了;

11、分别执行:root (hdx,y)、 setup (hdx)。成功的表现是什么也不提示,或提示succ;

12、执行kernel xxxx。这里的xxx就是刚才抄到本子上的linux那一行的内容(linux除外)。打得时候记得先打(hdx,y)。比如可能你炒的是“linux /boot/vmlinuz-2.6.38-8-generic root=UUID=xxxxxxxxxxxxxxxxx”,那么就敲“kernel (hdx,y)/boot/vmlinuz-2.6.38-8-generic root=UUID=xxxxxxxxxxxxxxxxx”;

13、同上,执行initrd xxxx。这里的xxxx就是刚才抄到本子上的initrd那一行的内容。格式同上,也要加上“(hdx,y)”;

14、然后执行“boot”;

15、如果一切正常,那么恭喜你,可以进入系统了。在终端执行“update-grub”更新一下grub。下次启动就可以看到菜单了!如果还是看不到……恩,那就重复前面过程进入系统,然后尝试“sudo apt-get install grub”。

总结:整个过程最麻烦的就是kernel和initrd命令的参数。我开始不明白,重启好多次,每次都噶兹噶兹的读半天cd。

10-27 补记:
被骗了……应该安装“sudo apt-get install grub-pc”……
另外,期间遭遇了“E: 无法获得锁 /var/cache/apt/archives/lock - open (11 资源临时不可用)”问题,参考网上的方法:
sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock

===============

参考了以下文章,非常感谢:
http://www.linuxidc.com/Linux/2011-06/37556.htm
http://apps.hi.baidu.com/share/detail/24908968
http://bbs.chinaunix.net/thread-328813-1-1.html
http://hi.baidu.com/ivalicesky/blog/item/9a50ef59f2e0f0d49d820477.html