注册 | 登录 忘记密码? 51cto首页 | 博客 | 论坛 | 招聘
热点文章 LCS2005客户端配置详解:L..
 帮助

通过误操作带来的grub菜单丢失


2007-10-26 14:22:10
 标签:grub 启动故障   [推送到技术圈]

版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://yahoon.blog.51cto.com/13184/47848
通过误操作带来的grub菜单丢失
 
由于本地的一台测试服务器分区十分不合理,我准备做适当的调整,可是又不能损坏当前正在运行的linux环境.有点费劲.
机器只有一个硬盘,大小80g,linux下面显示为/dev/had,当前的分区情况如下
分区类型
主分区FAT32
扩展分区FAT32
主分区ext3
主分区swap
未分配
大小,格式
10G,winXP系统盘
20G
8G,linux的根分区
2G,linuxswap分区
40G
linux下面显示的名称
/dev/hda1
/dev/hda2
/dev/hda3
/dev/hda4
 
将整个扩展分区都划给了逻辑驱动器:windows下的D,linux下显示为/dev/hda5
由于分区已经划满了(3+1扩展),导致40G的空间不能使用.
所以我就想把20G的干掉,40G的来做D.毕竟损失20G要划算点.
 
我在windows下删除了扩展分区,然后将最后的40G划为主分区,然后格式化,盘符为windows下的D.所以当前的情况是4个主分区.具体信息如下
分区类型
主分区FAT32
未分配空间
主分区ext3
主分区swap
主分区FAT32
大小,格式
10G,winXP系统盘
20G
8G,linux的根分区
2G,linuxswap分区
4G,winD
正常情况linux下面显示的名称
/dev/hda1
 
/dev/hda2
/dev/hda3
/dev/hda4
:这里说正常情况下是因为现在我们还未进linux,所以这只是我推测的应该的情况.
 
分区格式化都进行完毕了,重启机器,发现grub列表没有了,机器直接进grub>提示符.我知道自己在windows下忘记grub这个东东了
先看能不能进windows
grub>下执行
chainloader  (hd0,0)+1
boot
启动windows完全正常
:grub下与linux的磁盘表达方式稍微有不同,hd0即为linux下的hda,后面接的0,实际上是第一个分区,(hd0,0)相当于linux下的hda1
 
翻阅了相关资料,知道需要重建MBR才能找回grub的启动菜单,所以重启机器进入grub后执行
root  (hd0,1)
setup  (hd0)
:这个就是重建mbr的过程,(hd0,1)即为hda2,也就是linux所在的分区,grub配置文件grub.conf所在的分区.
 
好了以后会提示success,这个时候重启机器,发现花屏,grub菜单有,但是启动linux提示路径错误.这是因为grub.conf中的路径还未修改,我们需要登陆到linux系统以后才能修改.既然能够启动windows,当然也是可以启动linux.如何启动呢?查看grub.conf的内容就可以了.grub>提示符下面cat是可以用的.所以执行
cat  (hd0,1)/boot/grub/grub.conf
因为(hd0,1)就是linux的根分区,所以上面的命令实际上就是cat  /boot/grub/grub.conf
文件的内容如下
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You do not have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /, eg.
#          root (hd0,2)
#          kernel /boot/vmlinuz-version ro root=/dev/hda3
#          initrd /boot/initrd-version.img
#boot=/dev/hda
default=1
timeout=10
splashimage=(hd0,2)/boot/grub/splash.xpm.gz
title Red Hat Linux (2.4.20-8smp)
        root (hd0,2)
        kernel /boot/vmlinuz-2.4.20-8smp ro root=LABEL=/
        initrd /boot/initrd-2.4.20-8smp.img
title winXP
        rootnoverify (hd0,0)
        chainloader +1
 
很显然 (hd0,2)这个路径是不对的,应该是(hd0,1).我们按照上面的内容在grub>下执行
root  (hd0,1)
kernel  (hd0,1)/boot/vmlinuz-2.4.20-8smp  ro  root=/LABEL=/
initrd  (hd0,1)/boot/initrd-2.4.20-8smp.img
然后执行boot 就可以正常启动linux
 
我们既然已经知道是grub.conf路径设置的错误导致的问题,所以我们现在直接在linux里面将它改过来就应该OK.分两步:
1.首先在启动linux的时候,提示swap分区所在的/hda4未找到,我们知道现在的swap应该是/hda3,所以进linux之后,我们先编辑/etc/fstab文件,swap的分区改为/dev/hda3
2.然后我们来修改grub.conf
vi /boot/grub/grub.conf
将里面的(hd0,2)都改为(hd0,1)
别忘记了要重新的修改一次MBR才行.linux命令行下输入grub,等几秒钟就进去了grub>提示符,同样的执行
root  (hd0,1)
setup   (hd0)
退出以后,重启机器,一切正常!
另外,请教一下,我如何才能使用那未分配的20G硬盘,实在是浪费啊.希望大家提点一下.

本文出自 “yahoon的小屋” 博客,请务必保留此出处http://yahoon.blog.51cto.com/13184/47848





    文章评论
 
2007-10-26 14:33:26
fdisk -l
查看硬盘情况。如果20G能看得到。
直接挂载。
如果在WIN下加个参数o iocharset=gb2312
讨论下。

2007-10-26 16:27:45
是看不到的.因为根本没这个分区,这个20g的分区已经被删掉了.而且分不了,已经是4个主分区了

2007-10-26 16:36:55
分成逻辑分区。WIN下就可以操作。

2007-10-26 17:10:02
逻辑分区要在扩展分区里面分,现在扩展分区都分不出来,何谈逻辑分区

2007-11-03 16:59:18
小弟前几天就由于误操作把磁盘分区表搞坏了,忙活了一晚上也还是弄丢了一些数据,呜呜~~

 

发表评论

昵   称:
验证码:  点击图片可刷新验证码  博客过2级,无需填写验证码
内   容: