使用 Linux 中的 Windows 安装程序创建多重启动 USB

使用 Linux 中的 Windows 安装程序创建多重启动 USB

是否可以使用 Windows 安装程序创建多重启动 USB来自 Linux

注意:这是一个自我回答的问题,因为我想与社区分享我的方法。我知道这个问题但我认为我的问题有一些细微差别,而(可能重复的)问题则没有。

答案1

使用 Linux Mint 19 64 位作为主机操作系统。可以肯定地说,类似的发行版和版本(例如 Ubuntu)的行为方式相同。

我们会需要:

  • 一个 16GB 的 USB。
  • Windows 的 ISO 映像,在本例中为 Windows 7 和 Windows 10 64 位。

流程

  1. 安装grub-efi-amd64GRUB EFI 兼容性

    sudo apt install -y grub-efi-amd64
    
  2. 使用 msdos 分区表格式化 USB。分区的大小必须足以容纳解压的 ISO。在这种情况下,我们将 USB 分成两半,每半约 8GB。两个分区都必须是 FAT 格式。将第一个分区标记为可启动。

  3. 挂载 USB 第一个分区。注意:哪个设备,即/dev/sdc1,以及它挂载的路径,即/media/foo/WIN7/。从现在开始,我将使用这两个示例作为指南。

  4. 安装 GRUB:

    dirs=(bin dev etc lib lib64 proc sbin sys usr)
    for dir in "${dirs[@]}"; do
      mkdir /media/foo/WIN7/$dir && sudo mount --bind /$dir /media/foo/WIN7/$dir
    done
    
    sudo chroot /media/foo/WIN7/
    
    # chroot environment
    # first we install grub efi
    
    grub-install --force --removable --target=x86_64-efi --efi-directory=/ /dev/sdc1
    
    # now we install grub 386
    
    grub-install --force --removable --target=i386-pc --boot-directory=/ /dev/sdc
    
    # exit the chroot
    
    exit
    

警告!非常小心使用下一个命令,因为您可以删除绑定的目录。使用制表符完成路径,而不是键入路径。

for dir in "${dirs[@]}"; do
  sudo umount /media/foo/WIN7/$dir && rm -rf /media/foo/WIN7/$dir
done
  1. 挂载 ISO,并将其内容复制到每个 USB 的分区:将 Windows 7 复制到第一个分区(您将收到启动目录已存在的消息,只需合并它们),将 Windows 10 复制到第二个分区。

GRUB 配置:

注意:Windows 7 仅在 BIOS 上启动,Windows 10 仅在 EFI 上启动

  1. /media/foo/WIN7/grub在该文件下创建grub.cfg并将以下内容放入其中:

    set root='(hd0,1)'
    configfile /boot/grub/grub.cfg
    
  2. /media/foo/WIN7/boot/grub在该文件下创建grub.cfg并将以下内容放入其中:

    menuentry 'Windows 7 installer BIOS' {
      insmod ntldr
      ntldr /bootmgr
    }
    
    menuentry 'Windows 10 64 bits installer EFI' {
      set root='(hd0,2)'
      chainloader /efi/boot/bootx64.efi
    }
    

我们现在准备测试 USB 是否正常工作,只需在连接 USB 的情况下启动您的机器,并且根据 BIOS/EFI,您将有不同的选项在 BIOS 或 EFI 之间进行选择,或者只是在旧机器中从 USB 启动的选项。

相关内容