通過誤操作帶來的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
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硬碟,實在是浪費啊.希望大家提點一下.