Windows bootmgr(自 Vista* 以来使用的 Windows 引导加载程序)能否直接启动 Linux,而无需链式加载 GRUB 或其他引导加载程序?
- 也欢迎回答有关旧 NTLDR 的问题
答案1
简单来说,不是。启动 Linux 比仅仅将一些数据复制到内存并跳转到该内存区域的开头稍微复杂一些,并且微软出于显而易见的原因选择不在其引导加载程序中添加对此的支持。
但是,如果您只关心将 Windows 引导加载程序用作主引导加载程序,则可以使用多种方法从 Windows 引导加载程序链式加载不同版本的 GRUB。您还可以考虑尝试使用 GRUB4DOS,它具有二进制格式,可以直接使用 NTLDR 加载。或者,您可以从 bootmgr 或 NTLDR 为任何版本的 GRUB 加载实模式引导扇区。
现在,你可能出于好奇才问这个问题,这也确实激起了我的好奇心。在研究这个问题时,我发现对 Linux 启动过程的良好描述。它提到了旧版内核引导扇区,以前从软盘直接引导内核时会用到该扇区。不过,正如您即将看到的那样,该字段已不再使用。可能是因为内核现在已大于 1.44 MB。
我尝试用两种方式解压内核并链式加载。首先使用chainloader /vmlinux
GRUB4DOS(尽管任何其他 grub 都可以正常工作,同样假设您解压了文件)。结果:我收到以下消息:
Direct booting from floppy is no longer supported.
Please use a boot loader instead.
Remove disk and press any key to reboot . . .
我也在C:\vmlinux="boot test"
XP 中尝试过boot.ini
但是只是挂起。
然而,这引发了一个问题,是否有可能构建一个特殊的内核,该内核可以直接从 Windows 的一个加载器启动,使用一些最少的粘合剂跳转到内核 realmdoe 入口点,也许还可以进行一些其他修复。
但是,这仍然非常不方便,因为这种方法缺少内核通常从引导加载程序获得的所有现代商品,例如内核参数和 initrd。它可能根本不值得付出努力。