1. 摘要
2. NT OS Loader 是如何运作的?
3. 如何安装 Windows NT 及 Linux 在同一系统上的提示
3.1. 安装 Windows NT
3.2. 分割磁碟
3.3. 安装 Linux
3.4. Lilo
4. Bootpart
5. Linux 部份的工作
6. Windows NT 部份的工作
7. 再做一次
8. 排除问题
9. 其它
9.1. 参考资料
9.2. 感谢
9.3. 回馈
9.4. 译注: 以 NT Loader 启动 FreeBSD
1. 摘要
本文件描述了使用 Windows NT boot loader 来启动 Linux 的方法.本过程已在 Windows NT 4.0 Workstation 版及 Linux 2.0 上测试过.
2. NT OS Loader 是如何运作的?
NT OS loader 希望来自其它作业系统的启动磁区变成一档案来取用.它读入这档案并启动选择的作业系统,也就是说,或是不同模式运作的 Windows NT 或是任何其它的作业系统.
3. 如何安装 Windows NT 及 Linux 在同一系统上的提示
3.1. 安装 Windows NT
先试著安装 Windows NT.如果你想使用 NTFS 作为你 Windows NT 分割区的档案系统,记住,目前版本的 Linux 无法取用 NTFS 的分割区.一个可以读 NTFS 分割区的 Alpha 版驱动程式可在 http://www.informatik.hu-berlin.de/~loewis/ntfs 找到.你可建立另外一个 FAT 分割区作为资料交换用,或是你可以使用 DOS 格式化的软碟片.
3.2. 分割磁碟
另外一个 mini-howto 建议不要使用 NT 的"磁碟系统管理员"来建立 Linux 的置换以及根目录分割区.它会留下一些空间.我也建议使用 Linux 的 fdisk.
3.3. 安装 Linux
现在从磁片上启动 Linux,建立置换及根目录分割区.Fdisk 会将 NTFS 分割区认为是 HPFS 分割区,这是正常的.再次从磁片启动 Linux 并按你的喜好安装 Linux.
在安装过程中建议你挂上它找到的 HPFS 分割区时: 忽略它.
3.4. Lilo
当你做到安装 Lilo 的部份时,指定你的 Linux 根目录分割区作为你的启动装置因为你磁碟的主启动记录(MBR)现在是 Windows NT 所有.这表示在你 /etc/lilo.conf 的 root 项目及 boot 项目会有相同的值.如果你有一个 IDE 硬碟且你的 Linux 分割区是在第二块分割区上,你 /etc/lilo.conf 的 boot 项目看起来会像:
boot=/dev/hda2
如果你有两个磁碟机而且你的 Linux 位於第二颗磁碟的第一个分割区上,你 /etc/lilo.conf 的 boot 项目看起来会像:
boot=/dev/hdb1
以符合你系统的核心执行 lilo.如果你不确定的话从磁片上启动以检查核心.
如果你现在无法启动 Windows NT,你有麻烦了.我希望你已经建立了最近的修复磁片.
4. Bootpart
有一个由 G. Vollant 所写的 NT 程式叫 bootpasr 可以为你做到下述的两点. Bootpart 可在此取得:
http://ourworld.compuserve.com/homepages/gvollant/bootpart.htm .
如果你想知道事情是如何运作的,使用第五及第六节描述的步骤.
5. Linux 部份的工作
你必须从磁片上启动 Linux 直到 NT 部份改好为止.
现在你必须从你的 Linux 根目录分割区中取出启动磁区.如果 /dev/hda2 是你的 Linux 分割区,这个 dd 指令是:
# dd if=/dev/hda2 of=/bootsect.lnx bs=512 count=1
如果你的 bootsect.lnx 超过了 512 个位元组那麽就有些事不对劲.
现在将档案 bootsect.lnx 拷贝到一片 DOS 格式化过的磁片中,如果这是你将档案传到 NTFS 分割区内的方法的话.
你可以这样来拷贝
# mcopy /bootsect.lnx a:
或者用
# mount -t msdos /dev/fd0 /mnt
# copy /bootsect.lnx /mnt
# umount /mnt
6. Windows NT 部份的工作
从磁片上将档案拷贝到 C:ootsect.lnx. 我不会告诉你怎麽做. (译注: copy a:bootsect.lnx c:, 应该会吧.)
就像 Linux 下的 lilo.conf, 在 Windows NT 中是 c:oot.ini. 在你编修它之前用这个指令除去它的系统及唯读属性:
C:attrib -s -r c:oot.ini
现在用一编辑器更改 boot.ini 档案,例如 notepad, 像这样:
[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"
在本例中只加入了最後一行.在你储存 boot.ini 後用这个指令回复它的属性:
C:attrib +s +r c:oot.ini
在关掉你的 Windows NT 并重新启动後你应该会看到像这样的:
OS Loader V4.00
请选择您想要启动的作业系统:
Windows NT Workstation Version 4.0
Windows NT Workstation Version 4.0 [VGA mode]
Linux
使用↑键和↓键将您想要的选项反白,
选定後请按 Enter 键确认
选择 Linux 并会看到
LILO loading zImage ....
7. 再做一次
每次你 Linux 分割区的启动磁区被修改後一份新拷贝的 bootsect.lnx 就必须转移到 C:BOOTSECT.LNX.一个例子是当你重新用 lilo 安装一新的核心时.因此你可以看出这样的系统并不适合用来测试实验的核心.
8. 排除问题
如果事情并不按照预期的运作,用一磁片来检查可启动性.如果 /dev/hdb1 是你的 Linux 分割区,你的 /etc/lilo.conf 有下列的项目:
root=/dev/hdb1
boot=/dev/fd0
插入一磁片并执行 lilo. 现在尝试从磁片上启动.如果你在 /dev/hdb1 上的 Linux 无法被启动,那麽 NT OS loader 也将无法启动它.如果你看到一大堆 01 01 01 01,表示你的 root 磁碟无法取用.检查是否你所有的磁碟都被 BIOS 侦测到.
如果这磁片可以启动你的 Linux 分割区,你可以用下面指令取出你的启动磁区给 NT OS loader 用:
# dd if=/dev/fd0 of=/bootsect.lnx bs=512 count=1
你可保留这磁片在你的 Windows NT 安装出问题时作为你的急救磁片.
9. 其它
9.1. 参考资料
The Linux+WindowsNT mini-HOWTO
The FAQ for FreeBSD 2.X
9.2. 感谢
感谢 Xiaoming Yi 提示这些过程也在除了第一颗磁碟外的其它磁碟上运作.
感谢 Frank Dennler 提供的磁碟技巧.
9.3. 回馈
任何意见都很欢迎.
9.4. 译注: 以 NT Loader 启动 FreeBSD
因译者的电脑中除了 Windows NT 4.0 及 Linux 之外,还装了 FreeBSD 2.2,於是就仿照上面的做法试试 NT Loader 有没有办法启动 FreeBSD.我的 FreeBSD 装在 /dev/sda2, 也就是 FreeBSD 的 /dev/sd0s2. 按照上面的做法我先将 /dev/sda2 的 boot sector 存成一档案:
# dd if=/dev/sda2 of=/bootsect.bsd bs=512 count=1
并将它拷贝到 C: 下.再於 boot.ini 中加入
C:BOOTSECT.BSD="FreeBSD"
不料这个方法竟然失败了,无法启动 FreeBSD!
一方面觉得失望,一方面又不死心.忽然想到,lilo 也可以拿来启动 FreeBSD.於是,又做了下面的实验,进入 Linux 後,将 /etc/lilo.conf 改为:
boot = /dev/fd0
install = /boot/boot.b
vga = normal
other = /dev/sda2
label = FreeBSD
table = /dev/sda
loader = /dev/os2_d.b
放入一格式化过的磁片,再跑 lilo -v.然後将磁片的启动磁区变成一档案:
# dd if=/dev/fd0 of=/bootsect.bsd bs=512 count=1
并放到 C: 下.移去磁片後重新开机,在 NT Loader 的选单下选择 FreeBSD,接著就看到:
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: