2008年11月5日 星期三

grub4dos初級教程-入門篇

0 為何寫此初級教程?

假如你是第一次聽說grub,你可能說我不需要grub。那麼,你是否用過「一鍵ghost」,「超級急救盤」,或者「矮人DOS工具箱」?如果你用過的話,那麼你實際上已經在用grub了。

grub4dos相關的資料互聯網上並不少,grub4dos軟件包裡也有說明文件,可是絕大多數資料並不適合剛接觸grub的人。初學者下載了 grub4dos軟件包後,面對一大堆(約40個)的文件,即使大概看了readme.txt文件後,也很可能仍然是一團霧水,不知從何處入手。出現這種狀況的一個主要原因是,此軟件是作者利用業餘時間開發的,開發者在有限的時間裡集中精力於排除軟件bug,從而無過多剩餘精力撰寫文檔。

其實,初步使用這個軟件並不難,可以說非常簡單。下面的內容參考了有關資料,並結合自己的使用經驗,供初學者參考,希望能對你入門grub有所幫助。我自身也是接觸grub不久,對grub的瞭解還很膚淺,錯誤之處,在所難免,還望不吝指出。


1 grub4dos初級教程-入門篇

1.1 grub簡介

GRUB 是一個遵從Multiboot(多重啟動)規範的啟動管理程序。現在接觸到的有3種,即GNU Grub Lagecy , GNU Grub2 和 Grub for dos(grub4dos)。

GNU GRUB Lagecy其實就是原來的 GNU GRUB 0.xx ,最新版是2005年發佈的GNU GRUB 0.97。 目前已停止開發,並改名為 GNU GRUB Lagecy。

GNU GRUB2是第二代GRUB,它將取代原來的GNU GRUB(例如0.9x版),但目前還處於開發階段,尚未發佈正式版。

GNU GRUB Lagecy和GNU GRUB2都是 GNU 組織的項目。

GRUB for DOS(GRUB4DOS)是一個以 GNU GRUB 為基礎的功能強大的引導器。它可以在 DOS 和 LINUX下運行,也可以通過其他引導器來運行,還可以作為MBR運行。GRUB4DOS內置了功能完善的 BIOS 級磁盤仿真。

下面以比較廣泛使用的GRUB4DOS為基礎進行說明。GNU GRUB與GRUB4DOS的不同之處,可參看相關說明文件。

1.2 如何獲得grub4dos最新版

可從以下網址下載GRUB4DOS最新版及較早版本。
http://download.gna.org/grub4dos/
http://download.gna.org/grubutil/
http://grub4dos.jot.com/WikiHome
https://gna.org/projects/grub4dos/
http://grub4dos.sourceforge.net/wiki (官方說明文檔)

1.3 如何安裝grub4dos?

下載grub4dos後,解壓縮後就可以了。核心文件有下面這幾個:grldr和grub.exe,及menu.lst(此為樣本,需修改)。如果你需要中文支持,就用chinese子目錄中的文件。

安裝方法常見的有下面3種。

1.3.1 通過Windows NT的啟動菜單進入grub4dos

將grldr文件複製到c:\,去掉boot.ini的只讀屬性,然後修改c:\boot.ini文件,在boot.ini的最後面加一行:
c:\grldr="Start GRUB4DOS"
並將boot.ini中的timeout值設置為大於0的數字,如:timeout=5,然後保存boot.ini,改回只讀屬性。
編輯boot.ini前,可在cmd下輸入:
attrib -s -r -h c:\boot.ini
解除boot.ini的只讀屬性,編輯完後輸入:
attrib +s +r +h c:\boot.ini
恢復boot.ini的原有屬性。

這樣,編輯完重新啟動計算機,在NT的啟動菜單就會出現「Start GRUB4DOS」這一項,選擇該項即可進入grub4dos的環境。

此方法的優點是:不需要修改MBR。

初學者使用grub一般都需要grub菜單,把準備好的menu.lst文件放到C:\下(也可放到其它分區根目錄或其它指定目錄)。menu.lst的編寫方法可參考readme.txt或者別人提供的menu.lst。在下面的「1.4 如何使用grub4dos」中將作簡單介紹。

1.3.2 通過DOS啟動grub

將機器通過任何可能的方式(軟盤,U盤,光盤等)啟動到DOS環境(最好是純DOS環境,即不加載任何驅動程序和TSR程序的DOS環境),然後在DOS下或者AUTOEXEC.BAT中運行grub.exe,即可進入grub4dos。
也可在DOS/Windows9x的CONFIG.SYS中使用下列任一方式啟動grub。
DEVICE=GRUB.EXE
INSTALL=GRUB.EXE
SHELL=GRUB.EXE

此方法的優點是:不需要修改MBR;可根據需要在腳本或者其它DOS程序中啟動GRUB4DOS。

菜單文件menu.lst可保存在grub文件所在目錄或其它指定路徑。

1.3.3 通過mbr啟動grub

通過軟件包裡的bootlace.com(可運行於DOS/Win9x)安裝GRLDR引導記錄到硬盤或者硬盤映像文件的主引導記錄,或者安裝到軟盤或者軟盤映像的引導扇區。電腦啟動時,通過擊熱鍵(默認為空格鍵,可自定義)來啟動grub。

比如:
在DOS下安裝GRLDR代碼到主引導記錄:
bootlace.com 0x80

在DOS下安裝GRLDR代碼到軟盤:
bootlace.com --floppy --chs 0x00

在DOS下安裝GRLDR代碼到軟盤映像:
bootlace.com --floppy --chs floppy.img

我所使用的命令為:
bootlace --force-backup-mbr --boot-prevmbr-first --time-out=3 --hot-key=0x3920 --mbr-disable-floppy 0x80
表示安裝GRLDR代碼到MBR時,備份原MBR(--force-backup-mbr),默認啟動原MBR,即啟動原windows xp系統(--boot-prevmbr-first),等待時間3秒(--time-out=3),熱鍵為空格鍵(--hot- key=0x3920), 不搜索軟盤上的GRLDR(--mbr-disable-floppy)。

也就是說啟動時等待3秒,3秒內不擊熱鍵的話,啟動windows xp;3秒內擊熱鍵則啟動grub4dos。

bootlace的其它參數及自定義熱鍵用法可參看readme.txt文件。

裝入mbr後,再將grldr和menu.lst文件複製到某分區的根目錄(現在支持的文件系統是FAT12,FAT16, FAT32, NTFS,EXT2 or EXT3 的分區。對於Windows用戶,最好是fat分區),menu.lst也可保存到其它指定位置。

此方法的優點是:不依賴於操作系統;能夠自動搜索硬盤上各個分區的grldr文件。

另外,2000/xp/2003/vista環境下可用另一軟件grubinst來把GRLDR引導記錄安裝到硬盤的MBR。grubinst具有圖形界面和命令行兩種工作模式供選用,並附有比較詳細的使用說明,很易於使用。【參看附錄 4.1 如何使用grubinst_gui】

1.3.4 通過Windows NT的啟動菜單進入grub4dos NEW!

用批處理自動把grub4dos裝入Vista啟動項(非MBR)。

把grub4dos裝入Vista啟動項,比裝入MBR相對來說要安全。
【對於vista系統,不能通過fdisk /mbr來恢復mbr,這樣會造成vista無法啟動。】

關於手動把grub4dos裝入Vista的啟動項的方法,網上有一些介紹。比起winxp修改Boot.ini來,操作要麻煩不少。

主要就是操作過程中要產生一個ID號【如:b88a2da4-0a4e-11dc-813a-00e04c75ef59】,需要手動輸入3次,實在是麻煩。

下面的批處理自動完成整個裝入操作。

-------------------------------
@echo off
rem by lianjiang
cls
echo.
echo 請以管理員身份運行。
echo.
pause
set gname=Grub 4 dos
set vid=
set timeout=5
bcdedit /export "Bcd_Backup" >nul
bcdedit /create /d "%gname%" /application bootsector >vid.ini
for,/f,"tokens=2",%%i,In (vid.ini) Do (
set vid=%%i
)
del vid.ini >nul
bcdedit /set %vid% device boot >nul
bcdedit /set %vid% path \grldr.mbr >nul
bcdedit /displayorder %vid% /addlast >nul
bcdedit /timeout %timeout% >nul
if exist grldr.mbr copy grldr.mbr c:\ /y && goto exit
echo.
echo 稍後請自行把grldr.mbr拷貝到C:\根目錄
echo.
pause
:exit
-------------------------------
下載批處理附件to_bcd.rar
此方法的優點是:不需要修改MBR。

grub菜單文件的準備同「1.3.1 通過Windows NT的啟動菜單進入grub4dos」。

1.4 如何使用grub4dos

對於多數沒有或很少接觸過linux的windows用戶來說,剛開始使用grub時離不開菜單。也就是說,使用grub前,我們要準備menu.lst文件。

下面是一個menu.lst的例子。(以#開始的行,表示註釋,不執行)

# 默認延遲時間(秒)
timeout 30

# 第一項為默認值
default 0

# 設置圖形背景文件
splashimage (hd0,0)/boot/grub/xp2008.gz

# 設置中文支持的字體文件
fontfile (hd0,0)/boot/grub/fonts

title 使用map啟動本地硬盤上的瑞星殺毒軟盤鏡像文件
map (hd0,0)/boot/grub/rav.img (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)

title 使用memdisk啟動本地 Win98 軟盤鏡像文件
kernel (hd0,0)/boot/grub/memdisk.gz
initrd (hd0,0)/boot/grub/win98.img

title 使用memdisk啟動本地硬盤上的瑞星殺毒軟盤壓縮鏡像文件
root (hd0,0)
kernel /boot/grub/memdisk.gz c=80 h=12 s=36 floppy
initrd /boot/rav.zip

title 啟動第一主分區(hd0,0)上的操作系統
rootnoverify (hd0,0)
makeactive
chainloader +1

title 啟動第二主分區(hd0,1)上的操作系統
rootnoverify (hd0,1)
makeactive
chainloader +1

title 重啟
reboot

title 關機
halt
參考這個例子,我們就可以根據自己需要對菜單進行修改。

比如從網上下載了效率源的鏡像文件,文件名為XLY.IMG。我們只需把
title 使用memdisk啟動本地 Win98 軟盤鏡像文件
kernel (hd0,0)/boot/grub/memdisk.gz
initrd (hd0,0)/boot/grub/win98.img

改成
title 硬盤檢測修復工具 效率源 (memdisk)
kernel (hd0,0)/boot/grub/memdisk.gz
initrd (hd0,0)/boot/grub/xly.img

或者改成
title 硬盤檢測修復工具 效率源 (map)
map (hd0,0)/boot/grub/xly.img (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)

同時把xly.img文件保存到第一主分區(一般是C:)的boot\grub目錄下。
當然也可以保存到其它路徑。

比如xly.img文件保存到C:\boot下,則menu.lst文件相應改為:
map (hd0,0)/boot/xly.img (fd0)

又如xly.img文件保存到D:\test下,則menu.lst文件相應改為:
map (hd0,4)/test/xly.img (fd0)
(參看下面的注意d)

從上面的例子可以看出,啟動軟盤鏡像,有兩種方式,即用memdisk或用map。

用memdisk時,img文件可壓縮;在img文件大小為非1.44MB或2.88MB標準鏡像時,需要指定CHS參數。img文件的CHS參數可用winimage獲得。

即例子中的:
title 使用memdisk啟動本地硬盤上的瑞星殺毒軟盤壓縮鏡像文件
root (hd0,0)
kernel /boot/grub/memdisk.gz c=80 h=12 s=36 floppy
initrd /boot/rav.zip

另外,菜單文件中的文件路徑可用相對路徑(如:/boot/rav.zip)或絕對路徑(如:(hd0,0)/boot/grub/xly.img)表示。

map方式對軟盤映像大小沒有限制,但要求必須連續存放。改進的map --mem則無此限制。

比如:
map --mem /boot/xxx.ima (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)

注意:
a, 菜單文件中所用的memdisk.gz文件,不包括在grub4dos的發行包裡,需自行準備。可從gnu grub軟件包或從其它基於grub的工具(如一鍵ghost,本人的gghost)中獲得。

b, 菜單中所用的其它文件如xp2008.gz(背景文件)、fonts(中文字體文件)及各種鏡像文件等,均需拷貝到文件中指定路徑。 fontfile命令不可單獨使用,需與splashimage一起使用。

c, 菜單文件中的命令全部使用小寫。

d, 初學者使用絕對路徑時要注意GRUB對設備的命名方法。系統的第一個硬盤驅動器表示成(hd0),其上的第一個分區表示為(hd0,0),也就是說對於硬盤,採用(hdx,y)的形式來表示,x、y都是從0開始計數的,x表示硬盤號,y表示分區號。
由於主分區只能有四個,所以第一硬盤的四個主分區分別用(hd0,0)~(hd0,3)來表示;邏輯分區則從(hd0,4)開始算,即第一邏輯分區用(hd0,4),第二邏輯分區用(hd0,5)來表示,依次類推。
一般機子的硬盤都是一個主分區,其餘是邏輯分區。因此C盤用(hd0,0),D盤用(hd0,4)來表示。 光盤用(cd)表示,第一軟驅用(fd0)表示。

下面是我現在使用的菜單效果圖及menu.lst文件,供參考。

color white/green yellow/green
default 1
timeout 3
#fontfile /boot/grub/fonts
#splashimage /boot/grub/bg.xpm.gz
#password --md5 $1$8$D0mfzTIQXv2Ma2b5bWH0b.
title 0, Boot from Hard Drive (hd0,0)
root (hd0,0)
chainloader +1

title 1, GreenGhost [Ghost v8.3/v11] (MAP-HOOK)
map --mem /boot/grub/gghost.img (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)

title 2, GreenGhost [Ghost v8.3/v11] (MEMDISK)
kernel /boot/grub/memdisk.gz c=200 h=2 s=36 floppy
initrd /boot/grub/gghost.img

title 3, GreenGhost [Ghost v8.3/v11] (MAP-HOOK) [disable a20]
map --mem /boot/grub/gghost.img (fd0)
map --hook
chainloader --disable-a20 (fd0)+1
rootnoverify (fd0)

title 4, Microsoft Windows NT/2K/XP
find --set-root /ntldr
chainloader /ntldr

title 5, Microsoft Windows Vista
find --set-root /bootmgr
chainloader /bootmgr

title 6, Boot from Hard Drive (hd0,1)
root (hd0,1)
chainloader +1

title 7, Reboot
reboot

title 8, Shutdown
halt

1.5 結言

Grub4dos具有強大的功能,上面介紹的只是grub4dos的一些最基本用法,更多的用法可在掌握基本用法的基礎上,自己查閱資料瞭解

http://www.11128.com/soft/Article.asp?id=55

沒有留言: