通過誤操作帶來的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

splashp_w_picpath=(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硬碟,實在是浪費啊.希望大家提點一下.