Grub命令

GRUB的命令,如果知道怎麼用命令行來啓動操作系統,那理解menu.lst的寫法也不難;也就是說在開機的時候,不用GRUB的菜單,通過GRUB的命令也是一樣能把操作系統引導起來。因爲menu.lst的內容就是GRUB的一個一個的指令集合;是不是Linux這玩意很神奇?

1、爲什麼需要學習GRUB的命令行;

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

2、用命令行來引導Linux操作系統的步驟;通過命令行來引導操作系統的流程,也沒有什麼難的;無非是把指令手工輸入到grub>提示符的後面;在這個過程中,tab鍵的命令補齊功能就顯得很重要了。如果您不知道有哪些命令,可以輸入help;
1)進入GRUB的命令行模式 grub>

如果開機時,GRUB出現的是grub>,說明你沒有/etc/grub/menu.lst ,您需要自己寫一個纔會GRUB的菜單,讓我們來選擇進入哪個系統。如果有GRUB的菜單,您可以按Ctrl+c組合鍵進入GRUB的命令行模式,會出現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
map TO_DRIVE FROM_DRIVE                md5crypt
module FILE [ARG ...]                  modulenounzip FILE [ARG ...]
pager [FLAG]                           partnew PART TYPE START LEN
parttype PART TYPE                     quit
reboot                                 root [DEVICE [HDBIAS]]
rootnoverify [DEVICE [HDBIAS]]         serial [--unit=UNIT] [--port=PORT] [--
setkey [TO_KEY FROM_KEY]               setup [--prefix=DIR] [--stage2=STAGE2_
terminal [--dumb] [--no-echo] [--no-ed terminfo [--name=NAME --cursor-address
testvbe MODE                           unhide PARTITION
uppermem KBYTES                        vbeprobe [MODE]如果需要得到某個指令的幫助,就在 help 後面空一格,然後輸入指令,比如;grub>help kernel

3)cat的用法;cat指令是用來查看文件內容的,有時我們不知道Linux的/boot分區,以及/根分區所在的位置,要查看/etc/fstab的內容來得知,這時,我們就要用到cat (hd[0-n],y)/etc/fstab 來獲得這些內容;注意要學會用tab鍵命令補齊的功能;grub> cat (     按tab 鍵會出來hd0或hd1之類的;
grub> cat (hd0, 注:輸入hd0,然後再按tab鍵;會出來分區之類的;
grub> cat (hd0,6)
Possible partitions are:
  Partition num: 0,  Filesystem type unknown, partition type 0x7
  Partition num: 4,  Filesystem type is fat, partition type 0xb
  Partition num: 5,  Filesystem type is reiserfs, partition type 0x83
  Partition num: 6,  Filesystem type is ext2fs, partition type 0x83
  Partition num: 7,  Filesystem type unknown, partition type 0x83
  Partition num: 8,  Filesystem type is reiserfs, partition type 0x83
  Partition num: 9,  Filesystem type unknown, partition type 0x82

grub> cat (hd0,6)/etc/fstab 注:比如我想查看一下 (hd0,6)/etc/fstab的內容就這樣輸入;

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有的弟兄可能會說,我不知道Linux安裝在了哪個分區。那根據文件系統來判斷一個一個的嘗試總可以吧我;只要能cat出/etc/fstab就能爲以後引導帶來方便;主要查看/etc/fstab中的內容,主要是Linux的/分區及/boot是否是獨立的分區;如果沒有/boot類似的行,證明/boot和Linux的/處於同一個硬盤分區;比如上面的例子中LABEL=/ 這行是極爲重要的;說明Linux系統就安在標籤爲LABEL=/的分區中;如果您的Linux系統/boot和/沒有位於同一個分區,可能cat (hd[a-n],y) 查到的是類似下面的;LABEL=/                 /                       ext3    defaults        1 1
LABEL=/boot             /boot                   ext3    defaults        1 2
4) root (hd[0-n,y) 指令來指定/boot所在的分區;其實這個root (hd[0,n],y)是可以省略的,如果省略了,我們要在kerenl 命令中指定;我們前面已經說過 (hd[0-n],y) 硬盤分區的表示方法的用途;主要是用來指定 /boot所在的分區;比如我們確認/boot和 (hd0,6),所以就可以這樣來輸入root (hd0,6)grub> root (hd0,6)如果發現不對,可以重新來過;沒有什麼大不了的;
5) kernel 指令,用來指定Linux的內核,及/所在的分區;kernel 這個指令可能初學者有點怕,不知道內核在哪個分區,及內核文件名的全稱是什麼。不要忘記tab鍵的命令補齊的應用;

如果我們已經通過root (hd[0-n],y) 指定了/boot所在的分區,語法有兩個:

如果/boot和Linux的/位於同一個分區,應該是下面的一種格式;

kernel /boot/vmlinuz在這裏按tab鍵來補齊,就看到內核全稱了 ro root=/dev/hd[a-z]X

如果/boot有自己獨立的分區,應該是;

kernel /vmlinuz在這裏按tab鍵來補齊,就看到內核全稱了 ro root=/dev/hd[a-z]X在這裏 root=/dev/hd[a-z]X 是Linux 的/根所位於的分區,如果不知道是哪個分區,就用tab出來的來計算,一個一個的嘗試;或用cat (hd[0-n],y)/etc/fstab 中得到Linux的/所在的分區或分區的標籤;grub> kernel /boot/在這裏按tab鍵;這樣就列出/boot中的文件了;
Possible files are: grub initrd-2.6.11-1.1369_FC4.img System.map-2.6.11-1.1369
_FC4 config-2.6.11-1.1369_FC4 vmlinuz-2.6.11-1.1369_FC4 grubBAK memtest86+-1.55
.1 xen-syms xen.gz

grub> kernel /boot/vmlinuz-2.6.11-1.1369_FC4 ro root=LABEL=/  
  [Linux-bzImage, setup=0x1e00, size=0x18e473]註解: root=LABEL=/ 是Linux的/所在的分區的文件系統的標籤;如果您知道Linux的/在哪個具體的分區,用root=/dev/hd[a-z]X來指定也行。比如下面的一行也是可以的;grub> kernel /boot/vmlinuz-2.6.11-1.1369_FC4 ro root=/dev/hda7也可以把/boot所在的分區的指定 root (hd[0-n],y)這行省掉,直接在kernel 中指定/boot所在的分區;所以就在下面的語法;如果是/boot和Linux的根同處一個分區;kernel (hd[0-n],y)/boot/vmlinuz ro root=/dev/hd[a-z]X比如:grub>kernel 如果是/boot和Linux所在的根不在一個分區;則是;kernel (hd[0-n],y)/vmlinuz  ro root=/dev/hd[a-z]X grub> kernel (hd0,6)/boot/vmlinuz-2.6.11-1.1369_FC4 ro root=/dev/hda7
  [Linux-bzImage, setup=0x1e00, size=0x18e473]或下面的輸入,以cat 出/etc/fstab內容爲準;grub> kernel (hd0,6)/boot/vmlinuz-2.6.11-1.1369_FC4 ro root=LABEL=/
  [Linux-bzImage, setup=0x1e00, size=0x18e473]
6)initrd 命令行來指定initrd文件;grub> initrd /boot/initrd在這裏tab 來補齊;
grub> initrd /boot/initrd-2.6.11-1.1369_FC4.img
  [Linux-initrd @ 0x2e1000, 0x10e685 bytes]如果/boot是獨立的一個分區,應該是如下樣子的語法;比如下面的;grub> initrd /initrd在這裏tab 來補齊;
grub> initrd /initrd-2.6.11-1.1369_FC4.img
  [Linux-initrd @ 0x2e1000, 0x10e685 bytes]

7)boot 引導系統;grub>boot 前面的幾個步驟都弄好 。就進入引導;嘗試一下就知道了。。

8)引導Linux系統實例全程回放;實例:/boot和Linux的/處於同一個硬盤分區;grub> cat (hd0,6)/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

grub> root (hd0,6)
Filesystem type is ext2fs, partition type 0x83

grub> kernel /boot/在這裏按tab補齊,全列出/boot所有的文件;
Possible files are: grub initrd-2.6.11-1.1369_FC4.img System.map-2.6.11-1.1369_FC4 config-2.6.11-1.1369_FC4 vmlinuz-2.6.11-1.1369_FC4  
memtest86+-1.55.1 xen-syms xen.gz

grub> kernel /boot/vmlinuz-2.6.11-1.1369_FC4 ro root=/dev/hda7  注:輸入
  [Linux-bzImage, setup=0x1e00, size=0x18e473]

grub> initrd /boot/在這裏按tab補齊
Possible files are: grub initrd-2.6.11-1.1369_FC4.img System.map-2.6.11-1.1369_FC4 config-2.6.11-1.1369_FC4 vmlinuz-2.6.11-1.1369_FC4  
memtest86+-1.55.1 xen-syms xen.gz

grub> initrd /boot/initrd-2.6.11-1.1369_FC4.img 注;輸入intrd文件名的全名;
  [Linux-initrd @ 0x2e1000, 0x10e685 bytes]

grub> boot我們指定Linux的根時,可以用cat出來的fstab的內容中Linux的/分區文件系統標籤來替代;也就是kernel 那行中 root=/dev/hd[a-z]X; grub> cat (hd0,6)/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

grub> root (hd0,6)
Filesystem type is ext2fs, partition type 0x83

grub> kernel /boot/在這裏按tab補齊,全列出/boot所有的文件;
Possible files are: grub initrd-2.6.11-1.1369_FC4.img System.map-2.6.11-1.1369_FC4 config-2.6.11-1.1369_FC4 vmlinuz-2.6.11-1.1369_FC4  
memtest86+-1.55.1 xen-syms xen.gz

grub> kernel /boot/vmlinuz-2.6.11-1.1369_FC4 ro root=LABEL=/  
  [Linux-bzImage, setup=0x1e00, size=0x18e473]

grub> initrd /boot/在這裏按tab補齊
Possible files are: grub initrd-2.6.11-1.1369_FC4.img System.map-2.6.11-1.1369_FC4 config-2.6.11-1.1369_FC4 vmlinuz-2.6.11-1.1369_FC4 grubBAK
memtest86+-1.55.1 xen-syms xen.gz

grub> initrd /boot/initrd-2.6.11-1.1369_FC4.img 注;輸入intrd文件名的全名;
  [Linux-initrd @ 0x2e1000, 0x10e685 bytes]

grub> boot如果是/boot和Linux的根分區不在同一個分區,要把kernel和initrd 指令中的/boot去掉,也就是/vmlinuzMMMMMM 或 /initrdNNNN也可以不用root (hd[0-n]來指定/boot所在分區,要在kernel 和initrd 中指定;比如Linux的/根所位於的分區和/boot所位於的分區都是(hd0,6),並且我們cat出來的/etc/fstab是Linux的/根分區的文件系統的標籤爲LABEL=/,引導操作系統的例子如下;grub>kernel (hd0,6)/boot/vmlinuz-2.6.11-1.1369_FC4 ro root=LABEL=/
grub>initrd (hd0,6)/boot/initrd-2.6.11-1.1369_FC4.img
grub>boot 或grub>kernel (hd0,6)/boot/vmlinuz-2.6.11-1.1369_FC4 ro root=/dev/hda7
grub>initrd (hd0,6)/boot/initrd-2.6.11-1.1369_FC4.img
grub>boot 如果/boot位於 /dev/hda6,也就是(hd0,5),Linux的根/位於分區/dev/hda7,並且我們cat 出來的/etc/fstab 中/分區的標籤爲 LABEL=/。下面的兩種方法都可以引導;grub>kernel (hd0,5)/vmlinuz-2.6.11-1.1369_FC4 ro root=LABEL=/
grub>initrd (hd0,5)/initrd-2.6.11-1.1369_FC4.img
grub>boot 或grub>kernel (hd0,5)/vmlinuz-2.6.11-1.1369_FC4 ro root=/dev/hda7
grub>initrd (hd0,5)/initrd-2.6.11-1.1369_FC4.img
grub>boot





系統引導管理器GRUB--深入學習
來源: ChinaUnix博客  日期: 2007.07.07 11:27 (共有0條評論) 我要評論

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

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

GRUB不但有Linux版本,也有Windows版本;現我們一一介紹;
如前面所說,目前在在Unix類的操作系統中,大多是都有GRUB;GRUB幾乎能引導所有X86架構的操作系統;功能之強,使用簡單是GRUB最大的賣點;由於Windows 操作系統的先入爲主的優勢,使得大家對Windows的NTLOADER瞭解的比較多,而對開源社區的GRUB顯得有點寞生,由此而帶來使用上的“心理恐懼”;究其初學者對GRUB“恐懼”的主要原因還是對GRUB沒有太多的瞭解和深入;無論是WINGRUB還是Linux版本的GRUB,最方便的還是對GRUB命令行的操作;一談到命令行(Command)的操作,可能初學者對此恐懼;其實沒有什麼難的,象北南這樣低級的寫手,還能操作得起來,您也應該能行;

2、GRUB的Windows版本WINGRUB;

請參考:
《以WINGRUB 引導安裝Fedora 4.0 爲例,詳述用WINGRUB來引導Linux的安裝》

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

其實對於Linux的GRUB,幾乎所有的Linux主流發行版都有打包,如果您安裝了Linux,並且在開機後出現GRUB字樣的,證明您已經安裝了GRUB;而無需再次安裝;Linux的GRUB軟件包安裝部份並不是本文的重點;
如果您的Linux系統沒有安裝GRUB,或者採用的是LILO,而您想用GRUB,可以用系統安裝盤自帶GRUB軟件包來安裝,或者到相關發行版本的軟件倉庫下載後安裝;
GRUB 的Linux版本目前在各大發行版中都有打包;比如Fedora/Redhat/Centos/Mandrive/Mandriva/SuSE等以RPM包管理機制的系統,可以通過如下的命令來安裝;
請參考
《Fedora / Redhat 軟件包管理指南》

[root@localhost ~]# rpm -ivh grub*.rpm
如果是Slackware 您可以用如下的辦法來安裝;
[root@localhost ~]# installpkg grub*.tgz
其它的發行版本請用其自己特色的軟件包管理工具來安裝;
當然您也可以通過源碼包,在任何Linux的發行版上安裝;至於源碼包的安裝方法;
請參考:
《如何編譯安裝源碼包軟件》

[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
如果您不能找到這兩個命令,可能您的可執行程序的路徑沒有設置;
請參考:
《設置可執行程序路徑》
,當然您可以用絕對路徑;比如下面的;
[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中字樣的,這些路徑下都是可執行程序;sbin 是超級權限用戶才能使用的管理命令;要使用這些命令一般的情況下得切換到root用戶下才能使用;比如
[beinan@localhost ~]$ su - 注:切換到root用戶,並且切換到其家目錄;
Password:
[root@localhost ~]#/sbin/grub 注:用絕對路徑來運行grub命令;

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


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

grub-install 命令有何用呢?其實就是把我們前面已經安裝的軟件包中的一些文件複製到 /boot/grub中;對於新安裝GRUB軟件包後,也是一個必經的過程;我們前面所說的GRUB軟件包的安裝;而現在我們說的是GRUB配置的過程中的安裝;雖然在洋文中都是install ,但表達的意思是不一樣的;
我們首先要運行 fdisk -l 來確認到底是硬盤的標識;
這個過程主要是確認硬盤的標識是哪個調備,到底是/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 出現有/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 出現的有/dev/hdb呢,那就如下運行;
[root@localhost ~]# grub-install /dev/hdb
如果既有/dev/hda和/dev/hdb 就安裝到/dev/hda中;
[root@localhost ~]# grub-install /dev/hda
值得注意的是如果您有一個/boot分區,應該用如下的辦法來安裝;
[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分區是放在第一塊硬盤還是第二塊硬盤上了,以實際情況爲準;

2、設定GRUB的/boot分區並寫入MBR;;

在Linux中,GRUB軟件包的安裝,及在配置過程中安裝grub到 /boot中還是不夠的, 還要把GRUB,寫入MBR才行;有時我們重新安裝了Windows,Windows會把MBR 重寫,這樣GRUB就消失了;如果您出現這樣的情況,就要進行這個過程;
[root@localhost ~]# grub
會出現grub>提示符,這是grub命令行模式 ,如果能在開機中出現提示符,沒有引導不起來的系統,除非您的系統破壞的極爲嚴重。如果僅僅是GRUB被破壞了,GRUB命令行是能讓操作系統引導起來的;
接着看例子,我們要找到 /boot/grub/stage1的,在grub>後面輸入;
grub> find /boot/grub/stage1
(hd0,6)
(fd0) 注:這個是軟驅;現在很少用軟驅了,如果您有這方面的需要,自己看GRUB的DOC吧;
註解:
(hd0,6) 這是/boot所在的分區;不要誤解爲是Linux 的/所在的分區,這是值得注意的;
(fd0) 注:這個是軟驅;現在很少用軟驅了,如果您有這方面的需要,自己看GRUB的DOC吧;
grub>root (hd0,6) 注:這是/boot所在的分區;
grub>setup (hd0) 注:把GRUB寫到MBR上;
註解:
上面這步驟是根據 find /boot/stage1而來的,仔細看一下就明白了;現在我們一般安裝很少會把/boot分區列爲一個單獨的分區;不過有的弟兄可能也喜歡這麼做;所以還是有必要說一下爲好;

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

對於GRUB來說,如果沒有配置menu.lst,無論是Linux版本的GRUB,還是WINGRUB,都會有命令行可用,通過命令行是一樣能把操作系統引導起來的;有些弟兄總以爲menu.lst 配置錯了, 或者在機器啓動後出現grub>命令行模式就要重新安裝系統,其實根本沒有這個必要;只要學會GRUB的命令行的用法,根本沒有必要重裝系統;
menu.lst 位於/boot/grub目錄中,也就是/boot/grub/menu.lst 文件;您可以用vi或您喜歡的編輯器來編輯他;如果您不會用vi,還是去學習一下吧;簡單的用法怎麼也得會,對不對?畢竟這個文檔不是講vi的用法的;
有的弟兄會說,我沒有menu.lst怎麼辦?那就創建一個;用下面的命令;
[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
現在我們來寫GRUB的menu.lst了,因爲/boot/grub/grub.conf是 /boot/grub/menu.lst的鏈接文件,改哪個都行。鏈接文件相當於Windows的快捷方式,這樣可能能更好的理解;

1、menu.lst的寫法之一;

首先我們看一下我的Fedora 4.0 中的/boot/grub/menu.lst 的內容;
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 是默認啓動哪個系統,從0開始;每個操作系統的啓動的定義都從title開始的,第一個title 在GRUB的啓動菜單上顯示爲0,第二個啓動爲1,以此類推;
timeout=5
注:表示在開機後,GRUB畫面出現幾秒後開始以默認啓動;如果在啓動時,移動上下鍵,則解除這一規則;
#splashimage=(hd0,6)/boot/grub/splash.xpm.gz 注:GRUB的背景畫面,這個是可選項;我不喜歡GRUB的背景畫面,所以加#號注掉,也可以刪除;
hiddenmenu
註解:隱藏GRUB的啓動菜單,這項也是可選的,也可以用#號注掉;
一般的情況下對Linux操作系統的啓動,一般要包括四行;title 行;root行;kernel 行;initrd 行;

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

title XXXXX 注:title 後面加一個空格,title 是小寫的,後面可以自己定義;比如FC4,自己定義一個名字就行;
root (hd[0-n],y) ,在本例中,我們看到的是root (hd0,6) ,root (hd[0-n],y)表示的是/boot所在的分區;有時我們安裝Linux的時候,大多是不設置/boot的,這時/boot和/所在的同一個分區; 這個root (hd[0-n],y)很重要,因爲/boot目錄中雖然有grub目錄,最爲重要的是還有kernel 和initrd文件,這是Linux能啓動起來最爲重要東西;
有的弟兄會問,root (hd[0-n],y)是怎麼來的?
請參考:
《在Linux系統中存儲設備的兩種表示方法》

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

kernel 一行,是通指定內核及Linux的/分區所在位置;
比如例子中是;
kernel /boot/vmlinuz-2.6.11-1.1369_FC4 ro root=LABEL=/
在這裏以kernel 起始,指定Linux的內核的文件所處的絕對路徑;因爲內核是處在/boot目錄中的, 如果/boot是獨立的一個分區,則需要把boot省略;如果/boot是獨立的分區,這行要寫成:
kernel /vmlinuz-2.6.11-1.1369_FC4 ro root=LABEL=/
因爲/boot所處的分區已經在title 下一行root (hd[0-n],y)中指定了,所以就無需要再指明內核處在哪個分區了;另外Linux系統的硬盤分區的掛載配置文件在/etc/fstab ,原理是通過 mount /dev/hd[a-z]X /boot 來進行的;您可以對照着來理解;
ro 表示只讀; root=LABEL=/ 來表示Linux的根所處的分區。LABEL=/ 這是硬盤分區格式化爲相應文件系統後所加的標籤;如果您不瞭解什麼是標籤,也可以直接以/dev/hd[a-z]X 或者/dev/sd[a-z]X來表示;就看您的Linux是根分區是在哪個分區了。比如我的是在/dev/hda7 , 那這裏就可以寫成root=/dev/hda7;
如果查看系統運行所掛載的分區,請用 df -lh 來查看,就能明白是不是/boot是獨立的分區,或者查看/etc/fstab也能知道;
[root@localhost ~]# df -lh
Filesystem 容量 已用 可用 已用% 掛載點
/dev/hda7 11G 9.2G 1.2G 90% /
/dev/shm 236M 0 236M 0% /dev/shm
在這個例子中,我們可以發現 /boot並沒有出現只有/dev/hda7,這表示/boot並不是獨立的一個分區;所有的東西都包含在/中;於是我們在/boot中查看內核版本;
[root@localhost ~]# ls /boot/vmlinuz*
/boot/vmlinuz-2.6.11-1.1369_FC4 注:看到內核vmlinuz所處的目錄;
於是我們就可以這樣kernel 這行了;
kernel /boot/vmlinuz-2.6.11-1.1369_FC4 ro root=/dev/hda7

3)initrd 命令行的寫法;

如果是/boot獨立一個分區,initrd 一行要把/boot中省略;如果/boot不是處於一個分區,而是和Linux的/分區處於同一分區,不應該省略;
比如我們在2)中用的例子;現在拿到這裏,我們應該首先查看 /boot中的initrd的文件名到底是什麼;
[root@localhost ~]# ls /boot/initrd*
/boot/initrd-2.6.11-1.1369_FC4.img
如果是通過df -lh 得知或查看/etc/fstab 也行, 得知/boot是獨立的分區;這時initrd 應該寫成;
initrd /initrd-2.6.11-1.1369_FC4.img
如果是 /boot不是獨處一個分區,而是在/同一處一個分區, 則要寫成;
initrd /boot/initrd-2.6.11-1.1369_FC4.img

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

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

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

我們過fdisk -l ;df -lh ; more /etc/fstab 來確認/boot所在的分區,及Linux的根分區所在位置;
比如我們確認/boot和Linux的/分區同處一個分區;
[root@localhost ~]# df -lh
Filesystem 容量 已用 可用 已用% 掛載點
/dev/hda7 11G 9.2G 1.2G 90% /
/dev/shm 236M 0 236M 0% /dev/shm
然後我們/etc/fstab 中,查看/分所在的分區或分區標籤是什麼;
[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
經過上面的df -lh 和more /etc/fstab 的對照中得知,/boot並是獨處一個分區,而是和/在同一個分區;這個Linux系統安裝在/dev/hda7上,文件系統(此分區)的標籤爲LABEL=/ ,/boot也是處於/dev/hda7 ,/dev/hda7也可以說是 root (hd0,6);

2]查看內核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 ;

我們根據上面所提到的,可以寫成如下的樣子;
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的根/所在的分區時,一個是用了文件系統的標籤,另一個沒有用標籤;

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

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

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

有前面的那麼多的講解,menu.lst寫法之二就好理解多了;也得分兩種情況,咱們先把/boot並不是獨處一個分區,而是和Linux的根分區處於同一個分區;我們以 4)menu.lst第一種方法的寫法總結 的實例爲例子;
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開頭,然後一個空格,後面就自己發揮吧,FC4或FC4x都行;
kernel 空格 (hd0,6)/boot/vmlinuz-2.6.11-1.1369_FC4 空格 ro 空格 root=/dev/hda7
kernel 這行這樣理解 kernel (boot所在的分區)/boot/內核文件件全稱 ro root=Linux根所位於的分區或標籤
initrd 空格 (hd0,6)/boot/initrd-2.6.11-1.1369_FC4.img
initrd 這行可以這樣理解 initrd (/boot所在的分區)/boot/內核文件名全稱

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

比如我們查看到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
所以我們應該寫成如下的;
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的根分區是/dev/hda7,通過/etc/fstab和df -h的內容得知標籤爲 LABEL=/的分區就是/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操作系統;

GRUB的命令行纔是王道,如果知道怎麼用命令行來啓動操作系統,那理解menu.lst的寫法也不難;也就是說在開機的時候,不用GRUB的菜單,通過GRUB的命令也是一樣能把操作系統引導起來。
因爲menu.lst的內容就是GRUB的一個一個的指令集合;是不是Linux這玩意很神奇?

六、通過GRUB引導Windows操作系統;


1、通過編輯 menu.lst 來引導Windows 系統;

如果您的Windows所處於的分區在(hd0,0),可以在menu.lst 加如下的一段就能引導起來了;
title WinXp
       rootnoverify (hd0,0)
       chainloader +1
如果您的機器有兩塊硬盤,而Windows 位於第二個硬盤的第一個分區,也就是(hd1,0)
您可以用grub的map來指令來操作把兩塊硬盤的序列對調,這樣就不用在BIOS中設置了;在menu.lst中加如下的內容,比如下面的;
title WinXp
       map (hd0) (hd1)
       map (hd1) (hd0)
       rootnoverify (hd0,0)
       chainloader +1
makeactive
如果Windows的分區不位於硬盤的第一個分區怎麼辦呢?比如在(hd0,2);
這個也好辦吧,把rootnoverify 這行的(hd0,0)改爲 (hd0,2)
title WinXp
       rootnoverify (hd0,2)
       chainloader +1
makeactive
如果Windows的在第二個硬盤的某個分區,比如說是位於(hd1,2),則要用到map指令;
title WinXp
       map (hd0) (hd1)
       map (hd1) (hd0)
       rootnoverify (hd1,2)
       chainloader +1
makeactive
如果有多個Windows 系統,怎麼才能引導出來呢?應該用hide 和unhide指令操作;比如我們安裝了兩個Windows ,一個是位於(hd0,0)的windows 98 ,另一個是安裝的是位於(hd0,1)的WindowsXP;這時我們就要用到hide指令了;
title Win98
        unhide (hd0,0)
        hide (hd0,1)
       rootnoverify (hd0,0)
       chainloader +1
makeactive
title WinXP
       unhide (hd0,1)
       hide (hd0,0)
       rootnoverify (hd0,1)
       chainloader +1
makeactive

2、通過GRUB指令來引導Windows ;

其實我們會寫menu.lst了,在menu.lst中的除了title外,都是一條條指令;如果我們啓動Windows ,只是輸入指令就行了;
比如 Windows的分區在 (hd0,0),我們在開機後,按ctrl+c ,進入GRUB的命令模式;就可以用下面的
grub> rootnoverify (hd0,0)
grub> chainloader +1
grub> boot
其它同理... ...

七、GRUB丟失或損壞的應對策略;

如果GRUB是Linux版本纔出會這樣的問題;WINGRUB可以不寫在MBR上;所以不會出現這樣的問題。WINGRUB用起來比較簡單。menu.lst 和命令行的用法和Linux版本的GRUB是一樣的;

1、由於重新安裝Windows或其它未知原因而導致GRUB的丟失;

您可以通過系統安裝盤、livecd進入修復模式;
請參考:
《Linux 系統的單用戶模式、修復模式、跨控制檯登錄在系統修復中的運用》
首先:您根據前面所說grub-install來安裝GRUB到/boot所在的分區;要仔細看文檔,/boot是不是處於一個獨立的分區是重要的,執行的命令也不同;
其次:要執行grub ,然後通過 root (hd[0-n],y)來指定/boot所位於的分區,然後接着執行 setup (hd0),這樣就寫入MBR了,比如下面的例子;
grub>root (hd0,6)
grub>setup (hd0)
grub>quit
重新引導就會再次出現MBR的菜單了或命令行的提示符了;

2、如果出現GRUB提示符,而不出現GRUB的菜單,如何引導系統;

存在的問題可能是/boot/grub/menu.lst丟失,要自己寫一個才行;您可以用命令行來啓動系統,進入系統後寫一寫menu.lst就OK了。前面已經談過了;
寫好後還要建一個grub.conf的鏈接,如下:
[root@localhost ~]# cd /boot/grub
[root@localhost grub]# ln -s menu.lst grub.conf



Win PE Ubuntu live 雙啓動U盤的製作(Ubuntu U盤安裝詳解)
Ubuntu的更新比較頻繁,每次更新,都得刻一張盤,太麻煩了,所以想到將其放進U盤安裝,既不用刻盤,攜帶也比較方便,和PE合盤製成雙啓動,可以實現以下功能
1,啓動PE後,可以在PE中安裝,XP VistaWindows 7
2,既可以從U盤啓動到PE也可以從U盤至Live Ubuntu,對系統作簡單的維護
3,可以從U盤安裝Ubuntu
以下爲製作步驟大綱
1,將U盤設置爲可引導
2,將PE放進U盤交使之能引導至PE
3,將Ubuntu放進U盤,並使之能引導Live Ubuntu
需要的軟件
1,grub4dos
2,grubinst
3,Winrar
4,PE鏡像
5,ubuntup安裝鏡像
PE鏡像請自行在論壇下載
Ubuntu鏡像請自行到官網下載
下面開始製作
一,將U盤置爲可引導
我使用的是Netac的U盤,帶有讀寫保護開關,維護機子時比較方便,避免感染病毒
U盤是USB-FDD模式,個人感覺這個模式兼容性不好,所以使用了官網上的格式化工具,將其格式爲HDD模式
如果使用其他品牌的U盤,可以下載相應的量產工具量產成HDD模式
已經格成HDD模式,在磁盤管理器中顯示的是本地磁盤
接下來,在系統中將其格式化成FAT32,不要格成NTFS,否則Linux中讀寫有麻煩
然後用grubinst,將MBR寫入U盤
打開grubinst目錄執行grubinst_gui.exe
在這裏一定要當心。
一定要注意磁盤不要選錯了,寫進硬盤就麻煩了
點擊安裝
ok寫入成功
然後將grub4dos解壓,將其中的grldr和 menu.lst 兩個文件複製到U盤根目錄下
OK,第一步就完成了,現在U盤已經可以引導到GRUB4DOS了
第二步將PE做進U盤中
這裏用的是本論壇 Lrbin50版主的PE,在此表示感謝
用winrar將PE鏡像打開
將圖中紅框中的文件複製到U盤根目錄
然後用記事本打U盤根目錄中的menu.lst
將內容全部清空,然後寫入如下代碼
timeout 15
find --set-root /grldr
title Winpe
chainloader /AXPE/SETUPLDR.BIN
複製代碼
保存,退出
OK,現在U盤可以啓動PE
接下來把UBUNTU 9.04和PE合盤,做成雙啓動
在官網上把9.04下載回來
用WINRAR把鏡像打開
打開casper目錄
將initrd.gz和vmlinuz兩個文件複製到U盤根目錄下
再將ubuntu 9.04的ISO鏡像文件複製到U盤根目錄下
複製完後的U盤下應該有這些文件
再用記事本打開menu.lst
在剛纔編輯的代碼下再加如下代碼
timeout 30
find --set-root /grldr
title Winpe
chainloader /AXPE/SETUPLDR.BIN
title Ubuntu 9.04 Live USB
kernel /vmlinuz boot=casper iso-scan/filename=/ubuntu-9.04-desktop-i386.iso quiet splash ro locale=zh_CN.UTF-8
initrd /initrd.gz
boot 複製代碼
保存退出
現在雙啓動U盤就做好了
重啓電腦,在開機啓動菜單中選擇U盤
進入gurb啓動菜單
選擇啓動pe
啓動進PE了
現在將電腦重啓,選擇U盤啓動後在GRUB菜單選擇UBUNTU
選擇UBUNTU 9.04
好了,現在雙啓動U盤就製作完畢了
可以啓動進PE,也可以啓動進UBUNTU live中,進行簡單的維護
U盤安裝XP VISTA可以在PE中進行
如果要在U盤中安裝ubuntu
在LIVE ubuntu桌面上選擇"安裝"
然後就和光盤安裝一模一樣的 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章