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

通过误操作带来的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 硬盘 , 实在是浪费啊 . 希望大家提点一下 .

你可能感兴趣的:(职场,grub,休闲,启动故障)