GRUB.EXE 完全就是 GRUB,只不過重新包裝,使得它能夠在 DOS 下運行。所以,GRUB.EXE 具有你先前所熟悉的 GRUB 的所有優良特性。目前,grub_for_dos 的最新穩定版 0.0.8 可以從這裡得到:
FTP://ftp.cosoft.org.cn/incoming/grub_for_dos-0.0.8.tar.gz
或者進入目錄查看: ftp://ftp.cosoft.org.cn/incoming/
版本 0.0.8 在驅動器映射之下也能夠再次(可以任意嵌套多次)安全地運行 GRUB.EXE。采用的方法是,在每次運行 GRUB.EXE 的時候,都自動卸載先前的驅動器映射,恢復舊的 BIOS int13 中斷向量。開發版系列(例如版本 0.1.4)當然也有這個功能。
解壓後,把 grub.exe 文件拷貝到 DOS 的硬盤分區或者 DOS 軟盤即可。用法:
grub --config-file=(hd0,0)/boot/grub/menu.lst
或者不帶參數:
grub
默認的配置文件是 (hd0,0)/boot/grub/menu.lst
如果 Linux 安裝之後不能啟動,可能的原因是 Lilo 的故障。這時候,用一張 grub 引導軟盤啟動,可保證啟動成功。如果你沒有 grub 啟動軟盤,那麼用一張 DOS 啟動軟盤,再加上一個 grub.exe 文件,同樣可以很簡單地獲得 grub 強大的多重啟動功能。
順便說,用“DOS啟動盤+GRUB.EXE”的方法所制作的軟盤,能夠用來啟動 DOS 和其它操作系統,是真正的“萬能引導軟盤”。這張軟盤在硬盤不能引導 DOS/Windows 的時候還可以引導 DOS,而用其他方法制作的 GRUB 軟盤,不能再重復用作 DOS 啟動盤。這裡所說的“DOS啟動盤”可以是 MS-DOS 的,也可以是 FreeDOS 的(順便說,FreeDOS build 2029 已經支持 Win98 的 FAT32 大分區格式了)。
另外一種情形:當你重新安裝 Windows 的時候,Windows 會重寫 MBR,從而把 LILO 或 GRUB 的啟動代碼抹掉。用 GRUB.EXE,你不需軟盤就可以啟動其他操作系統(假定你的Windows是9x,或者硬盤上安裝有DOS)。
用 loadlin.exe 也能啟動 Linux,但是 loadlin 需要一個內核文件(vmlinuz),這個內核文件必須處在 DOS/Windows 的分區,有時候這個內核文件不適合作為你新近安裝的 Linux 系統的內核。GRUB.EXE 就沒有這樣的限制,它可以給你很大的自由,它從 DOS 下啟動,而能夠從 Linux 分區找到任何文件(包括內核文件),你很容易知道這個內核跟你將要引導的系統是匹配的,從而引導 Linux 系統。
loadlin.exe 也是不用安裝就可以使用的 Linux 引導器。grub.exe 的不同在於,它是一個引導管理器,可以引導其它操作系統。
請在搜索引擎( http://www.Google.com/ )中搜索有關 GRUB 的詳細資料。這裡只是舉一個很常用的簡單例子,命令行操作:
grub> find /boot/vmlinuz
(hd0,7)
grub> root (hd0,7)
grub> kernel /boot/vmlinuz root=/dev/hda8
grub> boot
簡單的幾個 grub 命令,就可以啟動 Linux 了,很方便吧?順便說,grub 的 find 命令很好,grub 甚至還有一個 cat 命令可以顯示一個文件的內容。在 grub 的提示符下敲入 help 命令,可以獲得在線幫助。grub 的分區號 (hd0,N) 一般就是 Linux 的 /dev/hda(N+1), 例如: (hd0,7) 就是 /dev/hda8, 如果你的是 SCSI 硬盤, 則是 /dev/sda8。一個特殊情況是, 當你的系統中沒有 IDE 主盤而只有 IDE 0 上的一個從盤時, grub 顯示的 (hd0,7) 將是 Linux 的 /dev/hdb8, 也就是說, GRUB 找到的第一個 BIOS 硬盤 (hd0) 是系統中的 /dev/hdb 了。一個復雜一些的例子:
查找系統中的內核文件的位置:
grub> find /boot/vmlinuz
(hd0,7)
如果你采用了單獨的 boot 分區, 那麼需要用
grub> find /vmlinuz
來查找。假定找到的結果是
(hd0,6)
再查找系統中有哪些根分區:
grub> find /sbin/init
(hd0,7)
啟動內核的命令是:
grub> kernel (hd0,6)/vmlinuz root=/dev/hda8
grub> boot
如果你的 (hd0,7) 不是 /dev/hda8 而是 /dev/hdb8, 你就試試它:
grub> kernel (hd0,6)/vmlinuz root=/dev/hdb8
grub> boot
分區號是准確的, 只有硬盤號可能會有變化. IDE 硬盤只有 4 種變化, hda, hdb, hdc, hdd, 一個一個地試驗, 總可以成功. 當然, 如果你的是 SCSI 硬盤, 需要試驗的是 sda, sdb, sdc, sdd 等。
當然 GRUB 也支持菜單操作。GRUB.EXE 默認的菜單配置文件是 (hd0,0)/boot/grub/menu.lst ,正如前面所說,這個配置文件的位置可以由 DOS 命令行參數來重新指定。這個文件所處的分區(默認是(hd0,0))的類型可以是 DOS/Windows 的 FAT12,FAT16,FAT32,也可以是 Linux 的 ext2 等類型,還可以是 GRUB 所支持的其他分區類型。順便說,GRUB 的新版本將要支持 iso9660 光盤格式、NTFS 文件系統,以及用軟盤映象 img 文件來引導機器(特別適合於沒有軟盤又想用軟盤來啟動機器的用戶)。
提醒一下,google 很強大: 在 http://www.google.com/ 的搜索框中敲入 grub.exe 可以快速找到本文的網頁。
附: RedHat 和 Mandrake 的硬盤安裝方法
假定你的 (hd0,0)【也就是 /dev/hda1 分區】是 DOS 分區,你的那些 ISO 文件都已經處在這個分區之中。你已經在這個 DOS 分區的根目錄下創建了一個 boot 子目錄, 在 boot 目錄下創建了一個 grub 子目錄,並在 grub 目錄中添加一個名字叫做 menu.lst 的文件,內容如下:
default=0
timeout=30
title Red Hat 9 hard disk install
root (hd0,0)
kernel /boot/vmlinuz-redhat9
initrd /boot/initrd-redhat9.img
title Mandrake 9.1 hard disk install
root (hd0,0)
kernel /boot/vmlinuz-mdk9.1 ramdisk_size=128000 root=/dev/ram3 automatic=method:disk acpi=off vga=788
initrd /boot/hd-mdk9.1.rdz
title Mandrake 9.1 network install
root (hd0,0)
kernel /boot/vmlinuz-mdk9.1 ramdisk_size=128000 root=/dev/ram3 acpi=off vga=788
initrd /boot/network-mdk9.1.rdz
title Mandrake 9.1 hdcdrom_usb install
root (hd0,0)
kernel /boot/vmlinuz-mdk9.1 ramdisk_size=128000 root=/dev/ram3 acpi=off vga=788
initrd /boot/hdcdrom_usb-mdk9.1.rdz
title Mandrake 9.1 cdrom install
root (hd0,0)
kernel /boot/vmlinuz-mdk9.1 ramdisk_size=128000 root=/dev/ram3 automatic=method:cdrom acpi=off vga=788
initrd /boot/cdrom-mdk9.1.rdz
title Windows
rootnoverify (hd0,0)
chainloader +1
title Chainload the Old MBR, that is, the original MBR
rootnoverify (hd0,0)
chainloader (hd0,7)/boot/boot.0300
呵呵,一段小插曲:最後一段的 (hd0,7) 假定是你的 Linux 根分區。Linux 安裝程序一般會把安裝之前的 MBR 保存在 Linux 根分區的 /boot/boot.0300 文件中,我們正好可以借用它來引導原來的操作系統。這也許對於像 Windows XP 這樣難以兼容的系統是有用的。用這種辦法引導 Win XP,應當萬無一失(前提是,boot.0300 文件是原來能夠引導 WinXP 時的 MBR 主引導扇區的拷貝,並且你安裝 Linux 的過程沒有改動 WinXP 的分區,例如,只是在硬盤尾部的空閒空間中增加新的 Linux 分區)。
注意在 boot 目錄應當有 redhat 和 mandrake 的 vmlinuz 和 initrd 文件, 它們的名字可以是任意的, 只要保證 redhat 和 mandrake 的這些文件名不沖突(不互相覆蓋)就可以了。這些文件可以從 redhat 和 mandrake 的第一張光盤中找到。在光盤上,redhat 的叫做 vmlinuz 和 initrd.img,而 mandrake 的叫做 vmlinuz 和 hd.img、network.img 等等。你需要繼續從 hd.img 或者 network.img 中取出 vmlinuz 以及 hd.rdz 和 network.rdz 文件。【redhat 不需要這麼麻煩, initrd.img 文件直接就在光盤上】。
好了,從 DOS 下運行 grub.exe,安裝菜單應當呈現在屏幕上。很爽吧?
由於 Mandrake 的安裝程序不能自動查找 CD2 和 CD3,所以,用 ISO 文件安裝就稍微復雜了一些。對於這個問題,我喜歡這麼來解決:
先用 CD1 安裝一個基本的系統。遇到“找不到文件”的錯誤,按“繼續安裝”。安裝完成後,進入一個終端敲入命令(說明:rc3 跟正式版是一模一樣的):
mkdir /mnt/cd1
mkdir /mnt/cd2
mkdir /mnt/cd3
mount -o loop MandrakeLinux-9.1-rc3-CD1.i586.iso /mnt/cd1
mount -o loop MandrakeLinux-9.1-rc3-CD2.i586.iso /mnt/cd2
mount -o loop MandrakeLinux-9.1-rc3-CD3.i586.iso /mnt/cd3
然後進入 “KDE 菜單”--“設置”--“Mandrake 控制中心”,需要敲入 root 口令。在左欄點擊“軟件管理”,然後在右欄點擊標有“軟件源管理器幫助您定義從何處下載軟件包”這一項的圖標。在出現的“配置來源”對話框中點擊“添
好了,從 DOS 下運行 grub.exe,安裝菜單應當呈現在屏幕上。很爽吧?
由於 Mandrake 的安裝程序不能自動查找 CD2 和 CD3,所以,用 ISO 文件安裝就稍微復雜了一些。對於這個問題,我喜歡這麼來解決:
先用 CD1 安裝一個基本的系統。遇到“找不到文件”的錯誤,按“繼續安裝”。安裝完成後,進入一個終端敲入命令(說明:rc3 跟正式版是一模一樣的):
mkdir /mnt/cd1
mkdir /mnt/cd2
mkdir /mnt/cd3
mount -o loop MandrakeLinux-9.1-rc3-CD1.i586.iso /mnt/cd1
mount -o loop MandrakeLinux-9.1-rc3-CD2.i586.iso /mnt/cd2
mount -o loop MandrakeLinux-9.1-rc3-CD3.i586.iso /mnt/cd3
然後進入 “KDE 菜單”--“設置”--“Mandrake 控制中心”,需要敲入 root 口令。在左欄點擊“軟件管理”,然後在右欄點擊標有“軟件源管理器幫助您定義從何處下載軟件包”這一項的圖標。在出現的“配置來源”對話框中點擊“添