如是觀齋


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

2007年10月24日 星期三

利用NT的BootManager引導GRLDR.MBR

利用NT的BootManager引導GRLDR.MBR
適當的修改,GRLDR.MBR可以直接由NT的BootManager導引



在2000/XP/2003下,在boot.ini的最後加上一行:

C:\GRLDR.MBR="Boot GRLDR.MBR"



在Vista下,可以使用bcdedit



(1) 創建一個新bcd主要用於啟動軟碟、usb盤或光碟上的bootmgr。

md a:\boot 創建a:\boot文件夾
bcdedit /createstore a:\boot\bcd 新建一個bcd檔
bcdedit /store a:\boot\bcd -create {bootmgr} /d "Boot Manager" 新建一個用bootmgr載入的啟動項
bcdedit /store a:\boot\bcd /create /d "bootsect" /application bootsector 此項目用bootmgr載入一個bootsector項
執行上面命令後返回一個{ID},然後執行
bcdedit /store a:\boot\bcd /set {ID} device boot 設置啟動設備
bcdedit /store a:\boot\bcd /set {ID} path \grldr.mbr 設置啟動磁區路徑和檔案名
bcdedit /store a:\boot\bcd /displayorder {ID} /addlast 加入以上設置項目



(2) 修改既有原始的bcd(也就是c:\boot\bcd),就不需要/store這個參數了,直接修改就可以了。

不用創建一個restore,直接在當前的功能表存儲區(bcd檔)內進行添加即可。如下:



(2.A). bcdedit /create /d " Start GRUB4DOS by grldr.mbr " /application bootsector

bcdedit /set {id} device boot

bcdedit /set {id} path \grldr.mbr

bcdedit /displayorder {id} /addlast

同時你需要把附件中的grldr.mbr文件拷到C:\下。



如果引導正常,GRLDR.MBR運行,它會在硬碟上所有的FAT16/FAT32/NTFS/EXT2分割的根目錄找並啟動GRLDR,其效果就和把GRLDR.MBR安裝到MBR裏一樣。



(2.B). 另一方法也可以修改boot.ini

[boot loader]

timeout=10

default=C:\GRLDR.MBR

[operating systems]

C:\GRLDR.MBR="Boot Manager"





註一:

Bootmgr方式可用於多重啟動光碟,因此應該也可以用來載入光碟上的grldr,這是ntldr做不到的。



註二:

在Win2K/XP下既可以使用grldr.mbr,也可以直接使用grldr。grldr.mbr 一開始就只能被用來放在 MBR 上,不能被 boot.ini 使用。在 2007 年的某個時刻,也就是大約在支持 VISTA 的同時,grldr.mbr 也開始可以被 boot.ini 使用了。不過,在 Win2K/XP 下,使用 grldr 似乎更好,因為這樣做可以省略 grldr.mbr 這個檔。而如果使用 grldr.mbr,那麼根目錄下仍然需要一個 grldr 檔。

例如前面在2000/XP/2003下是通過在boot.ini中加入命令C:\GRLDR.MBR="Boot GRLDR.MBR",這時GRLDR.MBR的作用又是來找grldr,不如在boot.ini中直接載入grldr即可。 在grub4dos可以在boot.ini中通過c:\grldr="start grub4dos"來啟動。
但這種方式對Vista是無效的,所以,才出現了通過grldr.mbr來啟動grub4dos的想法。而且,通過grldr.mbr來啟動grldr更靈活,grldr沒有必要一定要放在c:\,任何一個分區的根目錄都是可以的。

目前在Vista下只能使用grldr.mbr,不能使用grldr。



註三:

grubinst中的grldr.mbr和grub4dos的grldr.mbr的代碼是不同的。為了使grldr.mbr可以直接能在boot.ini中啟動,我修改過第一磁區和中間某個地方的代碼,但具體在哪里我也忘了,要對比一下代碼才知道。你可以用grubinst源代碼包中的grldr.mbr比一下看看。





原理:

我發現NTLDR引導啟動檔的方式非常奇特:

如果檔大小<16磁區(8K),那麼整個檔被裝載到D00:0,不過只有第一個磁區的內容被拷貝
到0:7C00中,而且開始運行的位址是0:7C00。

如果檔大小=16磁區(8K), 那麼整個檔被裝載到D00:0,而且,開始運行的位址是D00:200

檔大小>16磁區(8K)的情況沒有測試,不過應該和=的情況是類似的。



96.3.22更新:根據不點的提示改動了一下grldr.mbr,現在該版本應該可以適用於XP系統下
96.3.22更新:修改了NTFS的代碼,現在應該能夠解決Large structure的問題







BootManager的MENU加入「啟動光碟」選項



title啟動光碟

cdrom --init

map --hook

chainloader (cd)





GRUB的兩個功能



GRUB有命令完成的功能,比如說,在命令行裏輸入

kernel (hd0,0)/

然後按TAB(不要按ENTER),那麼會自動列出(hd0,0)根目錄的檔,這也可用來測試GRUB內部對NTFS模組目錄列表的功能。

而且,grub.exe可以作為kernel來引導。你把grub.exe放在C:盤,然後用以下的命令:

kernel (hd0,0)/grub.exe
boot

即可進入grub,這也可用來測試GRUB內部的NTFS模組載入檔的功能。





修改GRLDR要注意,不是各版WINDOWS的NTLDR進入點都相同



各版本的ntldr進入點都不同,

XP 啟動一個長度大於或等於 8192 位元組的映射時,進入點是偏移 0x256 。為了保險起見,從偏移0x200 到 偏移 0x269 都要用 NOP 填充。然後在偏移 0x26A 處放置 JMP 指令。有些 NT 系列的進入點不是 0x200 也不是 0x256 而是別的。所以,需要用 NOP 填充上述區域。

另外,NTLDR 的 bootsector 和 NTLDR 檔本身又是兩個概念。不同版本的 NTLDR,可能差別不大,至少檔格式不會有太大差別。



而且Vista中NTFS結構比諸其他WINDOWS的也有改變。





NTFS中根目錄的檔太多解決方式

NTFS中目錄的檔案名是通過B樹來存儲的,在程式中要用遞迴的方法來讀取。我懷疑在某些情形下,演算法會出現問題。所以才隨機出現問題。

另外,如果根目錄的檔的確太多,那麼也可能會出現根目錄的內容在無法包含在一個MFT,而需要使用屬性列表attr_list。在代碼中沒有處理屬性列表。不過,這種情況極少出現。因為根目錄MFT裏只是存放目錄檔的索引,它表示方式類似於blocklist。因此,只有當目錄非常大,而且在磁片上非常分散的時候,才會出現MFT空間不夠用的情形。

另外,NTFS的代碼是經過了簡化才剛好能放在3個磁區裏的。現在的出錯資訊以代碼表示,也是為了省掉使用字串所佔用的空間。因此,如果要加入這個 attr_list 的處理代碼新功能,可能要把它擴展為4個磁區了。但我們還可以尋求別的辦法,比如壓縮代碼。或者壓縮引導磁區之外的那些代碼,它們應該能夠有較大的壓縮空間。我剛剛看了,4 個磁區的 NTFS 代碼是可以接受的,只要刪掉引導磁區以外的那些字串就行了,仍然可以保證 GRLDR 頭部的引導代碼處在 16 磁區之內。





INTEL CPU設計上的大缺陷

mulb 0x1a(%bp) /* nHeads, but maybe a word value 0x100 */
jnz 1f
movb %bl, %ah /* nHeads=0x100, so AX=sectPerTrack*0x100 */
1:



在相乘操作 MUL 之後,零標誌 ZF 是無定義的。所以,用 JNZ 是錯誤的,必將引發隨機失敗!這正好是 軟體 所遇到的情況。

這同時也顯示出 Intel CPU 設計上的一個缺陷(可以說是很大的一個缺陷)。

一個良好的 CPU 設計,應該在執行任何一條命令之後,都不出現“無定義”的標誌位元。因為這種“無定義”的狀態,沒有任何用處。注意,“無定義”並不等同於“保持指令執行前的狀態”。“無定義”等同於“隨機的”。

具體針對 mul 指令來說,當相乘的結果是 0 的時候,就應當設置 ZF 標誌(零標誌),反之,就應當清除 ZF 標誌,而完全沒必要把 ZF 搞成“無定義”的狀態,從而給程式師帶來巨大負擔。程式師有了負擔,那麼程式碼的品質就難以保證。這如果發生在 BIOS 和系統程式設計上,它的危害就更大。(其實 GRUB 就是一個小系統)。





VISTA只能處理8192 位元組的 grldr.mbr 引導映射,較小不行,大於 64K 的也不行

我沒有 vista,但從所有這些有關現象的報導來看,似乎有理由相信,vista 只能處理 8192 位元組的 grldr.mbr 引導映射,少於這個位元組數不行。而且,可能大於 64K 的也不行。

GRLDR 檔本身已經大於 64K 了,所以被 VISTA 拒絕。



grub4dos 0.4.2 發佈的 grldr.mbr 小於 8192 位元組,因此會顯示 missing MBR-helper. 如果把這個檔填充為 8192 位元組(末尾用 00 填補),就有可能讓 vista 來啟動了。(如果有問題,把 bean 的 grldr.mbr 中的第二磁區拷貝到(也就是覆蓋掉) grub4dos 0.4.2 發佈的 grldr.mbr 的第二磁區,這樣應該可以了)。

不過,grub4dos 0.4.2 發佈的引導代碼,引導 VISTA 的 NTFS 分區下的 grldr 是不行的。只能引導 VISTA 的 FAT 下的 grldr。





Bootmgr的MENU中文顯示不正常



Vista可用

bcdedit /set {bootmgr} locale zh-TW

可以把bootmgr的MENU改中文顯示的。但要確保在c:\boot\fonts中有字體檔;在c:\boot\zh-TW中有bootmgr.exe.mui





測試vista的bootmgr啟動的方法

其實測試vista的bootmgr啟動不需要安裝windows vista,只需要bootmgr bcd bcdedit.exe等幾個檔就可以了。
我這兩天測試都是在沒安裝windows vista的機子上進行的。



另外推薦一下自己安裝WinPE 2.0硬碟啟動版的方法,也可以用來研究VISTA的BOOT MANAGER:

1:首先到微軟2007-1-3發佈的下載 Windows 自動安裝工具包 (AIK)
微軟發佈頁 微軟下載頁
2:解壓或虛擬光碟機vista_6000.16386.061101-2205-3-LRMAIK_CN.img,安裝WAIKX86.MSI到C:\Program Files\Windows AIK



3:命令提示符下:

md c:\boot

xcopy /e /r /y "C:\Program Files\Windows AIK\Tools\PETools\x86\boot\*.*" c:\boot

md c:\sources

copy /y "C:\Program Files\Windows AIK\Tools\PETools\x86\winpe.wim" c:\sources\boot.wim

copy /y "C:\Program Files\Windows AIK\Tools\PETools\x86\bootmgr" C:\



4:用grldr chainloader /bootmgr就ok了,系统要求不高我256MB就能启动,放在U盘上随身携带到其它电脑上用。
5:另外还可以利用微软的ImageX封装工具修改"C:\Program Files\Windows AIK\Tools\PETools\x86\winpe.wim"镜像,我这里提供一个批处理放在"C:\Program Files\Windows AIK\Tools\PETools"就可以自行修改winpe.wim镜像了。
ImageX相关贴子http://www.cn-dos.net/forum/viewthread.php?tid=28030&fpage=1&highlight=



請打開附件 PETools.7z





抄出啟動磁區可以用grubinst:

grubinst --save=bs.out --read-only (hd0,0)

這樣會把(hd0,0)的啟動磁區保存到bs.out中,而且因為有--read-only,程式不會修改原來的啟動磁區

用diskrw應該也可以。

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

Ubuntu 筆記

Ubuntu 7.10 on X32: Compiz 問題

問題描述:簡單說,即便以前可以用「桌面特效」功能無誤,在使用 Ubuntu 7.10 時還是可能會遇上跟你說「無法啟用桌面特效」的情形。此情形 IBM ThinkPad X3x 系列很多會遇到。

Bug #124519 in compiz (Ubuntu): 「need to add max texture size check」
bugs.launchpad.net/ubuntu/+source/compiz/+bug/1245...

try to comment out lines 229 to 232 in /usr/bin/compiz and see if it enables composition

It works. 直接跳過這個檢查後重起 X 一切正常。


安裝 gcin 輸入法

UbuntuL10n - 維基百科
wiki.ubuntu.org.tw/index.php/UbuntuL10n#gcin

gcin

· 開啟終端機

sudo apt-get update
sudo apt-get install gcin

· gcin

im-switch -z zh_TW -s gcin

· 重新登入

· 按下 'Ctrl + Space' 啟動 SCIM



RMVB 檔沒有聲音


傑克魚的迴游通道: 在 Ubuntu 7.04 Feisty 中看RMVB
blog.jackfish.info/2007/05/ubuntu-704-feisty-rmvb....

然後你會發現你的 rmvb 有影無聲,所以要改一下 xine 設定檔

gedit ~/.xine/catalog.cache

找 [/usr/lib/xine/plugins/1.1.4/xineplug_decode_real_audio.so] , 把decoder_priority 的值改為 10 。
最後祝看片愉快。



修正 Ubuntu 和 Windows 時間不同步


安裝 Ubuntu 桌面 7.04 - OSWikiHK
wiki.linux.org.hk/w/%E5%AE%89%E8%A3%9D_Ubuntu_%E6%...

修正時區及時間

無論你選擇任何時區,Ubuntu 預設都會假定你硬體時鐘的時區為 UTC (即格林威治GMT)。如果硬碟有其他作業系統,而該系統又將硬體時鐘的時區假定為你所屬時區 (微軟視窗一般會如此)。當你在兩個作業系統交替啟動時,將做成時區混亂。所以建議你把硬體時鐘修正為你所在時區。

把 /etc/default/rcS 中的 "UTC=yes" 改成為 "UTC=no" :

# Set UTC=yes if your system clock is set to UTC (GMT), and UTC=no if not.
UTC=no

重新啟動系統。這時你的時鐘必會快了或慢了幾個小時,可以依以下方法修正:

$ sudo ntpdate stdtime.gov.hk # 根據你所指定的時間伺服器修正你的系統時鐘(軟體時鐘)

28 Oct 12:57.47 ntpdate[7297]: adjust time server 210.0.235.14 offset -0 .021044 sec

$ sudo hwclock -w # 根據修正好的系統時鐘(軟體時鐘)時間修正硬體時鐘的時間

建議改成 sudo ntpdate time.nist.gov



Automatix2 安裝


Installation - Automatix Wiki
www.getautomatix.com/wiki/index.php?title=Installa...

Installing Automatix2 on (K,X)Ubuntu 7.04 i386,AMD64 (Feisty)

From terminal do the following (ONE LINE AT A TIME HITTING ENTER AFTER EACH STEP):

First Step:

echo "deb http://www.getautomatix.com/apt feisty main" | sudo tee -a /etc/apt/sources.list

Second Step:

wget http://www.getautomatix.com/keys/automatix2.key

Third Step:

gpg --import automatix2.key

Fourth Step:

gpg --export --armor E23C5FC3 | sudo apt-key add -

Fifth Step:

sudo apt-get update

Sixth Step:

sudo apt-get install automatix2



Flash Plugin 快捷選單亂碼


今天的 Tetralet 又在唧唧喳喳了 | 讓 Firefox 的 Flash Player 能完整顯示中文!
tetralet.luna.com.tw/index.php?op=ViewArticle&arti...

讓 Firefox 的 Flash Player 能完整顯示中文!

在日前的 IRC Conf 會議上,Chia I Wu 兄提起了在 GNU/Linux 裡的 Firefox 的 Flash Plugin 的中文顯示問題。我們討論了一下,認為 Flash Plugin 很可能是把 AR PL KaitiM Big5、AR PL Mingti2L Big5 等幾個字型寫死在程式碼裡了。您可以使用:

strings /usr/lib/flashplugin-nonfree/libflashplayer.so | grep 'AR PL'


來看出一點端倪:除了這幾個字型之外,Flash Plugin 是無法抓到其它字型的。可是幾乎所有的 GNU/Linux 的中文使用者都已改用 AR PL ShanHeiSun Uni 及 AR PL ZenKai Uni 字型了,因而導致很多網頁裡的 Flash,像是 中央氣象局全球資訊網,裡面的字因為找不到字型所以全都是空白的。

Non-free 的軟體就是這麼麻煩:明明是問題一堆,想動手解決卻是無門可入。

今天突然想起了這個問題,於是嘗試了一下,終於找到了較為可行的解決方案:讓 AR PL ShanHeiSun Uni 偽裝成 AR PL Mingti2L Big5。GNU/Linux 可是極具可塑性的呦!

我直接裝 AR PL Mingti2L Big5 來用了,sudo apt-get install ttf-arphic-bsmi00lp 搞定。

Ubuntu 正體中文站 - firefox 的 flash9 右鍵選單亂碼 [論壇 - Ubuntu基本設定]
www.ubuntu.org.tw/modules/newbb/viewtopic.php?topi...

CreMaker 寫到:
① 目前的 flash 9 是使用如下的格式抓中文字型的,可以用 strings libflashplayer.so | grep big 得知

-*-*-*-*-*-*-*-*-*-*-*-*-big5-*

所以我們必需使用這種格式來可讓 flash 抓到中文字型

② 在 UBUNTU 7.04 中已安裝了 uming.ttf 及 ukai.ttf 字型,這兩個字型中都有 big5 的字型,可直接使用,就不必安裝一樣有 big5 字體的 firefly 字型了。

產生 fonts.dir 及 fonts.scale 檔案

cd /usr/share/fonts/truetype/arphic/
sudo mkfontdir
sudo mkfontscale

③ 修改 /etc/X11/xorg.conf 將 /usr/share/fonts/truetype/arphic/ 加到 Section "Files" 之中,如下:

Section "Files"
...
...
FontPath "/usr/share/fonts/truetype/arphic"
EndSection

④ 重新啟動(reboot),及檢查字體

由於 sudo xset fp rehash 似乎無法重新抓取字型,所以不妨 reboot 一下電腦,重新啟動後使用

xlsfonts | grep big5

看看是否有以下字型

-misc-ar pl shanheisun uni-medium-r-normal--0-0-0-0-p-0-big5-0
-misc-ar pl shanheisun uni-medium-r-normal--0-0-0-0-p-0-big5.eten-0
-misc-ar pl zenkai uni-medium-r-normal--0-0-0-0-p-0-big5-0
-misc-ar pl zenkai uni-medium-r-normal--0-0-0-0-p-0-big5.eten-0

如有的話,flash 應該可以抓到及顯示中文字了

此方法試用後無效,但 Flash 新版應該已經解決這個問題了




PDF 中文破字


Ubuntu中文 论坛 :: 閱讀主題 - [问题]如何解决 pdf 中文乱码
forum.ubuntu.org.cn/post-401130.html&sid=2f5c082dd...

sudo apt-get install xpdf-chinese-simplified xpdf-chinese-traditional

此方法試用後無效,workaround: 裝 Adobe Reader




X32 僅關機重開時會有音效



問題描述:X32在暖開機(重新啟動)或休眠再啟動後音效皆無用,僅有關機重開(冷開機)才會恢復正常。此問題目前無解,Ubuntu 處已經有回報 Bug。

Update: 看起來 7.10 解決了這個問題




Beryl Emerald 雙擊標題列最大化



在Beryl下让双击标题变成最大化和还原 - I'm TualatriX! - ...IMTX.CN...
imtx.cn/old/read.php/414.htm

用过Beryl的人都知道,Beryl默认的窗口装饰器──Emerald,在你双击窗口标题栏时,是把你的窗口卷起来,而不是一般的最大化/还原。
刚开始我以为这个是Emerald的特性,不能改的,今天弄窗口时,发现可以改的。所以就把这个改成我习惯的──即双击标题栏就是最大化/还原──相信也是所有从Windows过来的朋友的习惯。
首先在Beryl的红宝石图标上点击右键,选择“Emerald主题管理器”,然后切换到“Emerald设置”,把下面“标题栏双击行为”,从默认的“Shade”改成“Maximize/Restore”,就可以了,




使用 Beryl 後,標題列最大化會變白


Yuren's Info Area: [解決] 使用 Beryl 後最大化視窗後標題列空白
yurinfore.blogspot.com/2007/04/beryl.html

後來找了很多資料,終於知道該怎麼解決這個問題,其實只要在 xorg.conf 設定裡面加上下面的設定即可!

Section "Device"
Identifier "ATI Technologies Inc Radeon Mobility M6 LY"
Driver "ati"
BusID "PCI:1:0:0"
Option "XAANoOffscreenPixmaps" "true"
Option "AGPSize" "32"
EndSection




列印為 PDF


使用ubuntu製作PDF電子書 - 飛揚的web2.0口袋
www.koodai.com.cn/article.asp?id=218

1. 安装cups 和cups-pdf,其中cups-pdf是虚拟打印的主要模块:
  sudo apt-get install cups-pdf

7.10 之後新增 PDF 印表機即可

Ubuntu 最新7.10版發表提供下載

Ubuntu 7.10 的開發代號為 Gutsy Gibbon,該版本為用戶們帶來了一些令人興奮的新特性和改進。
Ubuntu 7.10 包括 Linux 內核 2.6.22,這對無線設備提供了良好的支援。同時,Ubuntu Gutsy Gibbon 將桌面環境建構在 X.org 7.2 之上。其中的 glibc 與 GCC 的版本分別為 2.6 和 4.2。
在桌面環境方面,Ubuntu 7.10 採用最新的 GNOME 2.20。你不僅能夠執行更為簡單的系統選項設置,而且可以從高效的電源管理中受益。而在 Kubuntu 7.10 這邊,除了默認搭載 KDE 3.5.8 之外,更集成了 KDE 的下一代版本 4.0 Beta 3 供桌面用戶體驗。
Ubuntu 7.10 通過默認包含的 Compiz 0.6.0 和 Compiz Fusion 0.5.2 將酷炫的 3D 桌面效果帶給了用戶。在 Ubuntu Gutsy Gibbon 中整合的 Tracker 和 Deskbar applet 能夠讓其使用者感受到桌面搜索的方便與強大。另外,快速用戶切換功能可以使用戶在多個會話之間輕鬆切換。
在 Ubuntu Gutsy Gibbon 中集成了圖形化的 X 配置工具和 Bulletproof X。其中,前者允許你配置顯卡的驅動程式、更改顯示器的解析度以及刷新率;而後者則讓你有機會對損壞的 X.conf 配置檔進行搶修。
Ubuntu 7.10 使印表機的配置更加自動化,並為你默認提供了輸出為 PDF 文檔的虛擬印表機。同時,改進了用戶對 Firefox 的體驗,使 Firefox 搜尋合適的插件更加容易,並支持從 Add/Remove 工具中直接安裝 Firefox 擴展。
一些重要軟體的新版本已包含到 Ubuntu 7.10 中,如辦公套件 OpenOffice.org 2.3、圖像處理軟體 GIMP 2.4 RC 3、即時通訊軟體 Pidgin 2.2.1 等等。
在 Ubuntu 7.10 中的其他改進還包括支援 NTFS 分區寫入、安裝時提供加密硬碟的選項、集成了 AppArmor、增強了受限驅動管理器等。此外,Ubuntu Gutsy Gibbon 還改進了美工設計,並包含了新的壁紙。

如何在筆記型電腦外接式硬碟第二分割區中Live安裝Ubuntu 7.10

如何在筆記型電腦外接式硬碟第二分割區中Live安裝Ubuntu 7.10

背景(硬體平臺):
我有一台華碩M2400N筆記型電腦,內建一個40G硬碟,上面已經裝了一個Windows XP Pro系統(這個硬碟在Ubuntu的安裝程式里的分區管理程式中顯示為'sda')。因為空間不夠,96.08.31到高雄市建國路欣亞花2550元買了希捷的USB外接式硬碟,120G大,是可移動的,放在NuSLIM外接盒內,算是超值(這個硬碟在Ubuntu的分區管理程式中顯示為'sdb')。但空間一時用不了這麼多,想試試裝UBUNTU當LiveCD玩玩,結果發現UBUNTU官網論壇、UBUNTU正體中文論壇、Google搜尋出來的有三、四種方法,但是都是整顆外接式硬碟或隨身碟直接分割給UBUNTU用,甚至還有人XP Pro、Vista全擠在內建硬碟,外接式的全給UBUNTU用,而UBUNTU全部安裝也只需要2.5~3G,平常業務上用不上UBUNTU,全部拿來試用還真是超浪費的。但也找不到其他方法,只好自己研究試試,自找麻煩當作不花錢的消遣,算是物價飛漲中的省錢絕招之一。
(UBUNTU正體中文論壇有一篇可用的,雖然受益良多,但用UBUNTU 7.04按文實作,外接式硬碟拆掉,XP就不能開,雖然他有提供修正方式,但是根本沒用,害我F碟資料險險被害死,後來找到SPFDisk把MBR清掉,才救回一條老命。)

硬碟規劃:


新的外接式硬碟購買時,可以請廠商先幫你分割好,也可以在Windows XP「控制台」->「系統管理工具」->「電腦管理」->「存放」->「磁碟管理」自行分割或調整。UBUNTU要用的部分我用XP先切好,留著不FORMAT,F碟則FORMAT成NTFS,先拿來使用,UBUNTU部分因為還在研究,所以後來才從網路(好像是SourceForge.net,要下載並燒成Live CD)找到可以分割Windows和Linux的Gparted 0.3.4-8免費分割軟體,切成Ext3和 SWAP兩部分。你也可以放著不管,等安裝UBUNTU時,再手動分割即可。記住!UBUNTU安裝時,千萬不要用「導引Guide」分割,那可是會FORMAT掉整顆硬碟。
另外,SWAP不用太大,只要你現有RAM的1~2倍即可,例如我有512MB RAM,留個800MB左右就差不多了,多了也不會提昇效率,反而浪費硬碟空間,不過也不能少於1倍,可能會影響系統效率,UBUNTU要求至少要有256MB。
此外,NTFS分割區放在第一個位置,主要是為了在Windows底下能讀取資料,因為Windows無法讀取Linux分割區(reiserfs,Ext3等檔案系統),因此必須將NTFS或Fat32放在第一個分割區(partition),這也就是為什麼安裝Windows和Linux雙系統時,必須先安裝Windows之故。.

免費取得UBUNTU最新CD:
目前 Ubuntu 最新穩定版本為 Ubuntu Gutsy Gibbon 7.10 (http://releases.ubuntu.com/gutsy/)
取得 Ubuntu 7.10 安裝光碟片有幾種方法。
l 下載(國內http://tw.archive.ubuntu.com/ubuntu-releases/7.10/,國外http://www.ubuntu.com/getubuntu/download
l 從 Canonical 基金會申請免費的 CD
或從表中選一個適用者按右鍵直接下載存檔



































































































或從表中選一個適用者

按右鍵直接下載存檔

Live CD提供圖形介面安裝

text-based installer文字介面安裝


Desktop

版(須384MB RAM以上
)


Alternate install

版(至少256MB)


Server


pc (x86 architecture, Pentium, Celeron, Athlon, Sempron)

交大

ubuntu-7.10-desktop-i386.iso

ubuntu-7.10-alternate-i386.iso

ubuntu-7.10-server-i386.iso

暨南大學

ubuntu-7.10-desktop-i386.iso

ubuntu-7.10-alternate-i386.iso

ubuntu-7.10-server-i386.iso

臺中縣教育網路

ubuntu-7.10-desktop-i386.iso

ubuntu-7.10-alternate-i386.iso

ubuntu-7.10-server-i386.iso

台大

ubuntu-7.10-desktop-i386.iso

ubuntu-7.10-alternate-i386.iso

ubuntu-7.10-server-i386.iso

國家高速網路中心

ubuntu-7.10-desktop-i386.iso

ubuntu-7.10-alternate-i386.iso

ubuntu-7.10-server-i386.iso

64bit AMD and Intel (Athlon64, Opteron, EM64T Xeon)

交大

ubuntu-7.10-desktop-amd64.iso

ubuntu-7.10-alternate-amd64.iso

ubuntu-7.10-server-amd64.iso

暨南大學

ubuntu-7.10-desktop-amd64.iso

ubuntu-7.10-alternate-amd64.iso

ubuntu-7.10-server-amd64.iso

臺中縣教育網路

ubuntu-7.10-desktop-amd64.iso

ubuntu-7.10-alternate-amd64.iso

ubuntu-7.10-server-amd64.iso

台大

ubuntu-7.10-desktop-amd64.iso

ubuntu-7.10-alternate-amd64.iso

ubuntu-7.10-server-amd64.iso

國家高速網路中心

ubuntu-7.10-desktop-amd64.iso

ubuntu-7.10-alternate-amd64.iso

ubuntu-7.10-server-amd64.iso
Sun UltraSPARC based 含 multicore UltraSPARC T1 (Niagara) processors
交大

 

 

ubuntu-7.10-server-sparc.iso

暨南大學

ubuntu-7.10-server-sparc.iso
臺中縣教育網路

ubuntu-7.10-server-sparc.iso

台大

ubuntu-7.10-server-sparc.iso

國家高速網路中心

ubuntu-7.10-server-sparc.iso

下載檔案大小將近700MB,最好用續傳軟體Flashget或Wellget分割成數十個檔下載,用2M寬頻大概要10分鐘。前提是你可能需要去書店或圖書館找找修改登錄檔密技,取消Windows預設可開port數目限制。或者到國家高速網路中心下載也有不錯速度。
還有,下載回來的是ISO檔,直接找NERO以映像檔低倍速燒錄即可,以免燒壞挑片。(我用4倍速燒2片都成功)

調整BIOS
系統安裝前你最好確認你的BIOS把CDROM設為第一順位啟動,USB設備設為第二順位啟動,硬碟第三順位啟動。調整BIOS方法是開機或重開機剛開始時(也就是作POST自我測試階段,PC是一堆數字在跳,我的NB是閃出ASUS大字馬上按),PC按Esc,NB按F2,就進入BIOS了。通常調整是在BOOT之下的Boot Priority,記得把CDROM或DVD放最上面,USB放第二,其他第三就對了。
還有不要把用USB連接的外接式硬碟當USB設備,要當硬碟,而且是第二顆硬碟,在我NB的BIOS是輪不到啟動的硬碟(因為只有三個順位)。只有早期BIOS會把他當作USB設備,而落後的UBUNTU不僅把他和USB設備一起當作SCSI硬碟處理,甚至連我內建硬碟(兩顆都是IDE),都當作SCSI硬碟。(代號hd*為一般IDE硬碟,sd*為SCSI,UBUNTU安裝時的分割步驟畫面就是這樣寫)
談到這裡,無法啟動的外接式硬碟如何當UBUNTU Live CD用?把多重開機軟體Grub裝在外接式硬碟啟動磁區bootsector等於沒用(輪不到他啟動,只能啟動第一顆內建硬碟),裝在MBR,只要拆了外接式硬碟,Grub找不到就出ERROR,連內建硬碟都無法開機。就算把Grub目錄搬到外接式硬碟的哪個地方都一樣。這也就是UBUNTU正體中文論壇那篇文章我無法比照成功的根本原因。
所以,理論上只要BIOS有支援,USB隨身碟一定可當Live CD用(因為他第二順位,有插,他比內建硬碟先啟動,可以多重開機,沒插就是內建硬碟啟動,不影響原有系統),而外接式硬碟不要說沒插沒份,就算有插,當第二顆硬碟,BIOS也預設比內建硬碟晚啟動或輪不到他啟動。
當我幾經重裝試驗安裝UBUNTU,研究Grub2.0這個UBUNTU使用的多重開機軟體(我非資訊本科不是很懂),這個困境讓我外接式硬碟又可廉價大大擴充硬碟空間又可當Live CD的美夢頓時破碎(比諸隨身碟),害我真是欲哭無淚!尤其被UBUNTU正體中文論壇那篇文章誤導,在外接式硬碟搬動Grub安裝到每一個partition,又發現UBUNTU 7.04只能讀不能寫NTFS而差點放棄,直到UBUNTU 7.10適時發佈可以寫NTFS,我又不死心的安裝幾次,才終於找到土法煉鋼的解法,但不是任何電腦通用的或者是最佳解法。或者你的BIOS啟動順位有4個(含)以上,應該可以用Grub的hide partition、map等巧妙手法解決這個問題,或者你有裝在MBR的高超多重開機軟體可能也可以解決這個問題,也願意給一點指點,那就算我拋磚引玉了。
因為我不懂啟動軟體如何設計,對Grub 2.0研究也不深,借鑑前人整顆外接式硬碟裝UBUNTU步驟(最好看UBUNTU官方論壇原文,大陸的翻譯文章有點錯漏),然後我以UBUNTU的Desktop版CD在我的NB的BIOS只有三個順位條件下,用最簡單的方法,以少數Grub指令修改了UBUNTU多重開機選單,然後每次要用UBUNTU時,開機前插入外接式硬碟並開機按F2手動更改BIOS啟動的第三順位硬碟為外接式硬碟,就可以人工Live啟動外接式硬碟上的多重開機選單。以後不拔除外接式硬碟重新開機使用時都沒影響還是多重開機選單,但是拔掉再重開機,BIOS會自動以內建硬碟遞補第三順位啟動XP,即使插入外接式硬碟,不修改BIOS之下,都是直接XP開機。想進UBUNTU,記得插入外接式硬碟再開機或重開機並修改BIOS以外接式硬碟為第三順位開機就可以了。
以我的AMI牌BIOS說明,在asus閃動時按F2進入BIOS(PC按ESC),選擇上方功能列「Boot」,按向上鍵、向下鍵選擇「Hard Disk Drives」按Enter,在「1st Drive」按Enter選擇外接式硬碟機代號(參考你的硬碟機說明書),一般NoteBook內建硬碟多為日立牌(Hitachi)如我的內建硬碟代號為PM-HTSxxxxx,外接式硬碟為希捷牌(Seagate)代號為STxxxxxx,在這裡就選STxxxxxx,向下鍵選「2nd Drive」硬碟機代號選PM-HTSxxxxx完成。然後ESC回原來「Boot」選單用向上鍵、向下鍵選「Boot Device Priority」檢查第三順位代號是否外接式硬碟代號,確認後F10存檔離開。
詳細步驟如下說明:

安裝UBUNTU 7.10
(一)安裝前確認事項:
1. 已插入外接式硬碟,燈號也正常亮起。
2. BIOS確認啟動第一順位DVD或CDROM,第二順位USB設備,第三順位為「內建硬碟機號」不是「外接式硬碟機號」。
3. 光碟機內已放入燒錄好的UBUNTU 7.10 Desktop版 Live CD,並已關好光碟機門。

(二)進入Live CD進行安裝選項調整:
1. 開機或重開機。
2. 看到UBUNTU畫面按Esc鍵,出現對話方塊問你是否進入文字模式,直接按YES,進入黑螢幕並出現「 boot> 」提示命令。
3. 在「 boot> 」提示命令後面鍵入「 live nolapic 」再按 ENTER直接啟動UBUNTU 。
(PC或沒問題的NB可以直接在UBUNTU畫面F2選擇語言F4選擇螢幕解析度直接讓他啟動,不用按Esc鍵,我的NB直接啟動會黑螢幕當機,查閱UBUNTU安裝指南才知道很多Laptop即NB,會有ACPI問題,需要這個指令。)
4. 啟動後安裝過程會要求你提供一些資訊:
A要求選擇你的語言。
B你的所在地區(語言)。
C你的鍵盤類型。
D偵測列出你的硬碟狀態。
E務必選擇「手動」分割第二顆硬碟(外接式硬碟),Edit第二顆硬碟(外接式硬碟)的每一個partition,定義組態如前面「硬碟規劃」的表。
F為你的PC、NB取個名字(家用時)或提供HOST NAME(PC、NB位於公司內部網路時問你的網管)。
G偵測硬體並開始安裝的硬碟分割階段,出現Ready to install畫面。
H 仔細檢查要格式化的分割區是否正確,有錯按上一頁、上一頁修改。
I 無誤按「Advance」鍵(位於「Install」鍵正上方)出現「Advanced Option」畫面。
J 確認該畫面「 install boot loader 」前面有打勾,「用來安裝開機程式的裝置」下方預設「(hd0)」改為「(hd1)」然後按「確定」鍵回Ready to install畫面。(不修改「Advance」鍵,開機程式會安裝在預設的hd0即內建硬碟,此時該硬碟已有XP系統開機程式進駐,UBUNTU的開機程式會自動建在MBR建立多重開機程式,以後拆掉外接式硬碟,內建硬碟即無法開機,所以必須改安裝在外接式硬碟(hd1)上。)
K 按「Install」鍵開始安裝。中間會說網路問題無法安裝security程式,不用理他,後面設定好網路連線時再解決。
5. 安裝完會出現要求「重新啟動」及「繼續使用Live CD」按鈕的對話方塊,請暫時都不要動到,先進行以下步驟。
6. 左上角選按「Applications」->「Accessories」->「Terminal」,出現「Terminal」對話方塊,在「ubuntu@ubuntu:~$」提示命令下輸入: sudo gedit
7. 開啟gedit程式畫面,選「open」按鈕,預設會在「Desktop」資料夾,選擇左欄的「File System」後,在其右欄找到target資料夾進入找root資料夾再進入下一層grub資料夾下的menu.lst檔,或是「sudo gedit /target/root/grub/menu.lst」直接開啟(/target為安裝時的暫時目錄,安裝時修改用/target/root/grub/menu.lst安裝後用/root/grub/menu.lst修改並用grub-install指令重裝以生效,詳見下面「註解」),編輯開機選單將裡頭有關ubuntu選項的地方 有(hd1,1)字樣用(hd0,1)取代,這是告訴他當我們修改BIOS設外接式硬碟為開機碟時,外接式硬碟對開機程式Grub即為主硬碟hd0,也即是要用到UBUNTU的時候,所以必須把所有title UBUNTU底下的根目錄改成 hd0,其中(hd0,1)前面的數字代表磁碟機編號,由0起算,後面代表partition編號,也由0起算,(hd0,1)代表主磁碟第二個分割。

即改

title Ubuntu, kernel 2.6.22-14-generic
root (hd1,1)
kernel /boot/vmlinuz-2.6.22-14-generic root=UUID=3199682b-71e1-4367-8451-56d315652f25 ro quiet splash nolapic
initrd /boot/initrd.img-2.6.22-14-generic
quiet
savedefault

title Ubuntu, kernel 2.6.22-14-generic (recovery mode)
root (hd1,1)
kernel /boot/vmlinuz-2.6.22-14-generic root=UUID=3199682b-71e1-4367-8451-56d315652f25 ro single
initrd /boot/initrd.img-2.6.22-14-generic

title Ubuntu, memtest86+
root (hd1,1)
kernel /boot/memtest86+.bin
quiet

成為

title Ubuntu, kernel 2.6.22-14-generic
root (hd0,1)
kernel /boot/vmlinuz-2.6.22-14-generic root=UUID=3199682b-71e1-4367-8451-56d315652f25 ro quiet splash nolapic
initrd /boot/initrd.img-2.6.22-14-generic
quiet
savedefault

title Ubuntu, kernel 2.6.22-14-generic (recovery mode)
root (hd0,1)
kernel /boot/vmlinuz-2.6.22-14-generic root=UUID=3199682b-71e1-4367-8451-56d315652f25 ro single
initrd /boot/initrd.img-2.6.22-14-generic

title Ubuntu, memtest86+
root (hd0,1)
kernel /boot/memtest86+.bin
quiet

另外找到XP開機選項部分
title Windows XP Professional
root (hd0,0)
savedefault
chainloader+1

修改為
title Windows XP Professional
rootnoverify (hd1,0)
savedefault
map (hd0) (hd1)
map (hd1) (hd0)
makeactive
chainloader +1

存檔關閉menu.lst檔,但先不要離開gedit。

提示:當你的UBUNTU更新KERNEL版本時,可能就需要重新執行上面步驟。一旦更新完KERNEL啟動XP有問題,記得回來檢查root這一行是否需要再改一次。

註解:上面「提示」為引用別人文章,但他們「XP開機選項部分(title Windows XP Professional)」部分,只是將root (hd0,0)改為 root(hd1,0),我在實際操作過程中發現,這樣修改進入多重開機選單不選Linux,而選XP開機,會出現找不到ntldr的ERROR而無法順利啟動。(可能他們沒改Advance按鈕預設hd0安裝,而XP開機程式裝在內建硬碟hd0,UBUNTU自動把多重開機裝在MBR所以沒有這種狀況,而我為了Live改Advance按鈕裝在外接式硬碟hd1上)。我曾經試著修改chainloader +1為chainloader (hd1,0)/ntldr,告訴他ntldr的位置,卻又出現無法掛載(mount)的ERROR,上Grub網站查Manual,發現root指令修改根目錄位置會試圖掛載(mount),改用rootnoverify指令功能相同卻不會試圖掛載(mount),修改後的確沒有無法掛載(mount)的ERROR,但還是找不到ntldr,後來上網再查閱類似文章發現,XP只在hd0情況下開機,因此又上Grub網站的Manual 找到map 至 makeactive相關指令加了進去(另有hide、 unhide指令沒試過), 並把chainloader 改回chainloader +1,在多重開機選單用「e」編輯指令、「o」插行指令改好,用「b」指令開機成功。原來rootnoverify (hd1,0)我沒改回root,估計影響不大,你可以試著改看看。不過這還沒完,我進入UBUNTU把成功的指令改進menu.lst,下次XP開機還是出問題,而且在多重開機選單用「e」編輯指令看到的是為修改的內容,但menu.lst內容為改過的,所以我又進了UBUNTU,利用上面提過的Terminal終端機視窗,下如下指令重裝一次開機程式使修改生效:
在「你的使用者名稱@ubuntu:~$」提示命令下輸入:
sudo grub-install /dev/sdb
關閉Terminal終端機視窗重開機即OK。

8. gedit程式畫面,選「open」按鈕,找到「/target/etc/initramfs-tools/modules」開啟,編輯"modules"文件,修改一下好讓Ubuntu在啟動時支持USB設備:

在打開的文件的末尾,增加下面幾行:

ehci-hcd
usb-storage
scsi_mod
sd_mod

注意,可一定要先存檔才能關檔,不要關gedit。

9. gedit程式畫面,選「open」按鈕,找到「/target/etc/initramfs-tools/ initramfs.conf」開啟,編輯“initramfs.conf”文件,好讓Ubuntu在運行之前有充足的時間載入對USB設備支持的模塊。

在打開的文件開頭,增加這一行好讓Ubuntu在開始運行之前停留12秒鐘:

WAIT=12 (雖然不確定但wait這裡全部大寫)
注意,要存檔才能退出gedit。

雖然我們為了讓Ubuntu識別這個USB外接式硬碟,已經修改了這兩個文件以載入取得USB支援的必要指令,但我們仍然需要重新編譯(或重新產生)Ubuntu在啟動時使用的這個文件initrd.img,以使這些修改確實生效。

10. 重新編譯(或重新產生)initrd.img 檔案:回到Terminal終端機視窗,在「ubuntu@ubuntu:~$」提示命令下輸入: sudo mkinitramfs -o /boot/initrd.img-2.6.22-14-generic /lib modules/2.6.22-14-generic

備註:在執行完步驟10你可以在終端機視窗先執行ls /lib/modules指令察看KERNEL的版本號碼或是在上面gedit視窗時按「Open」鈕時順便去「/target/root/」資料夾下找initrd.img-2.6.22-14-generic檔看前面劃底線處有無不同,通常更新KERNEL該版本號碼會加大,執行步驟10時應該用你的版本號碼代替。例如UBUNTU5.10的版本號碼是2.6.12-9-386,我的UBUNTU 7.10是2.6.22-14-generic。另外步驟8-10有文章說可以省略,你也可以試試看。

說明:其實參考官方論壇文章,他們安裝UBUNTU 5.10是用所謂「install CD」,大約執行到步驟5應該按重新啟動鈕,,然後就會彈出CD,要你重啟一下系統。而重開機前則要再次將光碟放入並確定光碟機已關上,光碟啟動後在"boot"提示符下輸入rescue(以進入rescue模式)。但是我找了「Desktop」、「Alternate」版CD,在啟動畫面按Esc鍵進入"boot"提示符下輸入rescue都提示ERROR或KERNAL無此命令。因此我才自行摸索出以上步驟。完成上面步驟後,我也曾經在Terminal終端機視窗輸入sudo mount /dev/discs/disc1/part1或是 mount /dev/discs/disk1/part1,都是ERROR,不死心接著打sudo mount –t proc /target/proc,說我mount指令錯誤,接著按說明改成mount –t proc /dev/sdb2 /target/proc說沒有root權限,只有sudo chroot /target成功,並進入root@UBUNTU:/#提示符號,還有輸入su指令也成功。最後我在「root@ubuntu:/#」提示命令下輸入 sudo chroot /成功後,關閉Terminal終端機視窗走上最後正式安裝的旅程。

(三)重新啟動進行套件更新及安裝後設定調整
回到「重新啟動」及「繼續使用Live CD」按鈕的對話方塊,按「重新啟動」之後,過一陣子會跳出光碟片要求你取出並關好光碟機再按ENTER,Ubuntu就會開始重開機,進入開機選單之後選UBUNTU進入桌面環境。用你在安裝過程中設定的用戶名和密碼進入系統即可。官方說明文件大概就到這裡,但是對中文UBUNTU而言,還要進一步設定網路、下載套件,很多好用多媒體工具MP3、RealPlayer、CODECS等也沒有,對初學者很不方便。強烈建議接著安裝Ubuntu 超級懶人包 – Lazybuntu修正版(只支持UBUNTU 7.110),安裝和設定中文 Ubuntu,史上第一次,變得這麼簡單。3個步驟,搞定你的 Ubuntu ,自動幫你解決以往安裝後許多複雜的設定、調整,和一些不好安裝的軟體,終於可以告別大量指令和設定檔修改的噩夢。

Lazybuntu 計畫首頁: http://lazybuntu.openfoundry.org/
Ubuntu 英文論壇, 請見http://ubuntuforums.org/showthread.php?t=584503中文UBUNTU論壇也有且是作者PCMAN親自回應)

給想嚐試Ubuntu 7.10繁體中文使用者的使用建議:(新版可支援7.04但都不支援64位元電腦)
1. 請在 Windows 下下載好 Lazybuntu 懶人包,網址http://lazybuntu.openfoundry.org/
2. 把下載的檔案放進隨身碟
3. 在透過光碟安裝好 ubuntu 後,先進入「管理」-「Synaptic套件管理程式」-「設定setup」-「套件庫Repository」-「Ubuntu軟件」全打勾,「下載於」欄位改Taiwan Server,-「Third Party Software」也全打勾,-「Updates」勾重要的、建議的安全更新,「自動更新」部分隨意,按「關閉」。左上角兩個黑螢幕小圖示按一下,到「Configure…」設定你的上網網路帳號密碼,全部按「YES」,連上網路後,再去「應用程式Application」-「AddRemove新增移除程式」如出現「…Applications out of date」畫面按「Reload」然後關閉,到「管理」-「LanguageSupport」如出現「the language support is not installed completely」畫面請按「install」鍵,安裝後勾選「Chinese」為supported language,按「Apply」再按「OK」。關掉再進「管理」-「UpdateManager」看能否更新套件,如有更新就更新,然後插入你的隨身碟
4. 從隨身碟中找到 Lazybuntu 的檔案,複製到UBUNTU桌面
5. 對著下載的 Lazybuntu 壓縮檔按右鍵,選擇在此解壓縮。
6.此時會解開 Lazybuntu 執行檔,對此圖示雙擊後,會詢問你的密碼,請輸入您的使用者密碼以獲得管理者權限。
7.輸入密碼後,則會進入 Lazybuntu 安裝畫面。左邊是各種軟體及程序的分類,點擊後可以觀看有哪些軟體、程序可以安裝及執行。如果您是 Ubuntu 新手,Lazybuntu 已經預設選擇好新手通常需要的項目,您僅需要按下套用即可。對該安裝什麼軟體熟悉的使用者,可以依項選擇所需的軟體。
8.按下套用後,右方的終端機視窗會顯示安裝的流程。等待出現 Lazybuntu 安裝完畢的藍色字樣,後 Lazybuntu 即安裝完畢。請點選關閉,並建議您重新開機讓所有設定都生效。

結語
最後再提醒一次,每次要用UBUNTU時,要在開機前插入外接式硬碟並開機按F2手動更改BIOS啟動的第三順位硬碟為外接式硬碟,就可以人工Live啟動外接式硬碟上的多重開機選單。以後不拔除外接式硬碟重新開機使用時都沒影響還是多重開機選單,但是拔掉再重開機,BIOS會自動以內建硬碟遞補第三順位啟動XP,即使插入外接式硬碟,不修改BIOS之下,都是直接XP開機。想進UBUNTU,記得插入外接式硬碟再開機或重開機並修改BIOS以外接式硬碟為第三順位開機就可以了。

參考文獻:
隨身碟
1. 如何把ubuntu 7.04(完整Linux系統,非Live CD)裝入隨身碟中(傻瓜必勝版),http://www.wretch.cc/blog/billypan101&article_id=8891814
2. 2007/05/05 補充: 移到第二台電腦時,有時會出現顯卡不相容的問題,這有解決方法,在此: 把我們的 Ubuntu 7.04 USB 隨身作業系統改造成任何電腦都能開機,http://www.wretch.cc/blog/billypan101&article_id=8962479
整顆外接式硬碟
1. 如何在外置USB磁碟中安裝Ubuntu,http://blog.sina.com.tw/mic1491/article.php?pbgid=27258&entryid=570582 (官方論壇英文文章的簡體翻譯版,有點錯漏)
2. 將Ubuntu 灌在USB硬碟 , http://smallperh45.blogspot.com/2007/05/ubuntu-ubuntu-usb-ubuntu.html
3. 啟動安裝於外接式 USB 硬碟的 Ubuntu,http://xml.nchu.edu.tw/blogs/?page_id=85 (內置硬碟裝XP及Vista用大陸免費簡體Grub4Dos多重開機程式解決,設定調整也不錯)
4. Installing Ubuntu on External USB HDD,http://www.belutz.net/2007/04/13/installing-ubuntu-on-external-usb-hdd/ (按官方論壇英文文章省略步驟8至11仍成功)
5. 官方論壇英文文章,忘記網址,可上論壇SERCH找External 或USB HDD
外接式硬碟第二分割區
1. 中文官方論壇文章。(這個方法我的機器不太能用)
2. How to dual boot Ubuntu and Windows XP without changing the Windows MBR,有個不用修改MBR又可多重開機的方法:
A將開機程式bootloader安裝在軟碟,亦即設定帳號密碼後面的Ready to Install畫面,按Advance鍵將開機程式安裝從內置硬碟「(hd0)」改在軟碟「/dev/fd0」
B 安裝完先開Terminal終端機視窗輸入「dd if=/dev/fd0 of=bootsect.lnx bs=512 count=1」將開機程式彙整輸出到bootsect.lnx檔,存在Windows可以存取的地方(用FAT格式,可以是軟碟或隨身碟,但不可以是XP下的NTFS分割區)(已安裝者在Terminal終端機視窗輸入grub-intall /dev/fd0,但作者不確定是否可行)
C 移除軟碟或隨身碟,重新啟動Windows系統
D插入軟碟或隨身碟,拷貝該檔到C碟,即c:\bootsect.lnx
E 修改c:\boot.ini在最後面加上一行「c:\bootsect.lnx=”Linux”」存檔重開機即可多重開機
(我的NB使用USB軟碟機試過不能用,僅供參考)

延伸研究建議:
1. 可以研究試用免費的Grub4Dos解決,該程式仍在不斷改版中。
2. 研究Grub 2.0組合可行的方式。不過Grub 2.0已經很久沒更新了。
3. 測試軟碟安裝開機程式的方法。
4. 直接正常安裝UBUNTU,讓開機程式裝在MBR上,但修改menu.lst,將title UBUNTU所有段的root都改成rootnoverify,hd0、hd1照改