幫助中心

當前位置:首頁 > 幫助中心 > GRUB簡單入門教程

GRUB簡單入門教程

日期:2011-05-04 | 時間:01:27

 

一、什么是多重操作系統(tǒng)引導(dǎo)管理器,什么是GRUB;
 


1、什么是多重操作系統(tǒng)引導(dǎo)管理器及工作原理;

系統(tǒng)啟動引導(dǎo)管理器,是在計算機啟動后運行的第一個程序,他是用來負責(zé)加載、傳輸控制到操作系統(tǒng)的內(nèi)核,一旦把內(nèi)核掛載,系統(tǒng)引導(dǎo)管理器的任務(wù)就算完成退出,系統(tǒng)引導(dǎo)的其它部份,比如系統(tǒng)的初始化及啟動過程則完全由內(nèi)核來控制完成;


Briefly, boot loader is the first software program that runs when a computer starts. It is responsible for loading and transferring control to the operating system kernel software (such as the Hurd or the Linux). The kernel, in turn, initializes the rest of the operating system (e.g. GNU).

在X86 架構(gòu)的機器中,Linux、BSD 或其它Unix類的操作系統(tǒng)中GRUB、LILO 是大家最為常用,應(yīng)該說是主流;

Windows也有類似的工具NTLOADER;比如我們在機器中安裝了Windows 98后,我們再安裝一個Windows XP ,在機器啟動的會有一個菜單讓我們選擇進入是進入Windows 98 還是進入Windows XP。NTLOADER就是一個多系統(tǒng)啟動引導(dǎo)管理器,NTLOADER 同樣也能引導(dǎo)Linux,只是極為麻煩罷了;

在Powerpc 架構(gòu)的機器中,如果安裝了Linux的Powerpc 版本,大多是用yaboot 多重引導(dǎo)管理器,比如Apple機目前用的是IBM Powerpc處理器,所以在如果想在Apple機上,安裝Macos 和Linux Powerpc 版本,大多是用yaboot來引導(dǎo)多個操作系統(tǒng);

因為目前X86架構(gòu)的機器仍是主流, 所以目前GRUB和LILO 仍然是我們最常用的多重操作系統(tǒng)引導(dǎo)管理器;


2、什么是GRUB;為什么我要選擇GRUB;


1)什么是GRUB;

GNU GRUB 是一個多重操作系統(tǒng)啟動管理器。GNU GRUB 是由GRUB(GRand Unified Bootloader) 派生而來。GRUB 最初由Erich Stefan Boleyn 設(shè)計和應(yīng)用;

GNU GRUB is a Multiboot boot loader. It was derived from GRUB, GRand Unified Bootloader, which was originally designed and implemented by Erich Stefan Boleyn.


2)“GRUB太不好用”──對GRUB的認識的誤區(qū);

GRUB真的不好用嗎?不是的,通過LinuxSir.Org 社區(qū)近四年來的運行,我發(fā)現(xiàn)了大多新手弟兄還是不太了解GRUB;當然這也有中文Linux社區(qū)的責(zé)任,雖然也有GRUB的中文譯本,初學(xué)Linux的弟兄可能有點看不懂;

我們欣喜的看到LinuxSir.Org 社區(qū)的好多弟兄都曾經(jīng)或正在寫GRUB實踐文檔,也有的弟兄也總結(jié)了GRUB的一些基礎(chǔ)知識,比如 probing兄弟的 《GRUB 學(xué)習(xí)筆記》;由于每個人的寫文檔時風(fēng)格不同,可能同一份文檔不同的人來寫就有不同的風(fēng)格;所以今天也抖膽也一篇入門級的教程,由于北南不會寫高級教程,所以還得請高手弟兄指教,先謝過;


3)為什么要選擇GRUB;

基于在X86架構(gòu)的CPU而開發(fā)操作系統(tǒng),系統(tǒng)引導(dǎo)管理器不僅僅有GRUB ,而且也有LILO,但對于多重系統(tǒng)引導(dǎo)管理器,你只能選擇其一而用;不能兩個同時使用;

目前這兩個多重系統(tǒng)引導(dǎo)管理器是大家最常用的,也是主流Linux發(fā)行版而采用的;有的弟兄喜歡GRUB,比如我個人,有的弟兄喜歡LILO ,比如etony兄(誰是etony,請參見 http://linux.sheup.com/tag.php?tag=etony );

主流發(fā)行版 Fedora、Redhat、Centos等基于RPM包的系統(tǒng),在最新版本中都默認GRUB引導(dǎo);Slackware 目前仍采用LILO;而Debian發(fā)行版目前最新的版本也是采用GRUB;

從目前看來,GRUB有逐漸取代LILO之勢,GRUB 2.0正在開發(fā)之中;所以我們有理由用GRUB,我也有理由寫GRUB使用教程;


二、GRUB軟件包版本選擇和安裝;


1、GRUB的版本選擇,Linux版本的GRUB及Windows版本的GRUB的說明;

GRUB不但有Linux版本,也有Windows版本;現(xiàn)我們一一介紹;

如前面所說,目前在在Unix類的操作系統(tǒng)中,大多是都有GRUB;GRUB幾乎能引導(dǎo)所有X86架構(gòu)的操作系統(tǒng);功能之強,使用簡單是GRUB最大的賣點;由于Windows 操作系統(tǒng)的先入為主的優(yōu)勢,使得大家對Windows的NTLOADER了解的比較多,而對開源社區(qū)的GRUB顯得有點寞生,由此而帶來使用上的“心理恐懼”;究其初學(xué)者對GRUB“恐懼”的主要原因還是對GRUB沒有太多的了解和深入;無論是WINGRUB還是Linux版本的GRUB,最方便的還是對GRUB命令行的操作;一談到命令行(Command)的操作,可能初學(xué)者對此恐懼;其實沒有什么難的,象北南這樣低級的寫手,還能操作得起來,您也應(yīng)該能行;


2、GRUB的Windows版本W(wǎng)INGRUB;

請參考:《以WINGRUB 引導(dǎo)安裝Fedora 4.0 為例,詳述用WINGRUB來引導(dǎo)Linux的安裝》


3、GRUB的Linux版本軟件包的安裝;

其實對于Linux的GRUB,幾乎所有的Linux主流發(fā)行版都有打包,如果您安裝了Linux,并且在開機后出現(xiàn)GRUB字樣的,證明您已經(jīng)安裝了GRUB;而無需再次安裝;Linux的GRUB軟件包安裝部份并不是本文的重點;

如果您的Linux系統(tǒng)沒有安裝GRUB,或者采用的是LILO,而您想用GRUB,可以用系統(tǒng)安裝盤自帶GRUB軟件包來安裝,或者到相關(guān)發(fā)行版本的軟件倉庫下載后安裝;

GRUB 的Linux版本目前在各大發(fā)行版中都有打包;比如Fedora/Redhat/Centos/Mandrive/Mandriva/SuSE等以RPM包管理機制的系統(tǒng),可以通過如下的命令來安裝;

請參考《Fedora / Redhat 軟件包管理指南》

 

[root@localhost ~]# rpm -ivh grub*.rpm

 

如果是Slackware 您可以用如下的辦法來安裝;

 

[root@localhost ~]# installpkg grub*.tgz

 

其它的發(fā)行版本請用其自己特色的軟件包管理工具來安裝;

當然您也可以通過源碼包,在任何Linux的發(fā)行版上安裝;至于源碼包的安裝方法;

請參考:《如何編譯安裝源碼包軟件》

 

[root@localhost ~]#tar zxvf grub*.tar.gz
[root@localhost ~]#cd grub-xxx
[root@localhost ~]#./configure;make;make install

 

確認您是否成功安裝了GRUB,您可以測試是否有如下兩個命令;

 

[root@localhost ~]# grub
[root@localhost ~]# grub-install

 

如果您不能找到這兩個命令,可能您的可執(zhí)行程序的路徑?jīng)]有設(shè)置;

請參考:《設(shè)置可執(zhí)行程序路徑》,當然您可以用絕對路徑;比如下面的;

 

[root@localhost ~]# /usr/sbin/grub
[root@localhost ~]# /usr/sbin/grub-install

 

如果您還是找不到GRUB軟件包安裝在哪了;您可以用下面的命令來解決和查找;

 

[root@localhost ~]# updatedb  注:這個要花很長時間;是索引slocate 的庫,然后再通過locate來查找;
[root@localhost ~]# locate grub

 

比如找到的是有類似如下的;

[root@localhost ~]# locate grub
/sbin/grub-md5-crypt
/sbin/grub
/sbin/grub-install
/sbin/grub-terminfo

 

在一般情況下,在路徑中帶有bin或sbin中字樣的,這些路徑下都是可執(zhí)行程序;sbin 是超級權(quán)限用戶才能使用的管理命令;要使用這些命令一般的情況下得切換到root用戶下才能使用;比如

 

[beinan@localhost ~]$ su -  注:切換到root用戶,并且切換到其家目錄;
Password:
[root@localhost ~]#/sbin/grub  注:用絕對路徑來運行g(shù)rub命令;

 


三、在Linux中,GRUB的配置中的安裝和寫入硬盤的MBR;


1、在Linux中,GRUB配置過程中的安裝grub-install;

grub-install 命令有何用呢?其實就是把我們前面已經(jīng)安裝的軟件包中的一些文件復(fù)制到 /boot/grub中;對于新安裝GRUB軟件包后,也是一個必經(jīng)的過程;我們前面所說的GRUB軟件包的安裝;而現(xiàn)在我們說的是GRUB配置的過程中的安裝;雖然在洋文中都是install ,但表達的意思是不一樣的;

我們首先要運行 fdisk -l 來確認到底是硬盤的標識;

這個過程主要是確認硬盤的標識是哪個調(diào)備,到底是/dev/hda還是/dev/hdb 還是其它的;

 

[root@localhost ~]# fdisk -l

Disk /dev/hda: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/hda1   *           1         970     7791493+   7  HPFS/NTFS
/dev/hda2             971        9729    70356667+   5  Extended
/dev/hda5             971        2915    15623181    b  W95 FAT32
/dev/hda6            2916        4131     9767488+  83  Linux
/dev/hda7            4132        5590    11719386   83  Linux
/dev/hda8            5591        6806     9767488+  83  Linux
/dev/hda9            6807        9657    22900626   83  Linux
/dev/hda10           9658        9729      578308+  82  Linux swap / Solaris

 

如果通過fdisk -l 出現(xiàn)有/dev/hda字樣的,我們就要用下面的命令來安裝;

 

[root@localhost ~]# grub-install /dev/hda
Installation finished. No error reported.
This is the contents of the device map /boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.

(fd0)   /dev/fd0
(hd0)   /dev/hda

 

如果是您fdisk -l 出現(xiàn)的有/dev/hdb呢,那就如下運行;

 

[root@localhost ~]# grub-install /dev/hdb

 

如果既有/dev/hda和/dev/hdb 就安裝到/dev/hda中;

 

[root@localhost ~]# grub-install /dev/hda

 

值得注意的是如果您有一個/boot分區(qū),應(yīng)該用如下的辦法來安裝;

 

[root@localhost ~]#grub-install --root-directory=/boot /dev/hda

[root@localhost ~]#grub-install --root-directory=/boot /dev/hdb

 

注解:具體是/dev/hda還是/dev/hdb,請以fdisk -l 為準;如果兩個都有,就看您把/boot分區(qū)是放在第一塊硬盤還是第二塊硬盤上了,以實際情況為準;


2、設(shè)定GRUB的/boot分區(qū)并寫入MBR;;

在Linux中,GRUB軟件包的安裝,及在配置過程中安裝grub到 /boot中還是不夠的, 還要把GRUB,寫入MBR才行;有時我們重新安裝了Windows,Windows會把MBR 重寫,這樣GRUB就消失了;如果您出現(xiàn)這樣的情況,就要進行這個過程;

 

[root@localhost ~]# grub

 

會出現(xiàn)grub>提示符,這是grub命令行模式 ,如果能在開機中出現(xiàn)提示符,沒有引導(dǎo)不起來的系統(tǒng),除非您的系統(tǒng)破壞的極為嚴重。如果僅僅是GRUB被破壞了,GRUB命令行是能讓操作系統(tǒng)引導(dǎo)起來的;

接著看例子,我們要找到 /boot/grub/stage1的,在grub>后面輸入;大白菜官網(wǎng)

 

grub> find  /boot/grub/stage1
(hd0,6) 
(fd0)   注:這個是軟驅(qū);現(xiàn)在很少用軟驅(qū)了,如果您有這方面的需要,自己看GRUB的DOC吧;

 

注解:

(hd0,6) 這是/boot所在的分區(qū);不要誤解為是Linux 的/所在的分區(qū),這是值得注意的;
(fd0) 注:這個是軟驅(qū);現(xiàn)在很少用軟驅(qū)了,如果您有這方面的需要,自己看GRUB的DOC吧;

 

grub>root (hd0,6)    注:這是/boot所在的分區(qū);
grub>setup (hd0)   注:把GRUB寫到MBR上;

 

注解:

上面這步驟是根據(jù) find /boot/stage1而來的,仔細看一下就明白了;現(xiàn)在我們一般安裝很少會把/boot分區(qū)列為一個單獨的分區(qū);不過有的弟兄可能也喜歡這么做;所以還是有必要說一下為好;


四、GRUB的配置文件的menu.lst的寫法;

對于GRUB來說,如果沒有配置menu.lst,無論是Linux版本的GRUB,還是WINGRUB,都會有命令行可用,通過命令行是一樣能把操作系統(tǒng)引導(dǎo)起來的;有些弟兄總以為menu.lst 配置錯了, 或者在機器啟動后出現(xiàn)grub>命令行模式就要重新安裝系統(tǒng),其實根本沒有這個必要;只要學(xué)會GRUB的命令行的用法,根本沒有必要重裝系統(tǒng);

menu.lst 位于/boot/grub目錄中,也就是/boot/grub/menu.lst 文件;您可以用vi或您喜歡的編輯器來編輯他;如果您不會用vi,還是去學(xué)習(xí)一下吧;簡單的用法怎么也得會,對不對?畢竟這個文檔不是講vi的用法的;

有的弟兄會說,我沒有menu.lst怎么辦?那就創(chuàng)建一個;用下面的命令;

 

[root@localhost ~]# touch  /boot/grub/menu.lst


然后我們再做一個/boot/grub/menu.lst 的鏈接 /boot/grub/grub.conf
 

[root@localhost ~]# cd /boot/grub
[root@localhost ~]# ln -s menu.lst grub.conf

 

現(xiàn)在我們來寫GRUB的menu.lst了,因為/boot/grub/grub.conf是 /boot/grub/menu.lst的鏈接文件,改哪個都行。鏈接文件相當于Windows的快捷方式,這樣可能能更好的理解;大白菜官網(wǎng)


1、menu.lst的寫法之一;

首先我們看一下我的Fedora 4.0 中的/boot/grub/menu.lst 的內(nèi)容;

 

default=0
timeout=5
#splashimage=(hd0,6)/boot/grub/splash.xpm.gz
hiddenmenu
title Fedora Core (2.6.11-1.1369_FC4)
        root (hd0,6)
        kernel /boot/vmlinuz-2.6.11-1.1369_FC4 ro root=LABEL=/
        initrd /boot/initrd-2.6.11-1.1369_FC4.img
title WinXp
        rootnoverify (hd0,0)
        chainloader +1

 

注解:

default=0


default=0 是默認啟動哪個系統(tǒng),從0開始;每個操作系統(tǒng)的啟動的定義都從title開始的,第一個title 在GRUB的啟動菜單上顯示為0,第二個啟動為1,以此類推;
 

timeout=5


注:表示在開機后,GRUB畫面出現(xiàn)幾秒后開始以默認啟動;如果在啟動時,移動上下鍵,則解除這一規(guī)則;
#splashimage=(hd0,6)/boot/grub/splash.xpm.gz 注:GRUB的背景畫面,這個是可選項;我不喜歡GRUB的背景畫面,所以加#號注掉,也可以刪除;

 

hiddenmenu

 

注解:隱藏GRUB的啟動菜單,這項也是可選的,也可以用#號注掉;

一般的情況下對Linux操作系統(tǒng)的啟動,一般要包括四行;title 行;root行;kernel 行;initrd 行;


1)在menu.lst中 ,通過 root (hd[0-n],y)來指定/boot 所在的分區(qū);

title XXXXX 注:title 后面加一個空格,title 是小寫的,后面可以自己定義;比如FC4,自己定義一個名字就行;大白菜官網(wǎng)
root (hd[0-n],y) ,在本例中,我們看到的是root (hd0,6) ,root (hd[0-n],y)表示的是/boot所在的分區(qū);有時我們安裝Linux的時候,大多是不設(shè)置/boot的,這時/boot和/所在的同一個分區(qū); 這個root (hd[0-n],y)很重要,因為/boot目錄中雖然有g(shù)rub目錄,最為重要的是還有kernel 和initrd文件,這是Linux能啟動起來最為重要東西;

有的弟兄會問,root (hd[0-n],y)是怎么來的?

請參考:《在Linux系統(tǒng)中存儲設(shè)備的兩種表示方法》

2)在menu.lst中,kernel 命令行的寫法;

kernel 一行,是通指定內(nèi)核及Linux的/分區(qū)所在位置;

比如例子中是;

kernel /boot/vmlinuz-2.6.11-1.1369_FC4 ro root=LABEL=/


在這里以kernel 起始,指定Linux的內(nèi)核的文件所處的絕對路徑;因為內(nèi)核是處在/boot目錄中的, 如果/boot是獨立的一個分區(qū),則需要把boot省略;如果/boot是獨立的分區(qū),這行要寫成:
 

kernel /vmlinuz-2.6.11-1.1369_FC4 ro root=LABEL=/ 

 

因為/boot所處的分區(qū)已經(jīng)在title 下一行root (hd[0-n],y)中指定了,所以就無需要再指明內(nèi)核處在哪個分區(qū)了;另外Linux系統(tǒng)的硬盤分區(qū)的掛載配置文件在/etc/fstab ,原理是通過 mount /dev/hd[a-z]X /boot 來進行的;您可以對照著來理解;

ro 表示只讀; root=LABEL=/ 來表示Linux的根所處的分區(qū)。LABEL=/ 這是硬盤分區(qū)格式化為相應(yīng)文件系統(tǒng)后所加的標簽;如果您不了解什么是標簽,也可以直接以/dev/hd[a-z]X 或者/dev/sd[a-z]X來表示;就看您的Linux是根分區(qū)是在哪個分區(qū)了。比如我的是在/dev/hda7 , 那這里就可以寫成root=/dev/hda7;

如果查看系統(tǒng)運行所掛載的分區(qū),請用 df -lh 來查看,就能明白是不是/boot是獨立的分區(qū),或者查看/etc/fstab也能知道;

 

[root@localhost ~]# df -lh
Filesystem            容量  已用 可用 已用% 掛載點
/dev/hda7              11G  9.2G  1.2G  90% /
/dev/shm              236M     0  236M   0% /dev/shm

 

在這個例子中,我們可以發(fā)現(xiàn) /boot并沒有出現(xiàn)只有/dev/hda7,這表示/boot并不是獨立的一個分區(qū);所有的東西都包含在/中;于是我們在/boot中查看內(nèi)核版本;

[root@localhost ~]# ls /boot/vmlinuz*
/boot/vmlinuz-2.6.11-1.1369_FC4   注:看到內(nèi)核vmlinuz所處的目錄;

 

于是我們就可以這樣kernel 這行了;

 

kernel /boot/vmlinuz-2.6.11-1.1369_FC4  ro root=/dev/hda7



3)initrd 命令行的寫法;
 

 

如果是/boot獨立一個分區(qū),initrd 一行要把/boot中省略;如果/boot不是處于一個分區(qū),而是和Linux的/分區(qū)處于同一分區(qū),不應(yīng)該省略;

比如我們在2)中用的例子;現(xiàn)在拿到這里,我們應(yīng)該首先查看 /boot中的initrd的文件名到底是什么;

 

[root@localhost ~]# ls /boot/initrd*
/boot/initrd-2.6.11-1.1369_FC4.img

 

如果是通過df -lh 得知或查看/etc/fstab 也行, 得知/boot是獨立的分區(qū);這時initrd 應(yīng)該寫成;

 

initrd  /initrd-2.6.11-1.1369_FC4.img

 

如果是 /boot不是獨處一個分區(qū),而是在/同一處一個分區(qū), 則要寫成;

 

initrd  /boot/initrd-2.6.11-1.1369_FC4.img

 


4)menu.lst第一種寫法的總結(jié)和實踐;

在這里,我們只說重要的,不重要的就一帶而過了;

1]用fdisk -l ;df -lh ;more /etc/fstab來確認分區(qū)情況;

我們過fdisk -l ;df -lh ; more /etc/fstab 來確認/boot所在的分區(qū),及Linux的根分區(qū)所在位置;

比如我們確認/boot和Linux的/分區(qū)同處一個分區(qū);

 

[root@localhost ~]# df -lh
Filesystem            容量  已用 可用 已用% 掛載點
/dev/hda7              11G  9.2G  1.2G  90% /
/dev/shm              236M     0  236M   0% /dev/shm

 

然后我們/etc/fstab 中,查看/分所在的分區(qū)或分區(qū)標簽是什么;

[root@localhost ~]# more /etc/fstab
# This file is edited by fstab-sync - see 'man fstab-sync' for details
LABEL=/                 /                       ext3    defaults        1 1
/dev/devpts             /dev/pts                devpts  gid=5,mode=620  0 0
/dev/shm                /dev/shm                tmpfs   defaults        0 0
/dev/proc               /proc                   proc    defaults        0 0
/dev/sys                /sys                    sysfs   defaults        0 0
LABEL=SWAP-hda1         swap                    swap    defaults        0 0
/dev/hdc                /media/cdrecorder       auto    pamconsole,exec,noauto,managed 0 0

 

經(jīng)過上面的df -lh 和more /etc/fstab 的對照中得知,/boot并是獨處一個分區(qū),而是和/在同一個分區(qū);這個Linux系統(tǒng)安裝在/dev/hda7上,文件系統(tǒng)(此分區(qū))的標簽為LABEL=/ ,/boot也是處于/dev/hda7 ,/dev/hda7也可以說是 root (hd0,6);

2]查看內(nèi)核vmlinuz的和initrd文件名的全稱;

 

[root@localhost ~]# ls -lh /boot/vmlinuz*
-rw-r--r--  1 root root 1.6M 2005-06-03  /boot/vmlinuz-2.6.11-1.1369_FC4
[root@localhost ~]# ls -lh /boot/initrd*
-rw-r--r--  1 root root 1.1M 11月 26 22:30 /boot/initrd-2.6.11-1.1369_FC4.img

 


3]開始寫menu.lst ;

我們根據(jù)上面所提到的,可以寫成如下的樣子;

 

default=0 
timeout=5
title FC4
        root (hd0,6)
        kernel /boot/vmlinuz-2.6.11-1.1369_FC4 ro root=LABEL=/
        initrd /boot/initrd-2.6.11-1.1369_FC4.img

 

也可以寫成;

 

default=0 
timeout=5
title FC4
        root (hd0,6)
        kernel /boot/vmlinuz-2.6.11-1.1369_FC4 ro root=/dev/hda7
        initrd /boot/initrd-2.6.11-1.1369_FC4.img

 

注解:上面兩個不同之處在于一指定Linux的根/所在的分區(qū)時,一個是用了文件系統(tǒng)的標簽,另一個沒有用標簽;

2、menu.lst的寫法之二,精簡型;

本寫法主要是把指定/boot所位于的所分區(qū)直接寫入kernel 指令行;這樣就省略了通過root (hd[0-n],y)來指定/boot所位于的分區(qū);


1)第一種情況:/boot和Linux的/根分區(qū)在同一個分區(qū);

有前面的那么多的講解,menu.lst寫法之二就好理解多了;也得分兩種情況,咱們先把/boot并不是獨處一個分區(qū),而是和Linux的根分區(qū)處于同一個分區(qū);我們以 4)menu.lst第一種方法的寫法總結(jié) 的實例為例子;

 

default=0 
timeout=5
title FC4x
        kernel (hd0,6)/boot/vmlinuz-2.6.11-1.1369_FC4 ro root=/dev/hda7
        initrd (hd0,6)/boot/initrd-2.6.11-1.1369_FC4.img

 

注解:

title FC4x 注:自己為這個Linux 起個簡單的名,以title開頭,然后一個空格,后面就自己發(fā)揮吧,F(xiàn)C4或FC4x都行;

kernel 空格 (hd0,6)/boot/vmlinuz-2.6.11-1.1369_FC4 空格 ro 空格 root=/dev/hda7

kernel 這行這樣理解 kernel (boot所在的分區(qū))/boot/內(nèi)核文件件全稱 ro root=Linux根所位于的分區(qū)或標簽

initrd 空格 (hd0,6)/boot/initrd-2.6.11-1.1369_FC4.img
initrd 這行可以這樣理解 initrd (/boot所在的分區(qū))/boot/內(nèi)核文件名全稱


2)第二種情況:/boot獨立一個分區(qū),和Linux的根分區(qū)不是同一個分區(qū);

比如我們查看到df -lh 得到的是

[root@localhost ~]# df -lh
Filesystem            容量  已用 可用 已用% 掛載點
/dev/hda6              200M  120M  80M  60% /boot
/dev/hda7              11G  9.2G  1.2G  90% /

 

我們再進一行查看/etc/fstab 得知;

LABEL=/                 /                       ext3    defaults        1 1
LABEL=/boot             /boot                   ext3    defaults        1 2

 

所以我們應(yīng)該寫成如下的;

 

title FC4x
        kernel (hd0,5)/vmlinuz-2.6.11-1.1369_FC4 ro root=LABEL=/
        initrd (hd0,5)/initrd-2.6.11-1.1369_FC4.img

 

因為Linux的根分區(qū)是/dev/hda7,通過/etc/fstab和df -h的內(nèi)容得知標簽為 LABEL=/的分區(qū)就是/dev/hda7 ,所以有;

 

title FC4x
        kernel (hd0,5)/vmlinuz-2.6.11-1.1369_FC4 ro root=/dev/hda7
        initrd (hd0,5)/initrd-2.6.11-1.1369_FC4.img

 


五、通過GRUB命令行來啟動Linux操作系統(tǒng);

GRUB的命令行才是王道,如果知道怎么用命令行來啟動操作系統(tǒng),那理解menu.lst的寫法也不難;也就是說在開機的時候,不用GRUB的菜單,通過GRUB的命令也是一樣能把操作系統(tǒng)引導(dǎo)起來。

因為menu.lst的內(nèi)容就是GRUB的一個一個的指令集合;是不是Linux這玩意很神奇?

1、為什么需要學(xué)習(xí)GRUB的命令行;

當我們把GRUB的menu.lst寫錯的時候,或者丟掉了menu.lst的時,比如在開機的時候,GRUB會出現(xiàn)grub>類似的命令提示符,這時需要我們用命令行啟動系統(tǒng);當然您可以不用定義GRUB的菜單 ,直接用命令行來啟動系統(tǒng),比如我現(xiàn)在就是,為了寫GRUB的文檔,就把menu.lst 刪除了,直接用命令來啟動系統(tǒng);

2、用命令行來引導(dǎo)Linux操作系統(tǒng)的步驟;

通過命令行來引導(dǎo)操作系統(tǒng)的流程,也沒有什么難的;無非是把指令手工輸入到grub>提示符的后面;在這個過程中,tab鍵的命令補齊功能就顯得很重要了。如果您不知道有哪些命令,可以輸入help;


1)進入GRUB的命令行模式 grub>

如果開機時,GRUB出現(xiàn)的是grub>,說明你沒有/etc/grub/menu.lst ,您需要自己寫一個才會GRUB的菜單,讓我們來選擇進入哪個系統(tǒng)。如果有GRUB的菜單,您可以按Ctrl+c組合鍵進入GRUB的命令行模式,會出現(xiàn)grub> 提示符;

grub>



2)獲取幫助GRUB的 help
 

 

只要您在grub>提示符的后面輸入help 就能得到GRUB所有的命令提示;

 

grub> help
blocklist FILE                         boot
cat FILE                               chainloader [--force] FILE
clear                                  color NORMAL [HIGHLIGHT]
configfile FILE                        device DRIVE DEVICE
displayapm                             displaymem
find FILENAME                          geometry DRIVE [CYLINDER HEAD SECTOR [
halt [--no-apm]                        help [--all] [PATTERN ...]
hide PARTITION                         initrd FILE [ARG ...]
kernel [--no-mem-option] [--type=TYPE] makeactive