請教關於 Grub 重建 MBR 之疑問~~

如果您覺得您的問題不屬於 debian desktop 或是 debian server 版的範圍內,請在這裡發問。

版主: mufa

請教關於 Grub 重建 MBR 之疑問~~

文章Lost-Angel » 週三 9月 06, 2006 1:51 pm

請教一下各位前輩們,小生的系統是 Debian Linux testing 以及 Windows XP 並存,使用 GRUB 為啟動管理程式,硬碟為 IDE 介面的,因為日前 Windows 系統重新安裝過導致 MBR 被覆蓋掉,小生採取了以下方式嘗試重建之但卻出了問題,想請教各位前輩:

一、使用 Knoppix BV1AL 光碟啟動系統並掛載了相關硬碟分割區後(包刮 proc 系統),執行 chroot 切換至新的 / 目錄位置並執行 grub 指令。

二、出現了以下訊息並成功進到 grub 的命令模式:
代碼: 選擇全部
probing devices to guess BIOS drivers. This may take a long time.
end_request: I/O error, dev 02:00 (floppy), sector 0
end_request: I/O error, dev 02:00 (floppy), sector 1
end_request: I/O error, dev 02:00 (floppy), sector 2
....... (一堆諸如此類之訊息)

三、在 grub 命令模式中依序執行 root (hd0,0) 以及 setup (hd0) 指令,執行了 setup 指令之後出現如下訊息:
代碼: 選擇全部
Checking if "/boot/grub/stage1" exists ... no
Checking if "/grub/stage1" exists ... yes
Checking if "/grub/stage2" exists ... yes
Running "/grub/e2fs_stage1_5 (hd0)" .... 16 sectors are embedded.
succeeded
Running "install /grub/stage1 (hd0) (hd0)1+16 p (hd0,0)/grub/stage2 /grub/menu.lst"...succeeded.
Done


四、重新啟動系統後在原本應該出現 grub 開機啟動選單之處卻出現了幾行亂碼就停住了,完全無法啟動任何系統。

以下是小生的硬碟分割配置,煩請前輩們指點一下不才的小生這該如何解決才是,非常的感謝!!!

hda1 是 /boot 的磁區,檔案系統格式為 ext3
hda2 是 /mnt/Winpart 的磁區,檔案系統格式為 FAT 32 (Windows 的分割區)
hda6 是 / 的磁區,檔案系統格式為 ext3
hda7 是 /home 的磁區,檔案系統格式為 ext3
hda8 是 /usr 的磁區,檔案系統格式為 ext3

【註】:若不執行 grub 進入命列模式而直接在 shell 執行 grub-install /dev/hda 的話,則會出現以下錯誤訊息:
Could not find device for /boot: Not found or not a block device
最後由 Lost-Angel 於 週六 2月 17, 2007 5:15 pm 編輯,總共編輯了 5 次。
The most beautiful thing we can experience is mysterious.
It is the source of all true art and science.

--- Albert Einstein, 1930
頭像
Lost-Angel
活潑的高中生
活潑的高中生
 
文章: 265
註冊時間: 週二 1月 25, 2005 1:29 am
來自: 臺灣民國高雄縣

文章訪客 » 週四 9月 07, 2006 11:42 am

你執行 grub 的指令怎麼下?改用以下看看
grub --no-floppy <Enter>

「Checking if "/boot/grub/stage1" exists ... no 」應該是找不到那個檔.
你干脆把 /lib/grub/i386-pc/ 之下的東西全 cp 到 /boot/grub/ 之下

你可以在執行 grub 前先找到 Debian 的 /boot 在哪個 partition,
例如說是在 /mnt/hda5
那可以做個記號
echo "here" > /mnt/hda5/grub-here
而在進入 grub 提示符號時執行
find /grub-here
看是出現在 hd?? 多少

root (hd0,0) 是說你的 Debian 的 /boot/grub/ 是裝在 hda1
你的硬碟真的是這樣嗎?

setup (hd0) 是說要把 grub 裝在 hda

當然你要 edit boot/grub/menu.lst 把 XP 的開機位置寫進去
訪客
 

文章Lost-Angel » 週四 9月 07, 2006 1:32 pm

在此非常的感謝前輩指點,小生的 Debian 系統之 /boot 是另外一個獨立的硬碟分割區位於第一個硬碟的第一個磁區,所以執行 root (hd0,0) 應該是沒有錯吧???
而且我確實是想要把 grub 的開機啟動程式(他的 stage1)寫進第一個硬碟的 MBR 裡面,所以我想執行 setup (hd0) 指令應該也是正確的吧???
而 /boot/grub/menu.lst 的內容我都沒有去更動他,因為他原本就已經含有正確的 Debian Linux 與 Windows XP 的啟動設定敘述,只是 MBR 被 Windows 蓋掉需要再行重新寫入而已。
至於您說的方法我會試試看!!!
The most beautiful thing we can experience is mysterious.
It is the source of all true art and science.

--- Albert Einstein, 1930
頭像
Lost-Angel
活潑的高中生
活潑的高中生
 
文章: 265
註冊時間: 週二 1月 25, 2005 1:29 am
來自: 臺灣民國高雄縣

文章Lost-Angel » 週五 9月 08, 2006 1:54 am

感謝前輩指點,小生方才實際執行了您所說的測試步驟:
先下 echo "here" > /mnt/hda6/boot/grub-here
在執行 grub 進入命列指令模式後,執行 find /grub-here 敘述則出現了 (hd0,0) 的訊息。
這應該是表示小生先前執行的兩道指令 root (hd0,0) 以及 setup (hd0) 是正確的是吧??? 那請教一下各位前被這到底是哪裡出問題了呢??? 有沒有什麼方法可以解決呢??? 煩請各位前輩指點一下不才的小生喔,非常的感謝各位!!!


P.S. 小生的 /boot/grub 中已包含有 /lib/grub/i386-pc 內之所有檔案。
The most beautiful thing we can experience is mysterious.
It is the source of all true art and science.

--- Albert Einstein, 1930
頭像
Lost-Angel
活潑的高中生
活潑的高中生
 
文章: 265
註冊時間: 週二 1月 25, 2005 1:29 am
來自: 臺灣民國高雄縣

文章訪客 » 週五 9月 08, 2006 10:24 am

你有沒有打錯?
「echo "here" > /mnt/hda6/boot/grub-here」?
這個 echo 去產生一個檔的目的只是在標定 /boot 是在哪個 partition.
所以要放在該 partition 的最上層, 不要放到 boot 之下, 所以應該是
「echo "here" > /mnt/hda6/grub-here」

可是如果你的系統 boot 是在 hda6 那 find 到的不就應該是 hd0,5 嗎?

或者你都不要做這些動作, 而是用 KNOPPIX 去 chroot /mnt/hdXX
之後只執行 grub-install 即可(如果你的 Debian partition 沒有任何變動的話)
訪客
 

文章訪客 » 週五 9月 08, 2006 10:37 am

mount /dev/hda1 /boot
grub-install /dev/hda
訪客
 

文章Lost-Angel » 週五 9月 08, 2006 12:20 pm

感謝前輩們的指點,或許小生問題描述未清晰,小生的方法是:

一、以 Knoppix BV1AL 啟動系統並在 /mnt 中建立一個新的目錄名為 hda6

二、小生的第一篇問題中有寫了關於系統的硬碟分割配置,因此在此不贅述,小生只是依序執行以下指令:
代碼: 選擇全部
mount /dev/hda6 /mnt/hda6
mount /dev/hda7 /mnt/hda6/home
mount /dev/hda8 /mnt/hda6/usr
mount /dev/hda1 /mnt/hda6/boot
mount -t proc none /mnt/hda6/proc


三、以上各個磁區掛載都一切順利無誤,因此小生執行 chroot /mnt/hda6 切換到新的根目錄。

小生先前執行 echo "here" > /mnt/hda6/boot/grub-here 指令時,是在還未執行 chroot 指令之前所做的動作,因此到這裡應該是沒有錯誤是吧??? find 指令執行出來的結果也應該是 (hd0,0) 是吧??? 那問題到底是出自哪裡呢?? 煩請各位前輩指點一下不才的小生好嗎?? 非常的感謝!!!

【註】:小生的硬碟 partition 並無任何變動。小生在執行完上述的掛載動作與 chroot 之後,也嘗試著執行 grub-install /dev/hda 但是會出現如下訊息:
Could not find device for /boot: Not found or not a block device
最後由 Lost-Angel 於 週六 2月 17, 2007 5:15 pm 編輯,總共編輯了 1 次。
The most beautiful thing we can experience is mysterious.
It is the source of all true art and science.

--- Albert Einstein, 1930
頭像
Lost-Angel
活潑的高中生
活潑的高中生
 
文章: 265
註冊時間: 週二 1月 25, 2005 1:29 am
來自: 臺灣民國高雄縣

文章訪客 » 週五 9月 08, 2006 5:50 pm

你由 KNOPPIX chroot 進 Debian 後, 還要把 /boot 真正該對應的 partition mount 到 /boot
這樣 Debian 系統才能找得到啊!

也可以在 chroot 前先 mount, 例如在 KNOPPIX 下先
mount /dev/hdaX /mnt/hda6/boot
再 chroot /mnt/hda6
進去之後 /boot 才會有東西啊!
訪客
 

文章訪客 » 週五 9月 08, 2006 5:51 pm

補充一下, 在 KNOPPIX 環境要
mount /dev/hda6 /mnt/hda6 再
chroot /mnt/hda6 /bin/bash
訪客
 

文章Lost-Angel » 週五 9月 08, 2006 8:25 pm

非常感謝前輩指點,但是小生確實是依照您說的去 mount 沒有錯,以下是小生以 Knoppix 啟動後依序執行的指令:

代碼: 選擇全部
1.mount /dev/hda6 /mnt/hda6
2.mount /dev/hda7 /mnt/hda6/home
3.mount /dev/hda8 /mnt/hda6/usr
4.mount /dev/hda1 /mnt/hda6/boot
5.mount -t proc none /mnt/hda6/proc
6.chroot /mnt/hda6


小生實在是看不出來哪裡有錯誤耶,可否煩請前輩指點一下不才的小生呢,非常的感謝!!!
最後由 Lost-Angel 於 週六 2月 17, 2007 5:16 pm 編輯,總共編輯了 1 次。
The most beautiful thing we can experience is mysterious.
It is the source of all true art and science.

--- Albert Einstein, 1930
頭像
Lost-Angel
活潑的高中生
活潑的高中生
 
文章: 265
註冊時間: 週二 1月 25, 2005 1:29 am
來自: 臺灣民國高雄縣

文章goat » 週日 9月 10, 2006 1:05 am

1.mount /dev/hda6 /mnt/hda6
2.chroot /mnt/hda6
3.mount /dev/hda7 /home
4.mount /dev/hda8 /usr
5. mount /dev/hda1 /boot
goat
可愛的小學生
可愛的小學生
 
文章: 3
註冊時間: 週日 5月 09, 2004 11:57 am

文章訪客 » 週日 9月 10, 2006 6:49 pm

這是一個開機管理程式被清除後重建的例子
過去我們用LILO遇到這種情形的話
都是拿開機片或開機光碟在開機的boot:之後輸入(假設Linux分割區是在hda3)
rescue root=/dev/hda3
這樣就能順利進入Linux
進入Linux後,下指令重裝lilo就好了

近日我也遇過幾次LILO被覆蓋的情形
之前用2.6.8左右核心的時候,還能用Live CD透過chroot去裝好lilo
但是自從使用2.6.15之後,這招就不管用了

我想可以的話,還是得要找有rescue功能的光碟來處理比較方便
不過這種光碟很難找了
Debian installer自從不知幾年前開始就一直沒有
(woody的安裝光碟可能還有,只是不知道能不能用,因為那是2.4核心的)
聽說ubuntu的alternative安裝光碟還有,不過很大,大概680MB左右

如果有前輩知道哪裡有rescue功能的光碟
麻煩介紹一下,謝謝大家~
訪客
 

文章Lost-Angel » 週一 9月 11, 2006 12:08 am

在此非常感謝諸位前輩們的熱心指點,小生的問題終於解決了,在此整理出解決方法供各位參考:

首先,小生的硬碟分割配置表如下:
/dev/hda1 是一個 ext3 分割區分配給 /boot 掛載使用
/dev/hda2 是一個 FAT 32 分割區分配給 Windows XP 使用
/dev/hda6 是一個 ext3 分割區分配給 / 掛載使用
/dev/hda7 是一個 ext3 分割區分配給 /home 掛載使用
/dev/hda8 是一個 ext3 分割區分配給 /usr 掛載使用
小生原本的電腦是裝有兩個作業系統,一個是 Debian Linux (testing) 另外一個是 Windows XP Professional,使用 Grub 作為多重開機管理程式。

*********************************************************
●小生原本嘗試使用的方法是如下:

第一步:
以 Knoppix BV1AL 光碟啟動系統,進入 Knoppix 的 shell 模式。

第二步:
在 Knoppix 的 /mnt 目錄底下建立一個新目錄名為 hda6,並將小生系統原本 Debian 的 /(root) 分割區掛載到該目錄中。

第三步:
將其餘 Debian 相關之硬碟分割區都掛載進入相對應的目錄中如下:
/dev/hda1 掛載到 Knoppix 的 /mnt/hda6/boot
/dev/hda7 掛載到 Knoppix 的 /mnt/hda6/home
/dev/hda8 掛載到 Knoppix 的 /mnt/hda6/usr

第四步:
掛載 proc 系統進到 Knoppix 的 /mnt/hda6/proc 目錄底下。使用指令如下:
mount -t proc none /mnt/hda6/proc

第五步:
切換到新的跟目錄:chroot /mnt/hda6

第六步:
執行 grub 指令進入 grub 的命令模式後,依序執行以下敘述:
root (hd0,0)
//用於指定原先 Debian 系統的 /boot 所在硬碟分割區
setup (hd0)
//指定將 grub 的啟動相關程式(stage1的內容)寫入第一個硬碟的 MBR 磁區
quit
//離開 grub 命列模式

●【結果】:整個過程似乎沒有出現什麼問題,但是系統重新啟動後到了原本應該出現 Grub 開機啟動選單的地方,卻沒有如期的出現該選單,反而是冒出了兩三行奇怪的亂碼就完全停住了,因此無法啟動任何電腦中已有的作業系統。

*********************************************************
●正確的解決方法描述如下:

第一步:
使用原先製作好的 Grub 開機磁碟片啟動電腦進入原本的 Debian 系統。製作 Grub 開機磁碟片的方法如下文章所述:
http://wiki.debian.org.tw/index.php/MakeAGRUBBootFloppy
由於小生原本並未製作該開機片,所以在此是使用 Knoppix 光碟開機後掛載進了 Debian 相關硬碟分割區後再依照該文章的方法製作出一塊 Grub 開機磁碟片。

第二步:
成功的進入了 Debian 系統後,切換至 root 的身份,然後直接執行此指令:
grub-install /dev/hda

●【結果】:重新啟動系統後發現一切終於都恢復正常了。但是如果在上一步驟中的 Debian 系統,不使用 grub-install 指令而是進入 grub 命令模式使用 root (hd0,0) 以及 setup (hd0) 敘述的話,則又會產生如小生第一次嘗試的方法之錯誤。

●【結論】:經過了不斷的嘗試與研究,最後問題雖然解決了,但是小生功力淺薄,之前所嘗試的幾種方法所出現的問題之原因仍然不明,因此懷疑是 Grub 的 Bug 所導致,在解此問題之時,小生的 Grub 版本是 0.97。
The most beautiful thing we can experience is mysterious.
It is the source of all true art and science.

--- Albert Einstein, 1930
頭像
Lost-Angel
活潑的高中生
活潑的高中生
 
文章: 265
註冊時間: 週二 1月 25, 2005 1:29 am
來自: 臺灣民國高雄縣

文章訪客 » 週一 9月 11, 2006 1:17 am

有試過 goat 說的程序嗎?
可能之前說的錯誤, 問題在於對應的位置不對.
所以 chroot 進入 Debian 後再 mount 各個 partition, 這樣它才會對應到該對應的.
如果這樣, 不管是用 KNOPPIX 或 Debian floppy 應該都一樣.
跑 grub 再 root/setup 跟直接跑 grub-install 其實是做相同的事.
訪客
 

文章Lost-Angel » 週一 9月 11, 2006 12:58 pm

感謝前輩的指點,小生是沒有嘗試 goat 前輩所說得方法,因為那時小生已經使用 Debian floppy 的方法將問題解決。
但是小生實在不才不太了解您的意思,若先前該問題真如您說的是 mount 時位置對應錯誤所導致,那小生以 Debian Floppy 開機後以一般正常的模式啟動系統中原有的 Debian 系統,應該所有分割區位置的對應都完全正確了吧??? 但是在此情況下使用 grub 命令模式的 root 和 setup 也是一樣會讓硬碟的 MBR 爛掉,但是若此時使用 grub-install 的話則可完全如預期般的正常運作。
況且,小生同樣是使用 Knoppix 啟動系統,為何在 Knoppix 內以相同的方法 mount 進所有相關的硬碟分割區以後,同樣是使用 root 以及 setup 方式來寫入啟動磁區,將他寫進硬碟 MBR 會爛掉,但是寫進磁片當成開機片卻能使該磁片正常的啟動電腦中原有的所有作業系統。
這到底是怎麼一回事呢???
The most beautiful thing we can experience is mysterious.
It is the source of all true art and science.

--- Albert Einstein, 1930
頭像
Lost-Angel
活潑的高中生
活潑的高中生
 
文章: 265
註冊時間: 週二 1月 25, 2005 1:29 am
來自: 臺灣民國高雄縣

下一頁

回到 debian misc

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客