如是觀齋


此心本真如,妄想始蔽覆,顛倒無明,長淪生死,猶盲人夜行,永不見日。業相既起,境界為緣,業起緣生,重重束縛,何有自在?
須知體即法身,相即般若,用即解脫,若止觀則成定慧,定慧以明心,德相圓矣!

2007年10月24日 星期三

GNU GRUB及GRUB4DOS參考資料匯總

GNU GRUB及GRUB4DOS參考資料匯總(不斷完善中...)

整理者:Climbing(xclimbing@msn.com)
整理日期:2007.02.14

這裏引用的很多資料都來自於互聯網,我只是進行了適當的翻譯和整理,版權歸原網站或者原作者所有。

基本上,看完這裏匯總的資料,你已經對GRUB及GRUB4DOS有了基本的瞭解(包括使用),至於高級的用法要靠你自己去努力和創造了。

1. GNU GRUB

資源來源於GNU GRUB官方網站:http://www.gnu.org/software/grub

1.1 Introduction(GNU GRUB簡介)

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.

GNU GRUB是一個遵從Multiboot(多重啟動)規範的啟動管理程式。 GRUB是“ GRand Unified Bootloader(強大標準的啟動管理程式)”的縮寫,最早由Erich Stefan Boleyn設計並實現。

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).

一般來說,啟動管理程式是電腦啟動時第一個運行的軟體,它的主要作用是載入作業系統的內核並將控制權交給它,然後作業系統的內核再對作業系統的其他部分進行初始化操作。

1.2 GRUB 2 and GRUB Legacy

Currently under development, GRUB 2, has replaced what was formerly known as GRUB (i.e. version 0.9x), which has, in turn, become GRUB Legacy.

GRUB 2是GRUB的當前開發版本,它取代了原來的GRUB(例如0.9x版),這樣,原來的版本就叫作GRUB Legacy。

GRUB 2 aims at merging sources from PUPA in order to create the next generation of GNU GRUB.

GRUB 2的主要目標是融合PUPA(譯者注:PUPA是什麼東東,我也不甚了了,應該是新一代啟動管理器的研究專案)的源代碼以產生下一代的GNU GRUB。

GRUB Legacy is no longer being developed. For the differences between GRUB Legacy and GRUB 2, please visit their respective pages.
GRUB Legacy已經停止開發。兩者的不同請參考二者對應的網頁內容。

附件:
1) 由sysoft論壇的bean所寫的GRUB 2中文簡介:http://www.znpc.net/bbs/viewthread.php?tid=2269

2) 網友所寫的GRUB使用說明“GRUB三步通”
原始鏈結:http://www.cc.ac.cn/~peace/articles/grub.txt
Gandalf美化版:http://www.znpc.net/bbs/viewthread.php?tid=873


2. GRUB for DOS - Bridging DOS/Windows to Unix/Linux(GRUB for DOS,連接DOS/Windows和Unix/Linux的橋樑)

資料來源於GRUB4DOS的官方Wiki:http://grub4dos.jot.com/WikiHome

GRUB for DOS is a build of the GNU GRUB boot manager for DOS, and can be run under real mode DOS. It also has many new features. For example, it can be booted through BOOT.INI of Windows (grldr) and kexec of Linux (grub.exe). The disk emulation feature is another enhancement over GNU GRUB, and can be used to run legacy DOS/Windows9x systems with floppy or hard disk images.

GRUB for DOS(注:一般簡寫為GRUB4DOS)是GNU GRUB的DOS編譯版本(譯者注:準確的說,GRUB4DOS是一個基於GNU GRUB Legacy的二次開發版本),它可以運行於實模式的DOS環境下,而且它還具有很多新功能,例如:它可以通過Windows(NT)的boot.ini((使用grldr檔)或者Linux的kexec(使用grub.exe檔)來啟動。另外,相對於GNU GRUB來說,它的磁片仿真功能是另一個重大改進,通過這個功能,可以從軟碟或者硬碟映射檔中啟動傳統的DOS/Windows9x系統。(譯者注:GRUB4DOS實際上處於很活躍的開發狀態,它的功能是不斷增強的,詳細資訊請參考它的readme.txt或者ChangeLog.txt)。

GRUB for DOS is free and open-source software, released under the GNU General Public License.

GRUB4DOS是免費的並且開放源代碼的軟體,遵從GNU General Public License協議。

2.1 You can boot the GRUB4DOS boot-loader/boot-manager in different manners:
GRUB4DOS的各種啟動方式:

(1) Run GRUB.EXE at the DOS prompt or in AUTOEXEC.BAT

在DOS命令行或者AUTOEXEC.BAT中直接運行GRUB.EXE文件。

(2) In CONFIG.SYS of DOS/Windows9x, use DEVICE=GRUB.EXE or INSTALL=GRUB.EXE or SHELL=GRUB.EXE

在DOS/Windows9x的CONFIG.SYS中使用下列任一方式:
DEVICE=GRUB.EXE
INSTALL=GRUB.EXE
SHELL=GRUB.EXE

(3) In BOOT.INI of Windows NT/2K/XP, use C:\GRLDR="GRUB" (there should be a backslash between C: and GRLDR)

在Windows NT系列作業系統(NT/2K/XP/2003)的boot.ini中增加形如下面的一項:
c:\grldr="GRUB4DOS"

(注:前提是將grldr放到C:盤根目錄下。)

(4) Under Linux, use "kexec -l grub.exe" and then "kexec -e"

在Linux下:
# kexec -l grub.exe
# kexec -e

(5) In syslinux.cfg, use "kernel grub.exe"

使用syslinux,在syslinux.cfg中使用:
kernel grub.exe

(6) Under GNU GRUB, use "kernel (DEVICE)/PATH/grub.exe"

在GNU GRUB中使用:
kernel (DEVICE)/PATH/grub.exe

例如:
kernel (hd0,4)/boot/grub/grub.exe

(7) In lilo.conf, use "image=/boot/grub.exe"

使用lilo,在lilo.conf中使用類似下面的形式:
image=/boot/grub.exe

All above methods won't touch the MBR nor the boot area of any partition.
上面的這些啟動方式都不會改變硬碟的主引導記錄(MBR)或者分區的引導磁區。

(8) Boot from MBR(or floppy) by installing boot sectors onto it with the DOS/LINUX utility bootlace.com.

通過bootlace.com(可以運行於DOS/Linux)將GRUB4DOS的引導磁區安裝到硬碟的MBR(或者軟碟引導區)啟動。

譯者注:現在可以使用Bean編寫的grubinst.exe在Windows下將GRUB4DOS的引導磁區安裝到MBR或者軟碟上(包括映射檔)。

2.2 When GRUB4DOS gets running, you can boot other OSes:
啟動GRUB4DOS後,可以通過它啟動其他的作業系統:

(1) Boot Linux kernel with "kernel (DEVICE)/PATH/vmlinuz"

啟動Linux的內核,方式:kernel (DEVICE)/PATH/vmlinuz。

(2) Boot MS-DOS7+ kernel with "chainloader (DEVICE)/io.sys"

啟動 MS-DOS7+的內核,方式:chainloader (DEVICE)/io.sys

(3) Boot FreeDOS kernel with "chainloader (DEVICE)/kernel.sys"

啟動FreeDOS的內核,方式:chainloader (DEVICE)/kernel.sys

(4) Boot NTLDR of Windows NT/2K/XP with "chainloader (DEVICE)/ntldr"

啟動Windows NT的NTLDR,方式:chainloader (DEVICE)/ntldr

(5) Boot CMLDR of Windows NT/2K/XP with "chainloader (DEVICE)/cmldr"

啟動Windows NT的恢復控制臺的CMLDR,方式:chainloader (DEVICE)/cmldr

注:使用類似的方式可以啟動NT的setupldr.bin。

(6) Boot other OSes with "chainloader (DEVICE)+1"

使用chainloader (DEVICE)+1的方式啟動其他作業系統。

注:主要用來引導對應設備的引導磁區(MBR),例如硬碟MBR、光碟、軟碟、主分區引導磁區等。

(7) Boot DOS/Windows9x disk image files with the memdrive feature.

通過磁片仿真(內存檔)從磁片映射檔中啟動DOS/Windows9x。

(8) Boot Smart Boot Manager with the memdrive feature(SBM can boot CD-ROMs).

啟動“Smart Boot Manager(SBM)”進而通過它從光碟啟動。

注:GRUB4DOS 0.4.2中已經內置了從光碟啟動的功能。

README.txt has more details.(更詳細的介紹請參考readme.txt)。


2.3 Useful Links (有用的鏈結)

Here are some useful resources about GRUB for DOS and WINGRUB.
下面是一些有關GRUB4DOS和WINGRUB的有用的鏈結:

GNU GRUB: The homepage of the original GRUB.GNU GRUB的官方網站。
grub4dos.sf.net:This is the project home page at http://sourceforge.net.
http://sarovar.org/projects/grub4dos: This is the project home page at http://sarovar.org/
Original GRUB for DOS homepage(最早的GRUB4DOS主頁,已失效)
http://grub4dos.freespaces.com/
http://freshmeat.net/projects/grub4dos/
http://marc.herbert.free.fr/linux/win2linstall.html
GRUB for DOS scratchpad (in Chinese)
United DOS Forum (DOS聯盟論壇啟動盤室)
Sysoft Forum (in Chinese)(SYSOFT時空論壇)


2.4 Other Download Sites
其他下載站點:

[url]]http://sarovar.org/projects/grub4dos/[/url]

http://grub4dos.sourceforge.net/

http://grub4dos.freespaces.com/

GRUB for DOS scratchpad(in Chinese)

2.5 Other Resources(其他資源)

Ralf Brown's Interrupt List: It's cool.http://www.ctyme.com/rbrown.htm
A Disk Editor View of the NTFS Boot Sector and "Bootstrap Code" http://www.therdcom.com/asm/mbr/NTFSbrHexEd.htm
The Second Extended File System(Internal Layout) http://www.nongnu.org/ext2-doc/ext2.html
OSD: PC bootstrap http://my.execpc.com/CE/AC/geezer/osd/boot/
eXtended Memory Specification: http://freedos.sourceforge.net/freedos/news/press/1991-xms30.html
High-res high-speed VESA tutorial http://www.monstersoft.com/tutorial1/
BIOS Data Area http://www.bioscentral.com/misc/bda.htm
Hardware and Software Documentation http://www.o3one.org/hwdocs.html


2.6 Screen shot showing the new features (GRUB4DOS新功能展示螢幕截圖)



對應的menu.lst文件(注:取自grub4dos 0.4.2下載包):
複製內容到剪貼板
代碼:
# This is a sample menu.lst file. You should make some changes to it.
# The old install method of booting via the stage-files has been removed.
# Please install GRLDR boot strap code to MBR with the bootlace.com
# utility under DOS/Win9x or Linux.

color black/cyan yellow/cyan
timeout 30
default /default

title find and load NTLDR of Windows NT/2K/XP
fallback 1
find --set-root /ntldr
chainloader /ntldr
savedefault --wait=2

title find and load CMLDR of Windows NT/2K/XP
fallback 2
find --set-root /cmldr
chainloader /cmldr
savedefault --wait=2

title find and load IO.SYS of Windows 9x/Me
fallback 3
find --set-root /io.sys
chainloader /io.sys
savedefault --wait=2

title find and boot Mandriva with menu.lst already installed
fallback 4
find --set-root /etc/mandriva-release
savedefault --wait=2
configfile /boot/grub/menu.lst

title find and boot Linux with menu.lst already installed
fallback 5
find --set-root /sbin/init
savedefault --wait=2
configfile /boot/grub/menu.lst

title commandline
savedefault --wait=2
commandline

title floppy (fd0)
chainloader (fd0)+1
rootnoverify (fd0)
savedefault --wait=2

title back to dos
savedefault --wait=2
quit

title reboot
savedefault --wait=2
reboot

title halt
savedefault --wait=2
halt

title memdrive duplicated from floppy image file (hd0,0)/sbm.bin
map --mem (hd0,0)/sbm.bin (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)
savedefault --wait=2

title memdrive based on win98 partition (hd0,6)
map --mem (hd0,6)+1 (hd0)
# map --mem (hd0,0)/win98.gz (hd0)
map --hook
chainloader (hd0)+1
rootnoverify (hd0)
savedefault --wait=2
3. GRUB for DOS簡介 by pt@sysoft

由sysoft論壇網友pt寫的GRUB for DOS簡介:http://www.znpc.net/bbs/viewthread.php?tid=2214

相信許多liunxer初次聽到“GRUB FOR DOS”這個名字,第一感覺就是:這個對我沒用,因為我不用DOS,即使用也不會去通過它啟動GRUB。先別急,再問一句:您是否用過grldr呢?是否用過MaxDos、一鍵ghost、矮人DOS工具盤?如果答案是肯定的,那您已經在用GRUB FOR DOS了。

是它的名字給人們造成了誤解,這也是歷史遺留問題。一開始確實僅僅是“for dos”,後來開發麵越來越廣,功能越來越強,“for dos”已不能涵蓋其全部。於是它的名字就成了一個障礙,新接觸的人往往望名生意,以為它是專給DOS用的,便不去關注——我本人就是如此,直到最近才對它逐步瞭解,相見恨晚 。正是我個人的歷程促使我寫下這篇文字,希望更多人能儘快地瞭解並使用GRUB4DOS這一優秀作品,享受它帶來的可靠與便捷。

很多新手都誤以為GRUB4DOS是GNU GRUB的一部分或一個元件,其實不然。應該說它是對GNU GRUB的二次開發,最早由“不點”在2003年發起,目前主要由他和另外幾位中國人維護,很多人貢獻了代碼,還有廣大網友熱心地幫助測試,使得GRUB4DOS發展到今天取得了長足進步。目前最新版本是0.4.2,基於GNU GRUB 0.97,並做了相當多的改進,簡單歸納如下:

1、A20代碼 和 bug修正
對A20的處理歷來就是一個棘手問題。當初IBM引入這一設計,本意是為了讓以往那些BUGGY軟體能夠運行,結果造成後世無窮無盡的隱患。當然不能全怪IBM,真正應當責怪的是那些不遵守IBM標準的硬體廠商,它們生產的系統無法用常規的幾種方法來控制A20,使得軟體發展者可能在很多意想不到的地方碰上A20這個妖魔,除了造成死機之外,還導致執行效率的極度降低。在微軟的XMS規範中就明確寫著,A20的控制在有些機器上是非常耗時的一個操作。

GNU GRUB 0.97中的A20代碼很明確是有問題的,這在GNU GRUB郵件列表檔案中就有提到。很多用戶報告在使用gnu grub 0.97時鍵盤失去回應。grub開發組在grub2中對A20代碼打了補丁,以解決這些問題,但是這個補丁並沒有打到我們目前廣泛使用的0.97版上。為此GRUB4DOS用取自Linux內核的A20代碼替換了原代碼,並參考其他一些開源代碼做了很多改進,基本上解決了這一問題。

A20只是改造的一個方面,在GRUB4DOS的開發過程中修復的GNU GRUB 0.97的bug還有很多,有些在Changelog中並沒有提到。到目前為止,已經把那些嚴重的BUG排解殆盡了,應該可以比較平滑地使用GRUB4DOS了。

2、磁片仿真(虛擬磁片)
這是GRUB4DOS的一大特色功能,開發者下了不少功夫。這一功能是將 軟碟鏡像或硬碟鏡像甚至某個硬碟分區 虛擬成 軟盤機或硬碟,進而運行其中的作業系統(DOS、win98),類似於以前流行的“虛擬軟盤機”(vfloppy),但功能要強得多。
用SYSLINUX中的memdisk也可實現虛擬磁片。比較而言,GRUB4DOS功能更強,限制更少,用法更靈活,同時對bios的要求也要高一些,在一些BIOS有缺陷的機子上可能會出問題。

3、多種方式進入grub環境
1)通過dos
在dos下運行grub.exe即可進入純粹的grub環境,並部分地支援退回到DOS。也可把grub.exe作為 CONFIG.SYS 裏的設備驅動檔而運行。

2)通過Windows啟動功能表
這是被廣泛使用的一種用法。MaxDos、一鍵ghost硬碟版、矮人DOS工具盤之類的軟體就是以這種方式啟動grldr,再通過磁片仿真虛擬出一個軟盤機,進而啟動DOS的。

3)通過MBR引導代碼(開機直接進入)
乍一看這似乎不算什麼改進——GNU GRUB本來就可以這樣引導,但實際上在這裏GRUB4DOS有相當大的革新。把GRUB安裝到硬碟MBR的傳統方法是:先運行root (xxx,x),然後setup (xxx)——前面一句是指定一個分區,該分區須存放有/boot/stage1和/boot/stage2文件,後面的setup (xxx) 是將引導代碼寫入指定磁片的MBR。這樣安裝的GRUB,其MBR引導代碼被設置為從固定的分區載入stage2,一旦該分區出了問題,系統便無法引導;如果我們想刪除該分區,或格式化分區,或者做一些會引起該分區序號改變的操作,就需要預先重新安裝一次grub,重新指定存放stage檔的分區,否則也會引導失敗。這一點上grub顯得不夠靈活。

而GRUB4DOS採取了新的策略:其MBR引導代碼並非固定地指向某個分區,而是搜索所有分區,查找並載入grldr,只要某分區上存有一份grldr,就能啟動。而且安裝時可以將原微軟的MBR備份,啟動時如果找不到grldr,便自動載入備份的MBR。顯然這種方式更加靈活、穩健,所以GRUB4DOS雖然保留了GNU GRUB的全部命令和功能,包括setup命令,但不推薦使用傳統的安裝方式。

當然GRUB4DOS的方式也並非十全十美,它的引導代碼雖然可以搜索硬碟,但識別檔系統的能力有限,目前僅限於FAT12/FAT16/FAT32/EXT2/EXT3這幾種(以後將支持更多的格式),所以可能需要專門設一個分區來存放grldr。不過在我看來這是值得的,一點小麻煩換來了更多的方便和穩定。

目前已有多種方法給硬碟安裝GRUB4DOS引導代碼:2000/xp/2003下用grubinst(請參考 http://bbs.znpc.net/viewthread.php?tid=2170&extra=page%3D1),DOS和linux下用bootlace.com(參見readme)。

4、圖片背景支援
相信大多數用戶都樂於使用圖片背景來代替單調的黑白畫面。雖然僅能支持 640x480@14位色,但也總比兩色好得多。

5、中文支援
GRUB4DOS中同時發佈有支持中文的grldr和grub.exe,大大方便了中文用戶。

6、光碟機支援
該功能使得用戶可以再GRUB環境下訪問光碟機,並可由光碟機啟動,很實用。

以上僅是大致介紹,更詳盡的資訊和使用方法請參閱readme。

現在我用的每塊硬碟包括u盤都安裝了GRUB4DOS,既可啟動windows,又能啟動linux,還可通過磁片仿真來啟動dos,放上自己喜歡的圖片做背景,全中文介面,HOHO,感覺很不錯,您不想試試嗎?

本文參考資料來自互聯網,如有錯漏敬請指正。更新日期:2007-01-27

4. GRUB 2使用簡介 by bean@sysoft

由sysoft論壇的bean所寫的GRUB 2中文簡介:http://www.znpc.net/bbs/viewthread.php?tid=2269

Grub 2 是新一代的Grub,它實現了一些Grub中所沒有的功能:

1、模組化設計

不同于Grub的單一內核結構,Grub 2 的功能分佈在很多的小模組中,並且能在運行時動態裝載和卸除。

2、支援多體系結構

Grub 2可支持PC(i386), MAC(powerpc)等不同的體系機構,而且支持最新的EFI架構。

3、國際化的支持

Grub 2 可以支援非英語的語言。

4、記憶體管理

Grub 2 有真正的記憶體管理系統。

5、腳本語言

Grub 2 可以支援腳本語言,例如條件,迴圈,變數,函數等。

當然,Grub 2正處在開發階段,因此以上的某些功能可能現階段還不是很完善。

安裝和使用

Grub 2的內核是符合multiboot標準的,因此可以在Grub中引導。

1、下載
http://grub4dos.sourceforge.net/grub2.zip
解壓到某個FAT分區的根目錄,會生成/boot/grub目錄,Grub 2的檔便在該目
錄下。

2、修改 /boot/grub/grub.cfg
這是Grub 2的配置檔,它的格式不同於menu.lst,以下是一個例子:

set timeout=20
set default=0

menuentry "Chainload First Part" {
set root=(hd0,1)
chainloader +1
}

menuentry "Load Linux at Second Part" {
set root=(hd0,2)
linux /vmlinuz root=/dev/hda2
initrd /initrd
}

如果你熟悉Grub,應該可以看明白裏面的內容。要注意的是:
a、timeout, default等參數用變數來儲存
d、功能表項由menuentry定義
c、第1個分區是(hd0,1)而不是(hd0,0)
d、當前支援的啟動方式是chainload,linux和multiboot

3、在Grub中使用以下的命令進入Grub2
root (hd0,0)
kernel /boot/grub/core.img
boot
(hd0,0)請用存放Grub2的分區的名字來代替

4、進入Grub 2後,在功能表介面下輸入 c 便可進入控制介面。

基本命令:

lsmod
列表當前裝載的模組

insmod mod_name
裝載模組

rmmod mod_name
卸除模組

help [command]
顯示幫助

ls [options] [dir]
列表目錄。當不帶參數時,顯示的是所有的硬碟設備,帶參數時,顯示的是目錄裏的子目錄和檔。

還有很多其他的命令,全部命令的列表在/boot/grub/command.lst裏:
boot cat chainloader cmp . configfile export font halt hello help initrd
lsmod linux loopback ls lsmod module multiboot play reboot rescue rmmod
search set source terminal terminfo [ unset vbeinfo vbetest videotest

可以用help來看具體的用法

注意:

a、很大一部分命令都在模組裏,如果輸入時顯示找不到命令,只需要用insmod
裝載相應的模組就可以了。

b、你可以定制內核,使所需的命令包在其中。

從代碼中編譯:

1、用cvs取得源代碼
cvs -z3 -d:pserver:anonymous@cvs.savannah.gnu.org:/sources/grub co grub2

2、當前的Grub2代碼中有一個bug,使得啟動後不會顯示grub.cfg中的功能表,我寫了
一個補丁,在:
http://grub4dos.sourceforge.net/grub2-menu.diff
要使用該補丁,請進入grub2的目錄,然後:
patch -p1 < grub2-menu.diff
這裏假設grub2-menu.diff放在grub2目錄下

3、./configure
然後
./make

4、定制內核

./grub-mkimage -d . -v -o core.img fat pc

core.img是內核的名字,fat和pc是加入內核的模組。常用模組有:

fat: 支援 fat 檔系統
ext2: 支援 ext2 檔系統
pc: 支持主分區和擴展分區
help: help命令
ls: ls命令

除了當前分區的檔系統的模組外,其他的都可以用insmod在進入grub2後才轉載

5、把core.img, boot.img, diskboot.img, *.mod, fs.lst, command.lst
抄到某一分區的 /boot/grub目錄下,然後編寫配置檔grub.cfg

5. GRUB 三步通 by 不知名網友

網友所寫的GRUB使用說明--“GRUB三步通”,推薦新手閱讀。

原始鏈結:http://www.cc.ac.cn/~peace/articles/grub.txt
Gandalf美化版:http://www.znpc.net/bbs/viewthread.php?tid=873

另外,請新手注意: GRUB4DOS實際上只是GNU GRUB 0.97的功能增強版,除了某些命令的使用方法稍有不同之外,基本的用法跟GNU GRUB是完全一樣的,因此,你可以直接訪問GNU GRUB的官方網站並查看網站上提供的GNU GRUB線上使用手冊(Online manual)來學習GRUB最基本的用法。

GRUB 的優點

  GRUB 是引導裝入器(boot loader) -- 它負責裝入內核並引導 Linux 系統。GRUB 還可以引導其他作業系統,如 FreeBSD、NetBSD、OpenBSD、GNU HURD 和 DOS,以及 Windows 95、98、NT 和 2000。儘管引導作業系統看上去是件平凡且瑣碎的任務,但它實際上很重要。如果引導裝入器不能很好地完成工作或者不具有彈性,那麼就可能鎖住系統,而無法引導電腦。另外,好的引導裝入器可以給您靈活性,讓您可以在電腦上安裝多個作業系統,而不必處理不必要的麻煩。

  GRUB 是一個很棒的boot loader。它有許多功能,可以使引導過程變得非常可靠。例如,它可以直接從 FAT、minix、FFS、ext2 或 ReiserFS 分區讀取 Linux 內核。這就意味著無論怎樣它總能找到內核。另外,GRUB 有一個特殊的互動式控制臺方式,可以讓您手工裝入內核並選擇引導分區。這個功能是無價的:假設 GRUB 功能表配置不正確,但仍可以引導系統。哦,對了 -- GRUB 還有一個彩色引導功能表。 更令人驚訝的是,這是一個自由軟體!!!


GRUB 菜單

先來看一個例子,這是位於/boot/grub/目錄下的menu.lst文件。
此檔將在開機時產生一個功能表,包含有Debian linux,Windows2000,RedHat linux和 Mandrake linux,共四個選擇項。我一共分了8個區,一個fat16(0x6),一個ntfs(0x7),三個ext2fs分區(0x83),一個swap分區(0x82)。ntfs用來裝win2000,三個ext2fs裝了三個linux,c盤fat16分區沒有裝任何東西。
引用:
  
###############################################
#
# 一個GRUB configure 的例子
#
###############################################

timeout 10
default 2

# --> Debian linux <--
title Debian linux
root (hd0,2)
kernel /boot/vmlinuz-2.2.18 root=/dev/hda3 ro
initrd /boot/initrd-2.2.18.gz
# --> Debian END <--


# --> Windows 功能表選項 <--
title Windows2000
root (hd0,0)
chainloader +1
# --> Winddows 結束 <--


# --> RedHat linux 功能表選項 <--
title RedHat linux
root (hd0,8)
chainloader +1 # 在硬碟主引導分區裝了lilo,所以也用了chainloader。
# --> RedHat linux 結束 <--


# --> Mandrake linux 功能表選項 <--
title Mandrake linux
root (hd0,5)
kernel /boot/vmlinuz-2.4.3-20mdk root=/dev/hda6 ro
initrd /boot/initrd-2.4.3-20mdk.img

# --> Mandrake linux 結束 <--
以符號井 # 開頭的行表示被注釋掉,沒有任何意義。

timeout表示默認等待的時間,這兒是10秒鐘。超過10秒,用戶還沒有作出選擇的話,系統將自動選擇默認的作業系統。

默認的作業系統就是由default控制的。default後加一個數字n,表明是第n+1個。需要注意的是,GRUB中,計數是從0開始的,第一個硬碟是hd0,第一個軟盤機是fd0,等等。所以,default 2 表示默認的作業系統在這兒是 Redhat linux。

接下來,正如你所想像的,title表示的是“Debian linux”菜單項。root (hd0,2)表示第一個硬碟,第三個分區。這兒的root與linux的root分區極其不同,此root非彼root也!

在 Linux 中,當談到 "root" 檔系統時,通常是指主 Linux 分區。但是,GRUB 有它自己的 root 分區定義。GRUB 的 root 分區是保存 Linux 內核的分區。這可能是您的正式 root 檔系統,也可能不是。我們討論的是 GRUB,需要指定 GRUB 的 root 分區。進入 root 分區時,GRUB 將把這個分區安裝成唯讀型,這樣就可以從該分區中裝入 Linux 內核。GRUB 的一個很“酷”的功能是它可以讀取本機的 FAT、FFS、minix、ext2 和 ReiserFS 分區。

到目前為止,您可能會感到一點疑惑,因為 GRUB 所使用的硬碟/分區命名約定與 Linux 使用的命名約定不同。在 Linux 中,第一個硬碟的第五個分區稱作 "hda5"。而 GRUB 把這個分區稱作 "(hd0,4)"。GRUB 對硬碟和分區的編號都是從 0 開始計算。另外,硬碟和分區都用逗號分隔,整個運算式用括弧括起。現在,可以發現如果要引導 Linux 硬碟 hda5,應輸入 "root (hd0,4)"。

知道了內核在哪兒,還要具體指出哪個檔是內核檔,這就是kernel的工作。
kernel /boot/vmlinuz-2.2.18 root=/dev/hda3 ro說明/boot/vmlinuz-2.2.18 就是要載入的內核。後面的都是傳遞給內核的參數。root=/dev/hda3就是linux的硬碟分區表示法,ro是以readonly的意思。
initrd用來初始的linux image,並設置相應的參數。

是不是感覺很簡單啊!再來看一看windows的定義段吧。
這裏,我添加了一項來引導 Windows2000。要完成此操作,GRUB 使用了“鏈式裝入器”(chainloader)。鏈式裝入器從分區 (hd0,0) 的引導記錄中裝入 win2000 自己的引導裝入器,然後引導它。這就是這種技術叫做鏈式裝入的原因 -- 它創建了一個從引導裝入器到另一個的鏈。這種鏈式裝入技術可以用於引導任何版本的 DOS 或 Windows。

我的RedHat linux在硬碟主引導分區裝了lilo,所以也用了chainloader。

GRUB的配置檔要簡單就這麼簡單,如果你要更個性化一點,試一試把“color light-gray/blue ”加在default語句的下面,下一次啟動GRUB時,看看有什麼變化,再試一試“color light-blue/red",驚喜嗎? 有趣吧!

GRUB的交互性

  GRUB 最好的優點之一就是其強健的設計 -- 在不斷使用它時請別忘了這點。如果更新內核或更改它在磁片上的位置,不必重新安裝 GRUB。事實上,如有必要,只要更新 menu.lst 檔即可,一切將保持正常。

  只有少數情況下,才需要將 GRUB 引導裝入器重新安裝到引導記錄。首先,如果更改 GRUB root 分區的分區類型(例如,從 ext2 改成 ReiserFS),則需要重新安裝。或者,如果更新 /boot/grub 中的 stage1 和 stage2 檔,由於它們來自更新版本的 GRUB,很有可能要重新安裝引導裝入器。其他情況下,可以不必理睬!

  GRUB的最大的特點就是交互性特別強。在開機時,按一下“c”,將進入GRUB 控制臺。顯示如下:
引用:
GRUB version 0.5.96.1 (640K lower / 3072K upper memory)

[ Minimal BASH-like line editing is supported. For the first word, TAB
lists possible command completions. Anywhere else TAB lists the possible
completions of a device/filename. ]

grub>
  歡迎使用 GRUB 控制臺。現在,再研究命令:(我將通過GRUB 控制臺繞過lilo來啟動RedHat linux)

grub> root

  現在,按一次 Tab 鍵。如果系統中有多個硬碟,GRUB 將顯示可能完成的列表,從 "hd0" 開始。如果只有一個硬碟,GRUB 將插入 "hd0,"。如果有多個硬碟,繼續進行,在 ("hd2") 中輸入名稱並在名稱後緊跟著輸入逗號,但不要按 Enter 鍵。部分完成的 root 命令看起來如下:

  grub> root (hd0,

  現在,繼續操作,再按一次 Tab 鍵。GRUB 將顯示特定硬碟上所有分區的列表,以及它們的檔系統類型。在我的系統中,按 Tab 鍵時得到以下列表:
引用:
grub> root (hd0, // (tab,按tab鍵一下)
Possible partitions are:
Partition num: 0, Filesystem type is fat, partition type 0x6
Partition num: 2, Filesystem type is ext2fs, partition type 0x83
Partition num: 4, Filesystem type unknown, partition type 0x7
Partition num: 5, Filesystem type is ext2fs, partition type 0x83
Partition num: 6, Filesystem type is fat, partition type 0xb
Partition num: 7, Filesystem type is fat, partition type 0xb
Partition num: 8, Filesystem type is ext2fs, partition type 0x83
Partition num: 9, Filesystem type unknown, partition type 0x82
  如您所見,GRUB 的互動式硬碟和分區名稱實現功能非常有條理。這些,只需要好好理解 GRUB 新奇的硬碟和分區命名語法,然後就可以繼續操作了

grub> root (hd0,8)

現在已安裝了 root 檔系統,到裝入內核的時候了
引用:
grub> kernel /boot/vmlinuz-2.4.2 root=/dev/hda5 ro
[Linux-bzImage, setup=0x1200, size=0xe1a30]
  您已經安裝了 root 檔系統並裝入了內核。現在,可以引導了。只要輸入 "boot",Linux 引導過程就將開始。是不是很cool啊,GRUB的menu.lst更像一個linux下的腳本程式。

#####################
# GRUB啟動盤 #
#####################
要製作引導盤,需執行一些簡單的步驟。首先,在新的軟碟上創建 ext2 檔系統。然後,將其安裝,並將一些 GRUB 檔複製到該檔系統,最後運行 "grub" 程式,它將負責設置軟碟的引導磁區。準備好了嗎?

將一張空盤插入 1.44MB 軟盤機,輸入:

# mke2fs /dev/fd0
創建了 ext2 檔系統後,需要安裝該檔系統:

# mount /dev/fd0 /mnt/floppy
現在,需要創建一些目錄,並將一些關鍵檔(原先安裝 GRUB 時已安裝了這些檔)複製到軟碟:

# mkdir /mnt/floppy/boot
# mkdir /mnt/floppy/boot/grub
# cp /boot/grub/stage1 /mnt/floppy/boot/grub
# cp /boot/grub/stage2 /mnt/floppy/boot/grub
再有一個步驟,就能得到可用的引導盤。

在linux bash中,從 root 用戶運行“grub”,該程式非常有趣並值得注意,因為它實際上是 GRUB 引導裝入器的半功能性版本。儘管 Linux 已經啟動並正在運行,您仍可以運行 GRUB 並執行某些任務,而且其介面與使用 GRUB 引導盤或將 GRUB 安裝到硬碟 MBR 時看到的介面(即GRUB控制臺)完全相同。
在 grub> 提示符處,輸入:

grub> root (fd0)
grub> setup (fd0)
grub> quit

現在,引導盤完成了。
如果要把GRUB裝到硬碟上,也很容易。這個過程幾乎與引導盤安裝過程一樣。首先,需要決定哪個硬碟分區將成為 root GRUB 分區。在這個分區上,創建 /boot/grub 目錄,並將 stage1 和 stage2 檔複製到該目錄中,可以通過重新引導系統並使用引導盤,或者使用駐留版本的 GRUB 來執行後一步操作。在這兩種情況下,啟動 GRUB,並用 root 命令指定 root 分區。例如,如果將 stage1 和 stage2 檔複製到 hda5 的 /boot/grub 目錄中,應輸入 "root (hd0,4)"。接著,決定在哪里安裝 GRUB -- 在硬碟的 MBR,或者如果與 GRUB 一起使用另一個“主”引導裝入器,則安裝在特定分區的引導記錄中。如果安裝到 MBR,則可以指定整個磁片而不必指定分區,如下(對於 hda):

grub> setup (hd0)

如果要將 GRUB 安裝到 /dev/hda5 的引導記錄中,應輸入:

grub> setup (hd0,4)

現在,已安裝 GRUB。然後,應該為GRUB創建引導功能表,這樣就不必在每次引導系統時都輸入那些命令。

Climbing注:上面介紹的都是GNU GRUB的傳統安裝方式(安裝到MBR或者引導磁區),而對於GRUB4DOS來說,它又比GNU GRUB多出了更多更好的而且更靈活的啟動方式和安裝方式,詳細資訊請參考本文相關內容。

小結:在這裏只是介紹了 GRUB 的一部分。例如,可以使用 GRUB 來執行網路引導,引導 BSD 檔系統,或更多操作。另外,GRUB 有許多配置和安全性命令也很有用。如需所有 GRUB 功能的完整描述,請閱讀 GRUB 出色的 GNU 文檔。只要在 bash 提示中輸入 "info grub" 就可以閱讀該文檔。

GRUB的下載:ftp://alpha.gnu.org/gnu/grub/


再補充:三種硬碟安裝Linux方法的 grub 命令集(採用任何一種都可以的,隨便你喜歡哪個方法):

1.用 hd.img 安裝,這需要用到 grub for dos 的軟碟仿真功能:

grub> map (hd0,0)/hd.img (fd0)
grub> chainloader (hd0,0)/hd.img
grub> rootnoverify (fd0)
grub> boot

2.用 vmlinuz 和 hd.rdz 兩個檔來安裝(無需使用 grub for dos,用 GNU 原來的
GRUB 都管用):

grub> kernel (hd0,0)/vmlinuz ramdisk_size=128000 root=/dev/ram3
automatic=method:disk acpi=ht vga=788
grub> initrd (hd0,0)/hd.rdz
grub> boot
注意 kernel 一行很長,不要截斷成兩行。還要注意上述命令都假定這些檔位於
(hd0,0) 的根目錄,如果你的不同,當然要作適當的修改
來源:LinuxEden


3.首先下載grub for dos(http://grub.linuxeden.com),其最新版本支援ntfs分區,而且可以利用ntloader調用,比如winxp的引導功能表.
提取grldr到c:/下;
修改boot.ini,加入 C:\GRLDR=Boot Grub (方法:在桌面我的電腦點右鍵--屬性--高級--啟動和故障恢復-設置--編輯,不用到c盤去找了,麻煩);
在c盤根目錄下建立/boot/grub檔夾,建立menu.lst文字檔案;
把ML的iso放在vfat分區,提取mbvmlinuz,mbinitrd-hd.gz與iso都放在根目錄下 ;
修改menu.lst,加入
代碼:

title Magci linux1.2-setup
kernel (hd0,6)/mbvmlinuz ro root=/dev/ram0 ramdisk_size=32000 vga=788
initrd (hd0,6)/mbinitrd-hd.gz

(hd0,6)為我的放置iso和mbvmlinuz,mbinitrd-hd.gz的分區,修改成你的,注意kernel後有個空格。
重啟,選擇boot grub,選擇Magic linux1.2-setup ;
後面的我就不說了,按照提示一步一步來就行了;
當然你可以在安裝成功後,修改menu.lst,加入你的ML啟動項,你就可以用grub for dos 啟動你的ML。


################## ################## ################## ################## ################## ##################
我的機器無光碟機軟盤機,直接由iso文件安裝mandriva的方法,(其他linux也同理)。
首先,需要把第一張cd中的install/alt1目錄下的vmlinuz 和 all.rdz 解壓出來。說明:這層目錄下面還有alt0和alt2,它們安裝了不同的內核,詳情可見install下面的說明文件,(檔案名忘記了)。

其次,這種方法利用iso安裝的原理基本上就是利用grub引導安裝映象,那麼我介紹我所知的三種方法:

A,已經擁有了grub引導,比如原有的linux仍存在,而且是由grub引導系統的。(這種情況比較簡單)。
1,只要確定好上一步解壓出來的vmlinuz 和 all.rdz在硬碟上的位置,比如第一塊硬碟的第一個分區是/dev/hda1,那麼改分區的位置在grub中就表示為(hd0, 0);
2,然後就可以利用原來的grub引導系統,當出現grub引導功能表的時候,根據下面的提示,按 "c",會出現命令行式的grub,然後按照以下格式輸入:(以第一步中的位置為例)
kernel (hd0,0)/vmlinuz ramdisk_size=128000 root=/dev/ram3 automatic=method:disk acpi=ht vga=788 #注釋,然後輸入回車
initrd (hd0,0)/all.rdz #注釋,然後輸入回車
boot #注釋,然後輸入回車

就可以看到引導安裝開始了,方法A 結束。

B,如果沒有grub,但是有裝好的windows(以winxp為例),也可以利用windows的c:盤下的boot.ini 結合 grub for dos引導安裝。這裏根據直接用winxp 引導 grub for dos,或者進入實dos再用grub for dos,可以分為一下兩種情況。

B1, winxp 的boot.ini + grub_for_dos中的grldr;
在新版的grub_for_dos中,出現了一個檔grldr,它可以直接由winxp引導,實現引導grub,這樣就不用安裝grub了。方法如下:
1, 把grub_for_dos中的grldr 和 boot目錄拷貝到c盤,就是和boot.ini所在的分區的根目錄下;
2,編輯boot.ini,在最後加上一行:
C:\GRLDR="grub for dos"
3, 編輯boot/grub/menu.lst,如下:
title mandriva install
kernel (hd0,0)/vmlinuz ramdisk_size=128000 root=/dev/ram3 automatic=method:disk acpi=ht vga=788
initrd (hd0,0)/all.rdz
注意,為了方便,也可以直接把menu.lst放在grldr所在的分區根目錄。
4, 重啟,然後在winxp的引導功能表選grub for dos就可以引導安裝了。

B2, winxp的boot.ini + vfloppy + grub_for_dos
1,這種方法是首先在winxp中安裝vfloppy,方法就不介紹了,這樣在winxp引導功能表中選vfloppy對應的項,就可以進入實dos中了;
2,在dos中運行grub_for_dos中的grub.exe,可以直接指定由B1中編輯好的menu.lst,這樣比較方便:
grub --config-file=(hd0,0)/boot/grub/menu.lst ,運行就可以引導安裝了。


對於方法A和B,當引導安裝開始後,只要指定系統安裝所需的iso檔所需的位置就可以了。

以上方法所需要的軟體,可以在這裏下載,http://lsec.cc.ac.cn/~peace/service/software/win4linux.rar ,當然也可以在網上下載更新
的版本。

再補充 不用grub,直接用u盤引導從硬碟安裝linux的方法。
1),這裏利用mandriva提供的all.img,一般來說,解壓cd1,在cd1/install/image/all.img;
2),插上U盤,搞清楚U盤的設備號,用mount命令即可,我這裏是/dev/sda1;
3),用root,執行 dd if=path/all.img of=/dev/sda1即可;
4),用u盤引導,進入圖形化安裝過程,輸入iso檔所在的位置即可。
===========================
较常用参数的还有
title 映射第二硬盘为第一硬盘并启动NTLDR
map (hd1) (hd0)
map (hd0) (hd1)
map --hook
find --set-root /ntldr
chainloader /ntldr

title 从光盘启动
cdrom --init
map --hook
chainloader (cd0)
boot

0 個意見:

張貼留言

訂閱 張貼留言 [Atom]

<< 首頁