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>