Linux + NT OS Loader mini-HOWTO 中譯版 <author> 作者: Bernd Reichert <tt><htmlurl url="mailto:reichert@dial.eunet.ch" name="reichert@dial.eunet.ch"></tt><newline> 譯者: <htmlurl url="http://www.phys.ntu.edu.tw/~cwhuang/pub/" name="C.W.Huang"> <tt><htmlurl url="mailto:cwhuang@phys.ntu.edu.tw" name="cwhuang@phys.ntu.edu.tw"></tt> <date>v1.11, 2 September 1997 翻譯日期: 11-12 November 1997 <abstract> 本文件描述了使用 Windows NT boot loader 來啟動 Linux 的方法. </abstract> <toc> <sect>摘要 <p> 本文件描述了使用 Windows NT boot loader 來啟動 Linux 的方法. 本過程已在 Windows NT 4.0 Workstation 版及 Linux 2.0 上測試過. <sect>NT OS Loader 是如何運作的? <p> NT OS loader 希望來自其它作業系統的啟動磁區變成一檔案來取用. 它讀入這檔案並啟動選擇的作業系統,也就是說,或是不同模式運作的 Windows NT 或是任何其它的作業系統. <sect>如何安裝 Windows NT 及 Linux 在同一系統上的提示 <sect1>安裝 Windows NT <p> 先試著安裝 Windows NT.如果你想使用 NTFS 作為你 Windows NT 分割區的檔案系統,記住,目前版本的 Linux 無法取用 NTFS 的分割區. 一個可以讀 NTFS 分割區的 Alpha 版驅動程式可在 <tt><htmlurl url="http://www.informatik.hu-berlin.de/~loewis/ntfs" name="http://www.informatik.hu-berlin.de/~loewis/ntfs"></tt> 找到. 你可建立另外一個 FAT 分割區作為資料交換用,或是你可以使用 DOS 格式化的軟碟片. <sect1>分割磁碟 <p> 另外一個 mini-howto 建議不要使用 NT 的"磁碟系統管理員"來建立 Linux 的置換以及根目錄分割區. 它會留下一些空間.我也建議使用 Linux 的 fdisk. <sect1>安裝 Linux <p> 現在從磁片上啟動 Linux,建立置換及根目錄分割區.Fdisk 會將 NTFS 分割區認為是 HPFS 分割區,這是正常的. 再次從磁片啟動 Linux 並按你的喜好安裝 Linux. <p> 在安裝過程中建議你掛上它找到的 HPFS 分割區時: 忽略它. <sect1>Lilo <p> 當你做到安裝 Lilo 的部份時,指定你的 Linux 根目錄分割區作為你的啟動裝置因為你磁碟的主啟動記錄(MBR)現在是 Windows NT 所有. 這表示在你 <tt>/etc/lilo.conf</tt> 的 root 項目及 boot 項目會有相同的值. 如果你有一個 IDE 硬碟且你的 Linux 分割區是在第二塊分割區上,你 <tt>/etc/lilo.conf</tt> 的 boot 項目看起來會像: <tscreen><verb> boot=/dev/hda2 </verb></tscreen> 如果你有兩個磁碟機而且你的 Linux 位於第二顆磁碟的第一個分割區上,你 <tt>/etc/lilo.conf</tt> 的 boot 項目看起來會像: <tscreen><verb> boot=/dev/hdb1 </verb></tscreen> 以符合你系統的核心執行 lilo.如果你不確定的話從磁片上啟動以檢查核心. <p> 如果你現在無法啟動 Windows NT,你有麻煩了.我希望你已經建立了最近的修復磁片. <sect>Bootpart <p> 有一個由 G. Vollant 所寫的 NT 程式叫 bootpasr 可以為你做到下述的兩點. Bootpart 可在此取得: <tt><htmlurl url="http://ourworld.compuserve.com/homepages/gvollant/bootpart.htm" name="http://ourworld.compuserve.com/homepages/gvollant/bootpart.htm"</tt>. <p> 如果你想知道事情是如何運作的,使用第五及第六節描述的步驟. <sect>Linux 部份的工作 <p> 你必須從磁片上啟動 Linux 直到 NT 部份改好為止. <p> 現在你必須從你的 Linux 根目錄分割區中取出啟動磁區. 如果 <tt>/dev/hda2</tt> 是你的 Linux 分割區,這個 <tt/dd/ 指令是: <tscreen><verb> # dd if=/dev/hda2 of=/bootsect.lnx bs=512 count=1 </verb></tscreen> 如果你的 bootsect.lnx 超過了 512 個位元組那麼就有些事不對勁. <p> 現在將檔案 bootsect.lnx 拷貝到一片 DOS 格式化過的磁片中,如果這是你將檔案傳到 NTFS 分割區內的方法的話. <p> 你可以這樣來拷貝 <tscreen><verb> # mcopy /bootsect.lnx a: </verb></tscreen> 或者用 <tscreen><verb> # mount -t msdos /dev/fd0 /mnt # copy /bootsect.lnx /mnt # umount /mnt </verb></tscreen> <sect>Windows NT 部份的工作 <p> 從磁片上將檔案拷貝到 <tt>C:\bootsect.lnx</tt>. 我不會告訴你怎麼做. (譯注: <tt>copy a:bootsect.lnx c:\</tt>, 應該會吧.) <p> 就像 Linux 下的 lilo.conf, 在 Windows NT 中是 <tt>c:\boot.ini</tt>. 在你編修它之前用這個指令除去它的系統及唯讀屬性: <tscreen><verb> C:\attrib -s -r c:\boot.ini </verb></tscreen> 現在用一編輯器更改 <tt>boot.ini</tt> 檔案,例如 notepad, 像這樣: <tscreen><verb> [boot loader] timeout=30 default=multi(0)disk(0)rdisk(0)partition(1)\WINNT [operating systems] multi(0)disk(0)rdisk(0)partition(1)\WINNT="Windows NT Workstation ... multi(0)disk(0)rdisk(0)partition(1)\WINNT="Windows NT Workstation ... C:\BOOTSECT.LNX="Linux" </verb></tscreen> 在本例中只加入了最後一行.在你儲存 <tt>boot.ini</tt> 後用這個指令回復它的屬性: <tscreen><verb> C:\attrib +s +r c:\boot.ini </verb></tscreen> 在關掉你的 Windows NT 並重新啟動後你應該會看到像這樣的: <tscreen><verb> OS Loader V4.00 請選擇您想要啟動的作業系統: Windows NT Workstation Version 4.0 Windows NT Workstation Version 4.0 [VGA mode] Linux 使用↑鍵和↓鍵將您想要的選項反白, 選定後請按 Enter 鍵確認 </verb></tscreen> 選擇 Linux 並會看到 <tscreen><verb> LILO loading zImage .... </verb></tscreen> <sect>再做一次 <p> 每次你 Linux 分割區的啟動磁區被修改後一份新拷貝的 bootsect.lnx 就必須轉移到 <tt>C:\BOOTSECT.LNX</tt>. 一個例子是當你重新用 lilo 安裝一新的核心時. 因此你可以看出這樣的系統並不適合用來測試實驗的核心. <sect>排除問題 <p> 如果事情並不按照預期的運作,用一磁片來檢查可啟動性. 如果 <tt>/dev/hdb1</tt> 是你的 Linux 分割區,你的 <tt>/etc/lilo.conf</tt> 有下列的項目: <tscreen><verb> root=/dev/hdb1 boot=/dev/fd0 </verb></tscreen> 插入一磁片並執行 lilo. 現在嘗試從磁片上啟動. 如果你在 <tt>/dev/hdb1</tt> 上的 Linux 無法被啟動,那麼 NT OS loader 也將無法啟動它. 如果你看到一大堆 <tt>01 01 01 01</tt>,表示你的 root 磁碟無法取用. 檢查是否你所有的磁碟都被 BIOS 偵測到. <p> 如果這磁片可以啟動你的 Linux 分割區,你可以用下面指令取出你的啟動磁區給 NT OS loader 用: <tscreen><verb> # dd if=/dev/fd0 of=/bootsect.lnx bs=512 count=1 </verb></tscreen> <p> 你可保留這磁片在你的 Windows NT 安裝出問題時作為你的急救磁片. <sect>其它 <sect1>參考資料 <p> <itemize> <item>The Linux+WindowsNT mini-HOWTO <item>The FAQ for FreeBSD 2.X </itemize> <sect1>感謝 <p> <itemize> <item>感謝 Xiaoming Yi <z3c20@ttacs.ttu.edu> 提示這些過程也在除了第一顆磁碟外的其它磁碟上運作. <item>感謝 Frank Dennler <Frank.Dennler@zkb.ch> 提供的磁碟技巧. </itemize> <sect1>回饋 <p> 任何意見都很歡迎. <sect1>譯注: 以 NT Loader 啟動 FreeBSD <p> 因譯者的電腦中除了 Windows NT 4.0 及 Linux 之外,還裝了 FreeBSD 2.2,於是就仿照上面的做法試試 NT Loader 有沒有辦法啟動 FreeBSD. 我的 FreeBSD 裝在 <tt>/dev/sda2</tt>, 也就是 FreeBSD 的 <tt>/dev/sd0s2</tt>. 按照上面的做法我先將 <tt>/dev/sda2</tt> 的 boot sector 存成一檔案: <tscreen><verb> # dd if=/dev/sda2 of=/bootsect.bsd bs=512 count=1 </verb></tscreen> 並將它拷貝到 C:\ 下.再於 <tt>boot.ini</tt> 中加入 <tscreen><verb> C:\BOOTSECT.BSD="FreeBSD" </verb></tscreen> 不料這個方法竟然<bf/失敗/了,無法啟動 FreeBSD! <p> 一方面覺得失望,一方面又不死心.忽然想到,lilo 也可以拿來啟動 FreeBSD. 於是,又做了下面的實驗,進入 Linux 後,將 <tt>/etc/lilo.conf</tt> 改為: <tscreen><verb> boot = /dev/fd0 install = /boot/boot.b vga = normal other = /dev/sda2 label = FreeBSD table = /dev/sda loader = /dev/os2_d.b </verb></tscreen> 放入一格式化過的磁片,再跑 lilo -v.然後將磁片的啟動磁區變成一檔案: <tscreen><verb> # dd if=/dev/fd0 of=/bootsect.bsd bs=512 count=1 </verb></tscreen> 並放到 C:\ 下.移去磁片後重新開機,在 NT Loader 的選單下選擇 FreeBSD,接著就看到: <tscreen><verb> LILO loading FreeBSD >> FreeBSD BOOT @ 0x10000: 639/65536 k of memory Usage: [[0:][fd](0,a)]/kernel][-abcCdhrsv] Use 1:sd(0,a)/kernel to boot sd0 if it is BIOS drive 1 Use ? for file list or press Enter for defaults Boot: </verb></tscreen> 我<bf/成功/了!! </article>