如何在 USB 存储设备上创建包含数据文件和可加载 iso 的 exFat 分区 1,以及包含 UEFI 可引导 Grub2 的分区 2?

如何在 USB 存储设备上创建包含数据文件和可加载 iso 的 exFat 分区 1,以及包含 UEFI 可引导 Grub2 的分区 2?

更新2

好的,我已经成功地通过 Grub2 获得了一个可以正常工作的 USB。

首先,我使用 GParted 创建了一个gpt分区表并创建了以下分区:

  • exfat- [剩余空间] Live CD ISO 和文件。 (使用 gnome-disk-utility 创建,因为 GParted 不支持它。)
  • ntfs- [5.50 GiB] 提取的 Windows 10 恢复 ISO 文件。
  • fat16- [100 MiB] Grub2。

我跟着回答如何更改分区编号顺序以使它们处于正确的顺序。我使用 fat16 希望我的 PS4 看不到它,这样它就可以自动挂载 exfat 分区,而不会被询问要挂载哪个分区 - 但它不起作用。我只知道 fat16 和 fat32 是唯一兼容 Grub2 UEFI 可启动分区。

然后安装Grub2。我安装了想要安装 Grub2 的分区,“GRUB2”是 GParted 下给出的标签,“user”是我的 Xubuntu 帐户名。

sudo grub-install --removable --boot-directory=/media/user/GRUB2/boot --efi-directory=/media/user/GRUB2

/media/user/GRUB2/boot/grub/grub.cfg然后我使用以下条目创建 grub.cfg 。

menuentry "Lubuntu Boot Recovery Live CD (AMD64)" {
    insmod part_gpt
    insmod exfat
    insmod search_fs_uuid

    set iso=/iso/boot-repair-disk-64bit.iso
    search --no-floppy --set=root --fs-uuid 92AE-07D5

    loopback loop ($root)$iso
    linux (loop)/casper/vmlinuz.efi boot=casper file=/preseed/lubuntu.seed iso-scan/filename=$iso noprompt noeject
    initrd (loop)/casper/initrd.lz
}

menuentry "Windows 10 Installer on SDB2 (AMD64)" {
    insmod part_gpt
    insmod ntfs
    insmod search_fs_uuid
    insmod chain

    search --no-floppy --set=root --fs-uuid 13B187F260B1ACD6
    chainloader ($root)/efi/boot/bootx64.efi
}

menuentry "Xubuntu Live CD (AMD64)" {
    insmod part_gpt
    insmod exfat
    insmod search_fs_uuid

    set iso=/iso/xubuntu-18.04.4-desktop-amd64.iso
    search --no-floppy --set=root --fs-uuid 92AE-07D5

    loopback loop ($root)$iso
    linux (loop)/casper/vmlinuz boot=casper file=/preseed/lubuntu.seed iso-scan/filename=$iso noprompt noeject
    initrd (loop)/casper/initrd
}

花了一段时间研究,但根据我的理解。

  • insmod- 这用于加载以下模块。据推测,我认为 2.02> 中不需要这些,但我添加了它们以防万一。我找到了一个方便的清单这里
  • set- 用于设置变量。
  • search- 这会搜索某些条件,例如匹配目录、分区的 UUID、分区名称等,并将其存储在 --set 下的变量中。

我不完全确定环回、linux、initrd、preseed 和 chainloader 的实际功能如何或是什么。但我复制了文件路径,但扩展名可能不同或可能没有扩展名。


到目前为止,我已经完成了我想要的所有工作,但我认为如果没有更复杂的脚本,就不可能从 ISO 文件运行 Windows 10 ISO。这是我到目前为止为菜单项编写的代码片段,但它不起作用。

menuentry "Windows 10 Installer (AMD64) (ISO) (Doesn't work)" --class windows --class os {
    # Load module to be able to read GPT partition table.
    insmod part_gpt

    # Load module to read the partition that ISO is stored.
    insmod exfat

    # Load module to find partition with UUID.
    insmod search_fs_uuid

    # Load module to chain load to another EFI.
    insmod chain

    # Set UUID of partition that has ISO image and store it in variable.
    set uuid="92AE-07D5"
    search --no-floppy --set=root --fs-uuid $uuid

    # Set ISO Directory.
    set iso=/iso/win10-1909-english-x64.iso

    # Mount ISO.
    loopback loop ($root)$iso

    # Boot ISO.
    #chainloader (loop)/efi/microsoft/boot/cdboot.efi
    chainloader (loop)+1
}

#chainloader (loop)/efi/microsoft/boot/cdboot.efi我之前尝试过不加注释chainloader (loop)+1,但没有成功。

剩下的问题是:如何启动 Windows 10 安装程序 ISO 以从 ISO 文件启动?

相关内容