記念我花了一個晚上搞定GRUB的艱苦歷程,也送給有同樣難題的兄弟.
故事是這樣的:原先小菜鳥我有一塊40G的硬盤,裝了2k和98,快樂又太平.後來拿到手RedHat 7.3,不免心癢拿出來裝...可是原先40G的硬盤滿滿當當Linux塞不進,一沖動,就把老奔機器上一塊10G的硬盤給卸了,當做我裝Linux的硬盤,也省去了分區的麻煩.誰知,麻煩就來了...
好了,不要扔蛋,正題來了.
Linux在安裝並配置Loader之時,我理所當然選擇了GRUB,但是發現:他要覆蓋我/dev/hda1中的mbr,也就是我原先那塊40G硬盤的mbr,這還了得?我本來是不想讓我原先的硬盤被改寫的,那裡面的數據對我太重要了,萬一一個安裝失敗,它就給我個boot failure那我豈不是哭死?但是那下拉選單中又沒有/dev/hdc1(在我機器上是那個10G小硬盤),無奈之下退出,只好將大硬盤先disable掉.再裝,成功了,能寫小硬盤的mbr了,我歡欣鼓舞,繼續......
於是,問題漸漸顯露,我在用Linux時候,想換到Windows下要啟動2次:一次先把cmos中的啟動順序該為先啟動大硬盤,也就是windows所在硬盤,再存進cmos重新啟動,一開始還能忍受,日子久了,不勝其煩...於是萌生了修改grub能啟動我的Windows 分區的想法...這也便是痛苦的開始
先是看RH自代的文檔盤,找了一個樣例文件,如下:
default=linux
timeout=10
color=green/black light-gray/blue
# section to load linux
title linux
root (hd0,1)
kernel /vmlinuz root=/dev/hda5
boot
# section to load windows 2000
title windows
#(hd1,2)是我機器上裝Windows硬盤的id
rootnoverify (hd1,2)
chainloader +1
喲,加3句話可以搞定?好,試試!重啟,選擇windows,死機...默哀中.除了耳熟能祥的Ctrl+Alt+Del按什麼都沒用.於是到這裡發了貼子,北南老大教育我要多用搜索,臉紅,是的,我後來看了他給的幾篇文章,GRUB是夠清楚了,連它的command line模式我也差不多能用的很熟,可是,大家也猜到了,死機依舊.我當然確定了我沒有弄錯硬盤分區的id,但是屏幕上沒有任何顯示!這讓大多數的Troubleshooting和FAQ都變的像一紙空文.我快洩氣了.
由於不好意思再到論壇裡瞎問,只能繼續在文檔盤裡找結果.The Official Red Hat Linux Reference Guide中給出了幾個鏈接,去看看!
第一個去的地方:
http://www.linuxgazette.com/issue64/kohli.Html
唔,學到了不少:
Let's try another example with Windows installed in /dev/hda1 or (hd0,0). The procedure for booting with Windows is as follows:
#在menu.lst也就是grub.conf文件中:
rootnoverify (hd0,0)
makeactive
chainloader +1
boot
喔,原來需要加一個makeactive和boot!!怎麼都沒人高訴我讷?試試!(滿心歡喜)
結果,問題依舊....
好把,繼續找出路:
http://www.redhat.com/mirrors/LDP/H...-with-GRUB.html
好,Redhat的官方支持,准沒錯!
嗯,在文檔裡看到了修改menu.lst文件的另一個版本:
title Windows 2000
unhide (hd0,0)
hide (hd0,1)
hide (hd0,2)
rootnoverify (hd0,0)
chainloader +1
makeactive
需要將非linux分區隱藏?我試試......
死機....
重啟....
問題來了!我的GRUB怎麼變成文本格式了?!我怎麼啟動??
真的,GRUB變回了你在控制台中的命令行bash-like方式,這這這,怎能不叫人眼前一黑?
冷靜,feng_ye,冷靜,想想,對了!一定是hide命令隱藏了linux分區,那麼恢復它!通過按<tab>獲得幫助,我unhide了所有的分區...按<Esc>,回到了可愛的(可惡的?)GRUB GUI界面(呼~還好,沒沖動把Linux重裝,因為我沒有啟動軟盤)
看來都不行...在我心灰意懶之余我到了GNU的主頁作最後一次掙扎,(誰知,嘿嘿)
http://www.gnu.org/software/grub/
那裡有相當專業的FAQ和TroubleShooting, 而我也在那裡發現了救命稻草:
原文如下:
If you have installed DOS (or Windows) on a non-first hard disk, you have to use the disk swapping technique, because that OS cannot boot from any disks but the first one. The workaround used in GRUB is the command map (see map), like this:
grub> map (hd0) (hd1)
grub> map (hd1) (hd0)
好像......就是它!!
爾後, 我修改了我的menu.lst,去掉了hide, unhide, 全文件如下:
# 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,1)
# kernel /boot/vmlinuz-version ro root=/dev/hdc2
# initrd /boot/initrd-version.img
#boot=/dev/hdc
default=0
timeout=10
splashimage=(hd0,1)/boot/grub/splash.XPm.gz
title Red Hat Linux (2.4.18-5)
root (hd0,1)
kernel /boot/vmlinuz-2.4.18-5 ro root=/dev/hdc2 hdd=ide-scsi
initrd /boot/initrd-2.4.18-5.img
title Red Hat Linux (2.4.18-3)
root (hd0,1)
kernel /boot/vmlinuz-2.4.18-3 ro root=/dev/hdc2 hdd=ide-scsi
initrd /boot/initrd-2.4.18-3.img
title Windows
map (hd0) (hd1)
map (hd1) (hd0)
rootnoverify (hd1,2)
chainloader +1
makeactive
boot
原來如此. 怪不得我以前在控制台打grub檢索硬盤分區和在啟動時進入command-line mode檢索分區得到的硬盤列表正好相反(很拗口是吧?就是hd0的分區變成了hd1的,而hd1的分區變成了hd0的).原來用map命令可以虛擬掉換兩硬盤的id.
重啟, 成功!
經驗三條:1,不要沒做研究就到論壇上問,除非你的時間太緊迫;
2,英文很重要,讀懂官方文件和Online manual,對我們好處多多;
3,堅持不懈,我就不信它牛得過我?!
後記: 多謝北南,雖然沒有在他的教程裡找到答案(說不定也有?), 但是也獲益非潛.後來在RH的文檔盤裡也發現了這關鍵的map命令,只是當初沒留意...
root (hd0,1)
kernel /boot/vmlinuz-2.4.18-5 ro root=/dev/hdc2 hdd=ide-scsi
initrd /boot/initrd-2.4.18-5.img
title Red Hat Linux (2.4.18-3)
root (hd0,1)
kernel /boot/vmlinuz-2.4.18-3 ro root=/dev/hdc2 hdd=ide-scsi
initrd /boot/initrd-2.4.18-3.img
title Windows
map (hd0) (hd1)
map (hd1) (hd0)
rootnoverify (hd1,2)
chainloader +1
makeactive
boot
原來如此. 怪不得我以前在控制台打grub檢索硬盤分區和在啟動時進入command-line mode檢索分區得到的硬盤列表正好相反(很拗口是吧?就是hd0的分區變成了hd1的,而hd1的分區變成了hd0的).原來用map命令可以虛擬掉換兩硬盤的id.
重啟, 成功!
經驗三條:1,不要沒做研究就到論壇上問,除非你的時間太緊迫;
2,英文很重要,讀懂官方文件和Online manual,對我們好處多多;
3,堅持不懈,我就不信它牛得過我?!
後記: 多謝北南,雖然沒有在他的教程裡找到答案(說不定也有?), 但是也獲益非潛.後來在RH的文檔盤裡也發現了這關鍵的map命令,只是當初沒留意...