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可以設定該作業系統的標題。
  
  設定好menu.lst文件後,將此設定文件存在/boot/grub目錄底下即可,然後重新開機便會看到GRUB漂亮的選項清單,現在就可以試著激活不同的作業系統了。
  
  以上是GRUB的基本使用說明,當硬碟上有許多的作業系統時,使用GRUB是理所當然的,並且是正確的選擇,就算硬碟上只有一兩種作業系統也可以使用GRUB。當然GRUB的功能是很強大的,已足以取代傳統的LILO,可以多閱讀GRUB的info文件裡面的說明。