通过误操作带来的grub菜单丢失
由于本地的一台测试服务器分区十分不合理,我准备做适当的调整,可是又不能损坏当前正在运行的linux环境.有点费劲.
机器只有一个硬盘,大小80g,linux下面显示为/dev/had,当前的分区情况如下
分区类型
|
主分区
FAT32
|
扩展分区
FAT32
|
主分区
ext3
|
主分区
swap
|
未分配
|
大小,
格式
|
10G,winXP
系统盘
|
20G
|
8G,linux
的根分区
|
2G,linux
的
swap
分区
|
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,linux
的
swap
分区
|
4G,
作
win
的
D
盘
|
正常情况
下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 51CTO博客,原文链接:http://blog.51cto.com/yahoon/47848,如需转载请自行联系原作者