GRUB2 中缺少 ntldr.mod

GRUB2 中缺少 ntldr.mod

我在 EFI 主板上使用 Debian Wheezy,并且需要 GRUB2 中的 ntldr 模块来加载 Windows 7 安装程序的 bootmgr,因为它自行启动的方式(显然,使用安装程序所在的 USB 闪存驱动器的引导扇区)它只安装 Windows在 MBR 格式的磁盘上。当我使用 grub-install 安装 GRUB 时,它不会将 ntldr.mod 添加到 GRUB 模块文件夹中,并且无法插入它。

  1. 为什么?当我只下载GRUB包而不安装时(apt-get download...),可以在那里找到该模块。如果我将下载的包中的 .mod 文件添加到已安装的 GRUB 模块文件夹中,然后从 GRUB 命令行中添加“insmod ntldr”,则会显示错误的“ELF magic”(?)。
  2. 怎么强行做呢?
  3. 有没有另一种方法可以在“GPT 模式”下启动 Windows 安装程序,因为我不想将整个磁盘格式化为 MBR。

答案1

您下载了 grub-pc 软件包,该软件包用于 BIOS 引导机器,因此该模块不会在 efi 版本的 grub 中加载。该模块在 EFI 版本的 grub 中不存在,因为它依赖于 BIOS。

如果您想从 U 盘启动 Windows 安装程序,那么您不应该使用 grub 执行任何操作;只需告诉你的固件启动该驱动器而不是带有 grub 的硬盘即可。

答案2

模式(Legacy BIOSUEFI)由 USB 记忆棒上安装的引导加载程序和 BIOS 设置决定。

Windows 7 安装介质应支持 (Legacy BIOSUEFI)。对于后者,这取决于您的设置。但由于您可以从 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 加载。我不明白为什么尽管有正确的加载程序,微软仍将其隐藏在深处并将奇怪的加载程序放入默认启动目录中。它对我有用(不过,我下载了我找到的说明页面上提供的文件,因为解压它相当痛苦)。不幸的是,我不记得细节了,我在网上的某个地方找到了手册,但描述了总体思路。

相关内容