以前在 Windows XP 中用 grub4dos 引導 linux 很容易,直接改 boot.ini 就行了。現在換了 Win7 ,結果反而更麻煩了。
基本步驟是:
- 下載 grub4dos:https://gna.org/projects/grub4dos/
- 把 grldr.mbr 和 grldr 拷到 C:/
- 用 bcdedit 添加一個 bootsector 類型的 BCD 啟動項,運行 grldr.mbr
- 啟動的時候,grldr.mbr 會在各個分區下搜尋 grldr,並裝載之
詳見:
http://bbs.znpc.net/viewthread.php?tid=2300&extra=&page=1
http://grub4dos.sourceforge.net/wiki/index.php/Grub4dos安裝和啟動
但我遇到的問題更麻煩:我的 Win7 是用 grldr 類比 BIOS 啟用的!
也就是說 MBR 裡的內容已經是 grldr.mbr,而且 C:/ 本來就有一個 grldr ,但那個 grldr 是定製過的,包含著 BIOS 資訊,還內建了 menu.lst,我不能覆蓋,也不能修改。
經過各種嘗試,終於找到了一種解決方案:用 16 進位編輯器修改 grldr.mbr ,將裡面的 grldr 全部替換成 gdldr 。再把 grub4dos 原版的那個 grldr 改名為 gdldr 放在 C:/ 下。這樣 Win7 啟動的時候,選擇 grldr.mbr 的菜單,會尋找 gdldr 並裝載。如此一來就完美地解決了用 grldr 啟用的的 Win7 無法再使用 grldr 引導 linux 的問題。
大家可以參考下面兩幅圖:
1. 如果不修改 grldr.mbr,只用常規方法的話,會陷入死迴圈:
2. 修改 grldr.mbr ,成功跳出死迴圈:
還有就是 menu.lst 的寫法。因為我希望在 Windows 的引導菜單能夠進入 grub,而在 grub 的菜單中也能回到 Windows。在 grub 中引導 Windows XP 我們只需要這樣寫:
title Windows XP<br /> rootnoverify (hd0,0)<br /> chainloader +1
但自從 Vista 之後,Windows 的引導管理器就由 ntldr 變成了 bootmgr ,menu.lst 的寫法也要這樣:
title Windows 7<br /> acpi<br /> fallback 1<br /> root (hd0,0)<br /> chainloader /bootmgr