linux中grub文件丟失或者錯誤解決方法

首先我們來看下以下別人博客的解決方案:

第一種情況:

是由於grub中的grub.conf文件損壞,開機後直接進入到了grub>命令行模式下。下面將圖解此過程

wKiom1MXKoyjpCjVAADEN5fwqXw987.jpg

這時可以使用help看一下grub可支持命令有那些,以便供修復時使用。

wKiom1MXKsbjB6baAAJ1Xc42J9M621.jpg

第二個使用的命令是find (hd0,0)/按tab如果能補全就表示系統在此分區上。

wKiom1MXK36DvDoGAAIbiHuUi88649.jpg

各個參數說明:

wKioL1MXK-eThXRFAAKnDDyJR_Y288.jpg

這時要注意,當你指定內核後,但未指定內核後面的參數(ro root=(此處未指定的話))將無法正常啓動,報:請給root參數,一般情況下是系統是可以自動探測到,但這個功能並不靠譜,那麼只能靠備份或你的記憶將參數補上(所以定期備份/etc/fstab、與grub.conf、是多麼重要的事情,原因你懂的。)註釋:root=/dev/sd?  指向的是根目錄的掛載分區,這個也我實驗中不成功的地方,一定要在系統中備份自己的fstab文件!!

注意:其中initrd 下有兩個文件 initramfs -xx.img和initrd-2.XXkdump.img(這個是系統崩潰的是儲存機制,不要選取。不是系統文件。本人在這個地方失敗多次!!)

如下圖:

wKioL1MXLBeizgyoAAKVMterepY227.jpg

而這時就看到你平時的習慣了,備份相當重要

wKioL1MXLJXwsz4nAAEpT8AtNxQ079.jpg

當正常登錄系統後,將grub.conf文件重新寫就可以了。(上圖的完整路徑是root=/dev/mapper/vg_www-lv_root,寫全了就看不到了,所以在此特別說明)(原作者做了lvm盤。所以他的位置是vg_www_lv_root)

wKiom1MXLYCyjSxIAADAJHyLQUs934.jpg

看到title了吧

wKioL1MXLfOwX7fNAAB9R82I784906.jpg

過了下面這張圖就說明系統是可以正常啓動了

wKioL1MXLlWAuDu3AAFHH-wWsQo362.jpg

第一種情況順利解決!a_c

第二種情況:

grub損壞(最明顯的提示爲:Operating System not found)

如mbr數據損壞(注僅是bootloader損壞,分區表是好的),如果沒有重新啓動還可能修復,但是如果是重啓後發現grub損壞,那麼只能掛載光盤進入緊急救援模式。(以下將以掛載光盤說明)

wKiom1MXNcTCmwTFAADsm7LBJOU882.jpg

dd執行之後的景象,是不是好驚悚a_c

wKioL1MXLm3Q_71jAADt30SMzuA822.jpg

掛載光盤進入緊急救援模式,在BIOS中將光盤設置爲第一引導設備。

wKiom1MXLsyjvrM6AADCUR4Jh1U127.jpg

在菜單中選擇"Rescue installed system"

wKioL1MXLtDBLcnFAAC8ueZ0qjg965.jpg

之後將對:語言----》鍵盤設置

wKioL1MXLzXg49moAADFHAkco-o077.jpg

是否啓用網絡(不需要,則No,如果選擇了Yes將要求選擇獲取IP地址的方式)

wKiom1MXL3Ci_1ITAACM0ZGAkIA079.jpg

正式進入救援模式

wKioL1MXMBXh_cz1AAJG4RTs3mM693.jpg

原系統己經掛載的位置,如何切換到原系統下

wKiom1MXMKyyyaEBAAEpg-DTDcs633.jpg

開啓一個shell

wKioL1MXMN2RUKWbAACJ4NoiYuc323.jpg

切換到原系統

wKioL1MXMP3iVQdAAADB18Dyz5U401.jpg

這時可以直接輸入grub命令進入grub中(這個grub是光盤中的)

wKiom1MXMWnxkwqgAAD40fddNuc703.jpg

直接使用 help  setup會顯示setup的使用方法。

設置root(root默認分區)如(hd0,0),此分區一定要root所在的系統分區,之後使用setup安裝,命令是setup(hd0)(由於mbr並屬於分區,所以將grub安裝到hd0設備即可),如果是成功了會有succeeded提示。quit退出即可

wKiom1MXM1TTuJYDAAHdrvIlI_c478.jpg

重啓系統,取出光盤,有如下信息就表示修復完成

wKioL1MXM3jTAMqdAADzkCznYyw370.jpg

如果grub目錄都損壞,無法正常啓動。或者你進入系統了 從別的服務上拷貝了grub.conf 。重啓系統是不行的。一定要修改kernel /vmlinuz-XXX.XXX ro root=uuid=中的uuid值 每個值都是不一樣的。(用blkid)

一篇的文章也可以借鑑下:

首先來看一下/boot/grub/menu.lst中的內容:

==========================================================

# 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,0)

#          kernel /boot/vmlinuz-version ro root=/dev/hda1

#          initrd /boot/initrd-version.img

#boot=/dev/hda

default=0

timeout=5

splashp_w_picpath=(hd0,0)/boot/grub/splash.xpm.gz

hiddenmenu

title Fedora Core (2.6.18-1.2798.fc6)

        root (hd0,0)

        kernel /boot/vmlinuz-2.6.18-1.2798.fc6 ro root=LABEL=/ rhgb quiet

selinux=0

        initrd /boot/initrd-2.6.18-1.2798.fc6.img

title Windows XP

rootnoverify (hd0,3)

chainloader +1

===========================================================

其中:

1,default=0

表示默認啓動的第0號的操作系統,在GRUB中,title定義了啓動的操作系統,從第1個開

始,GRUB中是0,而第2個是1,依次類推...

2,timeout=5

表示的是出現GRUB界面後,無操作情況下進入default設定的操作系統的時間,如果上下

移動選擇,則該選項無效

3,splashp_w_picpath=(hd0,6)/boot/grub/splah.xpm.gz

表示的是允許出現的GRUB背景的path,顯然(hd0,6)指定了分區(不知能否這麼解釋,呵

呵),而後邊的則是正常的path(在例子中,用#把它註釋,爲一可選項)

4,hiddenmenu

表示隱藏GRUB的啓動菜單,直接進入由default廟宇的操作系統中去,爲一可選項.

linux類

其格式一般爲:

title (......)

root (hd[0-n],x)

kernel (......)

initrd (......)

其中:

title行,是定義一個啓動操作系統,而後邊可以自己隨便寫上喜歡的名字,呵,當然最起

碼你得寫得要自己能認出來,沒必要把linux寫成windows吧?!

root行,指定相應的linux所有的/boot,如果在寫分區和掛載時沒有單獨掛載,那麼就和

/在同一個分區中,hd[0-n]表示的是第幾個硬盤,而x則表示的是[第幾個分區-1],即x比

分區號小1,特別要注意.

kernel行,在這裏以kernel 起始,指定Linux的內核的文件所處的絕對路徑(通過在終

端輸入命令:ls /boot/vmlinuz*來看內核的全名);因爲內核是處在/boot目錄中的,

而如果/boot是獨立的一個分區,則需要把boot省略,因爲 /boot所在的分區在root

(hd[0-n],x)中指定了,所以就無需要再指明內核處在哪個分區了;ro 表示只讀;

root=LABEL=/ 來表示Linux的根所處的分區。LABEL=/ 這是硬盤分區格式化爲相應文

件系統後所加的標籤;如果您不瞭解什麼是標籤,也可以直接以/dev/hd[a-z]X 或

者/dev/sd[a-z]X來表示;就看您的Linux是根分區是在哪個分區了。比如我的是

在/dev/hda3, 那這裏就可以寫成root=/dev/hda3;

initrd行,如果是/boot獨立一個分區,initrd 一行要把/boot中省略;如果/boot不是

處於一個分區,而是和Linux的/分區處於同一分區,不應該省略;我們通過查看/boot

中的 initrd的文件名到底是什麼來寫這一行代碼,在終端輸入:ls /boot/initrd*

很容易能得到initrd文件名,然後寫入.

在瞭解了以上情況之後,我們就很容易地理解另一種寫法了:

title (......)

kernel (hd[0-n],y)(/boot)...... ro root=..(根目錄的位置)....

initrd (hd[0-n],y)(/boot)......

其實只是省略的root很實在地寫在了kernel和initrd行中去了而已

附:

其 實在GRUB啓動菜單不能工作的時候,進入GRUB命令行(可按CTRL+C鍵)後,我們同樣可

以一步一步地把系統啓動起來,其實在menu.lst中, 除title不是指令外,其餘的都是

GRUB指令,我們只要一步步地輸入它們(錯了要從新開始),中間輸入關於kernel和

initrd要利用TAB鍵補齊寫好,最後只要boot一下就行了.

用GRUB指令引導windows:

GRUB> rootnoverify (hd0,0)

GRUB> chainloader +1

GRUB> boot



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章