Windows XP 与Linux多系统引导的进一步探讨
以下是Windows XP 启动所需的三个文件:
- ntldr
- ntdetect.com
- boot.ini
有篇文章对此介绍得很详细 ,这里讨论其他的几个问题:
- 手动复制到根目录下的ntldr是否有效?
有效!与最早的DOS 系统不同,只要保证ntldr 在分区的根目录就行,并不关心这个文件在磁盘的那个扇区。(DOS系统启动所需的IO.SYS与MSDOS.SYS只能使用sys命令在启动分区产生)
- ntldr是否必须位于启动分区?
启动分区也称为活动分区,每个物理磁盘只能有一个分区被标记为启动分区,标记一般为:活动、*号 Active等。在MSDOS中使用fdisk 命令标记,Windows 2000/XP中使用磁盘管理器标记,Linux 下使用fdisk 命令也可以标记。
启动分区标记对于Windows 的意义要大于Linux,电脑启动时,在MBR 找到Windows 的引导记录之后,会继续寻找启动分区,找到后在根目录下寻找ntldr 文件,否则会引导失败。
对于Linux 目前常用的引导程序grub,这个标记似乎没什么意义,甚至可以在fdisk中随意设置多个标记。
回到刚才的问题:ntldr是否必须位于启动分区?
- 如果使用Windows 引导方式(MBR),那么ntldr必须位于启动分区。这里或许有个例外,就是可以调整bios的启动分区到ntldr所在分区。
- 如果使用grub之类的引导程序引导,则ntldr 可以位于任何分区。还有一个例外,后面说。
- ntldr 是否必须与系统(Windows目录)位于相同分区?
不必!但ntldr 所在分区根目录必须要有boot.ini,并且boot.ini具备引导到系统分区的正确参数。
- 如何将grub或者Lilo 的MBR恢复回Windows MBR?
- Windows安装盘提供了内置的命令fixmbr来修复 ,可以很容易的恢复引导区记录(不是通常人们所建议的重新安装系统,并在拷贝文件之后退出,再手动清理安装临时文件。未经过测试)。
- 另外,这里也有一个第三方的工具mbrfix ,在这里下载 (未经过测试)。
- MSDOS 引导后,使用命令行 fdisk /mbr (我习惯使用这个方法)
- linux grub 启动管理器通过rootnoverify (hd0,2) chainloader +1 来加载ntldr,是如何做到的?
上面的命令是告诉引导程序去hd0 设备的3号分区的第一个扇区加载操作系统启动程序。前面说过ntldr 并不位于物理第一扇区,为什么还可以加载呢?硬盘除了具有一个主引导记录(MBR)之外,另外在每个分区的头部还有分区引导记录,我想应该是"chainloader +1" 找到分区引导记录,并由分区引导记录找到并加载了ntldr 文件。
- 为什么通过rootnoverify (hd0,2) chainloader /ntldr 或者 chainloader (hd0,2)/ntldr加载会失败?
chainloader 支持直接指定文件名来加载启动程序。但如果ntldr 位于ntfs 格式分区,上述命令会失败,我猜测原因是grub 在文件系统级别不支持读取ntfs 分区,当然也无法读取ntldr。vfat 分区我没有试验。
- 在使用grub 时,windows 系统或者ntldr 被安装在扩展分区的逻辑分区,与在主分区有什么不同?
似乎没有什么不同,在上述情况下grub 引导成功。与上面第2条第2小点有相同的例外,马上讲到。
例外情况:无论是ntldr 所在分区,还是linux /boot 所在分区,其起始点如果超过硬盘1024扇区(约8.4G),则MBR有可能无法访问到分区上的引导记录,当然也无法加载ntldr 或者linux 内核。要解决这个问题可以在BIOS 中为硬盘指定LBA 模式,grub 新的版本会自动检测LBA是否可用,并正确引导。
这个网页包含grub 错误号码的详细解释 ,在引导出错时很有参考价值。比如,对于以上例外情况产生的错误,grup 返回错误码 18:
18 : Selected cylinder exceeds maximum supported by BIOS This error is returned when a read is attempted at a linear block address beyond the end of the BIOS translated area. This generally happens if your disk is larger than the BIOS can handle (512MB for (E)IDE disks on older machines or larger than 8GB in general).
- grub是否可以跨物理硬盘引导操作系统?
可以!对于Windows 及Linux 均引导成功。


