![GRUB2 中缺少 ntldr.mod](https://linux22.com/image/25921/GRUB2%20%E4%B8%AD%E7%BC%BA%E5%B0%91%20ntldr.mod.png)
我在 EFI 主板上使用 Debian Wheezy,并且需要 GRUB2 中的 ntldr 模块来加载 Windows 7 安装程序的 bootmgr,因为它自行启动的方式(显然,使用安装程序所在的 USB 闪存驱动器的引导扇区)它只安装 Windows在 MBR 格式的磁盘上。当我使用 grub-install 安装 GRUB 时,它不会将 ntldr.mod 添加到 GRUB 模块文件夹中,并且无法插入它。
- 为什么?当我只下载GRUB包而不安装时(apt-get download...),可以在那里找到该模块。如果我将下载的包中的 .mod 文件添加到已安装的 GRUB 模块文件夹中,然后从 GRUB 命令行中添加“insmod ntldr”,则会显示错误的“ELF magic”(?)。
- 怎么强行做呢?
- 有没有另一种方法可以在“GPT 模式”下启动 Windows 安装程序,因为我不想将整个磁盘格式化为 MBR。
答案1
您下载了 grub-pc 软件包,该软件包用于 BIOS 引导机器,因此该模块不会在 efi 版本的 grub 中加载。该模块在 EFI 版本的 grub 中不存在,因为它依赖于 BIOS。
如果您想从 U 盘启动 Windows 安装程序,那么您不应该使用 grub 执行任何操作;只需告诉你的固件启动该驱动器而不是带有 grub 的硬盘即可。
答案2
模式(Legacy BIOS
或UEFI
)由 USB 记忆棒上安装的引导加载程序和 BIOS 设置决定。
Windows 7 安装介质应支持 (Legacy BIOS
和UEFI
)。对于后者,这取决于您的设置。但由于您可以从 UEFI-HDD 启动并且 Win7-USB-Stick 启动进入Legacy BIOS
模式,因此应将其设置为“两者”,这意味着您的 BIOS 支持UEFI
并且作为后备可以启动进入Legacy BIOS
模式。
为了解决这个问题,我建议你使用支持 UEFI 的 Win7-Image 进行安装(我什至不知道是否有不支持的),并且你应该将 BIOS 显式设置为 UEFI 模式(无组合模式) )。
但如果这不起作用,为了回答你的问题:这应该有效:
将 Win7-Image 放在您的HDD
或上USB-Drive
并选择正确的模块(按照注释):
menuentry "Windows 7" --class windows --class os {
# Insert modules needed in order to access the iso-file
# choose the right module for the partition-table-scheme the image lies on
insmod part_gpt
insmod part_msdos
# choose the right module for the filesystem the image lies on
insmod ntfs
insmod fat
insmod ext2
# Insert module needed in order to find partition
insmod search_fs_uuid
# Set UUID of partition with the iso-image
# and let grub2 find the partition
# (save it's identifier to the variable $root)
set uuid="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
search --no-floppy --set=root --fs-uuid $uuid
# Mount the iso image by addressing it with (partition)/path
set iso=/images/Win7_English_x64.iso
loopback loop ($root)$iso
# boot (chain-load) the windows7-image using the bootmgfw.efi file located
# on the Win7-ISO-Image
chainloader (loop)/efi/microsoft/boot/bootmgfw.efi
}
如果您想将映像直接转储到 U 盘,那么您应该保留安装 iso 所需的set iso=
- 和- 部分。loopback loop ($root)$iso
那么您的链式装载机就是chainloader ($root)/efi/microsoft/boot/bootmgfw.efi
答案3
您需要以传统模式启动,仅此而已。输入你的 UEFI 设置并选择正确的启动设备,不要选择 ubuntu 条目,这是 EFI 模式的,而是启动到 HDD,然后 grub 将打开,选择 ubuntu 然后再次运行 sudo update-grub。您的驱动器上有一个过时的 ubuntu 引导加载程序,它将以 efi 模式引导,但 grub 也在 MBR 中。
答案4
我发现正确的 Windows 引导加载程序隐藏在安装映像上的大型打包文件中的某个位置。它可以解压,放入正确的启动目录,然后像平常一样使用 GRUB2 chainloader 加载。我不明白为什么尽管有正确的加载程序,微软仍将其隐藏在深处并将奇怪的加载程序放入默认启动目录中。它对我有用(不过,我下载了我找到的说明页面上提供的文件,因为解压它相当痛苦)。不幸的是,我不记得细节了,我在网上的某个地方找到了手册,但描述了总体思路。