[轉貼]GRUB基本使用說明

常言道:『飲水思源』,在 Open Source 的世界裡,我們常常需要別人的幫助,但是在您有所心得的時候請記得分享給大家,『幫助人是快樂的喔』。歡迎您在使用 debian 的過程中的任何心得分享給大家。

[轉貼]GRUB基本使用說明

文章moto » 週日 5月 18, 2003 10:32 pm

Article from : http://zope.slat.org/Members/Keanu/docs/grub

GRUB基本使用說明






GRUB是一個多重開機管理工具,它可用來啟動Linux、BSD、OS/2、BeOS與Windows95/98/NT等眾多作業系統,GRUB是一個獨立於作業系統之外的開機程式,並不像LILO是依靠Linux才能進行設定與維護,也提供了類似Bash的命令列模式,讓使用者更方便地設定GRUB。






取得與安裝GRUB:


GRUB的原始碼壓縮檔可至GNU的ftp站台( ftp://alpha.gnu.org/gnu/GRUB/ )下載最新版本 ,下載回來後可存放在/usr/local/src/目錄下並將其解壓縮:


cp grub.tar.gz /usr/local/src/


tar zxvf grub.tar.gz


在GRUB的目錄下執行configure檔、make與make install,如下:


./configure


make


make install


當make install完成後GRUB也已順利安裝完畢,並有三個指令檔也被安裝至系統中:grub、grub-install與mbchk。而GRUB的相關檔案通常被安裝到/usr/local/share/grub的目錄下。


接下來先假設硬碟分割如下:


hda1:Windows98 (hd0,0)


hda2:Slackware Linux (hd0,1)


hdb1:Mandrake Linux (hd1,0)


注意的是GRUB認硬碟的方式跟Linux是不一樣的,在Linux中第一顆IDE硬碟是hda(SCSI:sda)以此類推,而GRUB則將第一顆IDE硬碟視為hd0(SCSI:sd0)以此類推;在Linux中第一顆IDE硬碟的第一個分割區是hda1(SCSI:sda1)以此類推,而GRUB將第一顆IDE硬碟的第一個分割區表示為hd0,0(SCSI:sd0,0)以此類推。






製作GRUB啟動磁片:


製作GRUB啟動磁片其實不難,首先需要兩個必備檔案,分別是stage1與stage2,可以在GRUB的安裝目錄下的i386-pc目錄中找到這兩個檔案,以及一片已格式化的乾淨磁片,然後依照下面的製作步驟就可製作出GRUB的啟動磁片:


cd /usr/local/share/grub/i386-pc/


dd if=stage1 of=/dev/fd0 bs=512 count=1


dd if=stage2 of=/dev/fd0 bs=512 seek=1


製作好了GRUB的開機磁片之後,就可以試著使用GRUB來進行多重作業系統的開機啟動。






利用GRUB開機磁片啟動系統:


接著重新啟動系統並設定BIOS由磁片開機,然後就可以看到'grub>'的命令列正等待指令,這就是GRUB的命令列環境,表示GRUB已順利地從啟動磁片載入並正常運作當中了。現在假設要啟動上述的Slackware Linux的話,在GRUB提示符號下鍵入如下的指令,如此就會進入Slackware Linux系統:


grub> root (hd0,1)


grub> kernel /boot/vmlinuz root=/dev/hda2 ro


grub> boot


root指令會mount後面參數的硬碟分割區位置。當mount完成後kernel指令會載入其參數的系統核心,Linux的核心通常是在/boot目錄下名為vmlinuz的檔案。最後的兩個參數都是要傳給剛載入的核心,root=/dev/hda2是告訴核心根目錄的位置是在/dev/hda2,並要求掛載成唯讀(ro)。
最後執行boot指令以進行Slackware系統的開機啟動。同理,位在hdb1上的Mandrake Linux也可以用類似的方式啟動:


grub> root (hd1,0)


grub> kernel /boot/vmlinuz root=/dev/hdb1 ro


grub> boot




現在root指令改mount (hd1,0)的分割區,此分割區就是Mandrake Linux的根目錄位置。然後kernel指令載入Mandrake的核心檔,告訴核心Mandrake系統的根目錄是在/dev/hdb1,並要求掛載成唯讀。最後以boot指令進行系統的啟動。


以上的方式都可以順利地啟動Linux系統,但是對Windows系統可是不管用的,要啟動在hda1上的Windows98的話,則要換些指令才行得通,請在GRUB命令列中依序鍵入下列指令就可以進入Windows98:


grub> rootnoverify (hd0,0)


grub> chainloader +1


grub> makeactive


grub> boot


以rootnoverity指令讓GRUB不要mount (hd0,0)的分割區,只要知道待會是要啟動此分割區上的作業系統。chainloader +1的意思是指定此分割區上的第一個磁區來做啟動。makeactive指令是要在此分割區上設定'active'的旗標,只要是Windows的作業系統都是要這麼做的。最後以boor指令進行開機。






使用硬碟上的GRUB開機啟動:


GRUB的開機磁片固然方便好用,但製作GRUB開機磁片的目的只在於系統救援之用,要能確實享用GRUB的強大功能,最好是可以用硬碟上的GRUB來進行開機,就像LILO一樣安裝到硬碟的MBR上。


首先要在系統上建立GRUB專用的開機目錄/boot/grub,如同製作GRUB的開機磁片一樣須要stage1檔和stage2檔,所以請把GRUB安裝目錄下的i386-pc目錄中的stage1檔和stage2檔copy到剛剛建立的/boot/grub目錄底下:


mkdir /boot/grub


cp /usr/local/share/grub/i386-pc/stage* /boot/grub


完成之後鍵入指令GRUB指令進入GRUB命令列環境,在GRUB命令列環境裡鍵入如下的指令:


grub> root (hd0,2)


grub> setup (hd0)


grub> quit


如此即可完成GRUB在/boot/grub中的開機設定,先用root指令mount目錄/boot/grub所在的位置,其中的(hd0,2)就是指上面假設的Slackware系統,也就是說/boot/grub目錄是在Slackware系統中所建立的。所若是要改成由Windows98來放置GRUB的stage檔的話,就要在Windows98的系統上建立/boot/grub的目錄,並將stage1檔和stage2檔存放在Windows98上的\boot\grub目錄裡,而root指令的參數也要改為Windows98所在的分割區,也就是上面假設的(hd0,0)。第二個指令'setup'是指要將GRUB安裝在哪個位置來開機啟動,如果是要安裝到硬碟的MBR上的話只須加上硬碟的位置如(hd0),若是要安裝到硬碟第一個分割區上的第一個磁區的話就要加上分割區的位置如(hd0,0)。


除非是有特殊的情況,不然最好是裝在硬碟的分割區上較安全。最後使用quit指令離開GRUB命令列環境。






使用選項清單:


現在雖然可以用GRUB來做多重開機的管理,但每次都要輸入繁雜的指令也不方便,因此GRUB也提供了選項清單的方式,讓每次開機時只須按上下鍵選擇要開機的系統再按下Enter鍵即可進行開機而不必再輸入任何的指令。GRUB在開機時會先尋找/boot/grub目錄下的menu.lst檔,找到的話GRUB就會依照menu.lst檔的內容顯示一個選項清單的圖形介面,讓使用者選擇要開機的作業系統。


首先在/boot/grub目錄下建立一個新檔名為'menu.lst',底下是menu.lst檔的設定範例:


#/boot/grub/menu.lst


timeout 30


default 0 #Default Slackware Linux


fallback 1 #Windows98


fallback 2 #Mandrake Linux


color light-green/brown blink-red/blue


# For booting Slackware Linux


title Slackware


root (hd0,1)


kernel /boot/vmlinuz root=/dev/hda2 ro


#For booting Windows


title Windows98


rootnoverify (hd0,0)


chainloader +1


makeactive


#For booting Mandrake Linux


title Mandrake


root (hd1,1)


kernel /boot/vmlinuz root=/dev/hdb1 ro


上面menu.lst檔的範例是針對之前所假設的硬碟分割區上配置的作業系統而設定的。menu.lst是以'#'符號當作注解的開頭,GRUB會忽略所有以'#'符號啟始的注解行。timeout指令是指GRUB啟動之後的等待時間,以秒為單位,所以上面的範例就是等待30秒的意思。default指令就是當GRUB啟動之後等待的時間超過指令timeout所設定的時間的話,就會指令default後面參數所指定的系統,參數0代表menu.lst檔中第一個被設定的作業系統,以上面的範例而言就是指Slackware Linux,因為它是最先被設定的,如果參數改為1的話就是啟動Windows98,以此類推。fallback指令是指當GRUB啟動指令default所指定的作業系統失敗的話,便會啟動指令fallback所指定的作業系統,以上面的範例而言,當Slackware啟動失敗的話GRUB就會啟動fallback所指定的便是Windows98。指令color可以設定GRUB選項清單的前景/背景的顏色,有關GRUB可以指定的顏色可以查看GRUB的info文件。接下來的指令就是設定作業系統,指令title可以設定該作業系統的標題,而其下的設定的指令?銋窵N是原本在GRUB命令列中所鍵入的指令是一樣的,差別是不用再加上boot指令。


設定好menu.lst檔後,將此設定檔存在/boot/grub目錄底下即可,然後重新開機便會看到GRUB漂亮的選項清單,?{在就可以試著啟動不同的作業系統了。




以上是GRUB的基本使用說明,當硬碟上有許多的作業系統時,使用GRUB是理所當然的,並且是正確的選擇,就算硬碟上只有一兩種作業系統也可以使用GRUB。當然GRUB的功能是很強大的,已足以取代傳統的LILO,可以多閱讀GRUB的info文件裡面的說明。




歡迎email給我:keanu@ms50.url.com.tw
歡迎你來到MOTO學園一起討論Debian相關問題。
在post問題前可先別忘記了以下的步驟:
1:翻一下/usr/share/doc/中是否已經有解答了?
2:閱讀一下無痛起步是否已經提到了?
3:找一下google予以解答?
4:善用學園中的"搜尋"功能,往往答案就在裡面窩。
頭像
moto
摩托學園站長
摩托學園站長
 
文章: 2808
註冊時間: 週二 9月 03, 2002 3:37 am
來自: 台北

文章為什麼? » 週一 3月 07, 2005 9:11 pm

請問 為什麼我用光碟開機以後,進入rescue模式後,然後在"/" 裡打 ls -a 指令後,都看不到 boot 這個資料夾,怎麼辦?
為什麼?
 

文章zero0812 » 週二 4月 26, 2005 7:01 pm

請問一下我的電腦現在一直出現grub>
然後打啥指另都沒有用 昨晚還好好的 救命呀
zero0812
可愛的小學生
可愛的小學生
 
文章: 3
註冊時間: 週二 4月 26, 2005 6:57 pm


回到 share

誰在線上

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