USB 记忆棒上的多个 Windows 安装程序

Gea*_*rus 13 linux boot partitioning multi-boot bootmgr

我最近拿到了其中一款SanDisk Extreme 64GB 记忆棒并开始修修补补。在这个故事中,请记住,这是一个将removable位设置为的模型0(这意味着 Windows 默认看到其所有分区 - 每个分区在资源管理器中显示为单个磁盘)。

目标:

  1. 在一根棍子上有许多不同的可启动发行版
  2. 其中应该是 Windows 7 安装程序和 Windows 8 安装程序
  3. 在 Windows(最好是其他操作系统)中只应自动挂载一个分区 - 第一个(文件存储)。这是为了防止意外更改其中的可引导分区或文件。它应该是 NTFS 类型。
  4. 或者,我还希望在此棒上有一个可直接启动的完全持久的 linux(最好是 Ubuntu)。
  5. 在从 USB 记忆棒启动机器时显示的单个菜单中应该可以使用所有这些功能。

闲聊:

现在,这一切都可以通过使用SYSLINUXGRUB的组合轻松实现(您将在下面看到)。然而,有一个问题:所有基于 Linux 的可引导项目(那些使用create ramdisk -> load kernel -> have fun方案的项目:如 PartEd Magic、Ubuntu Installer 等)似乎在单个可引导分区上从它们自己的文件夹中运行没有任何问题。当简单地将它们放在不同的文件夹中并将单个 SYSLINUX 菜单项指向它们时,它们相处得很好(无论它们之后使用什么,可能只是另一个 SYSLINUX :))。

问题(一如既往:D)出在 Windows 安装程序中。他们(或者我应该说,bootmgr)拒绝识别相对路径。如果您将一个 Windows 安装程序放在一个文件夹中,例如,Win7它看起来像/Win7/bootmgr该死的东西\Boot\BCD在传递控制权时会寻找(不是\Win7\Boot\BCD- 它实际存储的位置)。了解了这一点后,自然不能在单个分区(单个目录结构)上放置多个 Windows 安装程序。这违反了目标 2

当前方案:

需要 10 个声望才能发布图像:(。这是可视化的方案。

描述:

  1. 正常的 NTFS 分区。用它做任何你想做的事——它不会影响那些敏感的启动链接:)
  2. FAT32 启动分区。这是从 MBR 转移控制的地方。这个必须是主要的才能从 MBR 转移控制。它包含主 SYSLINUX - 显示菜单(目标 5目标 1)的那个。 下面的所有分区都扩展为每个磁盘最多提升 4 个主分区
  3. Windows 7 安装程序。该分区包含指向其上的 GRUB 的/bootmgr引导扇区(不要问为什么有这么多引导加载程序——这是一个测试设置:))。除了下面的问题(目标 2)外,效果很好。
  4. Windows 8 安装程序。该分区包含指向 GRUB 的引导扇区,该 GRUB 指向/bootmgr. 除了下面的问题(目标 2)外,效果很好。
  5. 使用正常方法(来自同一个 USB 记忆棒)安装 Ubuntu 的持久性 Linux 分区。它使用 GRUB 来管理其启动菜单。当然也有引导扇区(目标 4)。
  6. Linux 交换。Linux 通常在以前的分区上使用,但不受谁可以使用它的任何限制。

现在一切似乎都正确(并且确实有效)...除了GOAL 3

问题:

  1. 我曾尝试使用hiddenflag 将这些分区从 Windows 的视线中隐藏起来,效果很好,甚至太好了。它还使 Windows 安装程序无法看到它们。当我尝试从隐藏分区安装 Windows 时,安装程​​序基本上没有找到从 :O 启动的位置。这是关键问题。
  2. 我使用了 2 个额外的分区来容纳 Windows 安装程序。这不是一个很好的方案,因为每次我想改变一些东西并且它不适合这些时,我必须重新分区。这是非关键问题 - 我可以接受。

我的想法:

  1. 有像ISOLINUXGRUB4DOS这样的东西(当你搜索这个的时候它们就会出现)。据我了解,他们可以帮助我实际安装 Windows 安装程序的可引导 .iso。真的吗?某些页面包含有关这样安装的图像的警告,只能在 BIOS 启动阶段访问 - 当 Windows 安装程序启动时,它将无法看到安装的图像。真的吗?你能为我指出正确的方向吗?
  2. 也许我可以为 Windows 使用一些自定义安装程序(因为基本上,我bootmgr100% 的时间都在这里战斗)或chrootbootmgr某种方式使其变得理智?这可以执行吗?我认为这仍然给我留下了一个问题,即分区仍然隐藏,安装程序可能看不到它
  3. 也许我可以破解路径bootmgr,尽管这是一个非常大胆的假设:)

如果对此有任何其他建议,非常欢迎您在这里讨论。我愿意接受任何建议。如果有什么需要澄清或必须提供额外信息 - 随时询问。

非常感谢!

Gea*_*rus 7

经过漫长而最终成功的旅程,我已经能够实现这一切。

我创建了一个关于如何执行此操作的教程。一探究竟。

根据请求,我还在下面发布了整个内容:

软件:

首先:您需要一台装有 Windows 7/8 的 PC 并对其进行管理访问(Vista 可能工作,不确定)。这是本教程将执行的地方。

为了执行我们需要的所有软件包,它也在GitHub 上进行了镜像(单击下载 ZIP)。[0](从现在开始,引用将被标记为[])。要下载它,您可能需要在那里注册(不知道为什么)。

软件包包括:

此外,您需要下载以下内容:

  • WinSetupFromUSB(后来的 WSFUSB)。这对于该计划的工作至关重要。如果您没有安装7zip,请使用 .exe 版本。本教程是在最新版本 1.4的时候编写的。[4]

可选(我推荐的软件将使过程更容易和更灵活,但不是必需的):

  • Gparted live .iso用于分区和设置分区标志(类似物包括最近决定付费的Parted Magic或较小的Partition Wizard,但请记住它不是 Gparted,您必须有一些经验才能操作它)。[5]
  • Notepad++是一款出色的 Windows 文本编辑器,带有许多插件。[6]

当然还有一些 Windows 安装程序.iso以及一些可引导的 Linux 发行版。这些可以是 YUMI 和 SYSLINUX 支持的任何东西(您将能够在本教程的后面部分查看)。

下载所有这些后,您就可以进行下一步了。

概念:

在此,将简要讨论操作方案。

此处讨论的方案是我用于设置的方案。这当然不是实现相同目标的唯一方法。我会尽力尝试解释它,以便您可以根据需要自定义设置。

这个过程似乎在图片中得到了最好的描述。(对不起,Paint,图形设计并不是我的强项):

概念

差不多就是这样。我真的不知道如何更好地解释它。我会一直关注这个话题,有问题可以在回复中提问。

行动:

  1. [配置软件]

    1. 将软件包[0] 解压缩到某个文件夹(上面列出了所需的所有软件,如果您还没有,请查看那里)。
    2. WinSetupFromUSB 解压缩到同一个文件夹中(这样它就在旁边YUMI.exe和所有其他东西)。双击它并解压缩到同一文件夹。
    3. 现在使用WinSetupFromUSB获取文件夹并将其拖到drag_here.cmd文件上。像这样(文件夹结构也应该像这样): 免打扰 如果您做的一切正确,将显示一个窗口,说明该过程已完成:
      WinSetupFromUSB was set up successfully, you can delete that folder.
      Now it's time to run 'start_admin.cmd'.
      Press any key to continue...
      Run Code Online (Sandbox Code Playgroud)
    4. 就像它说的,按任意键关闭窗口。暂时不要运行 start_admin.cmd。转到下一步以定义分区结构。
  2. [分区]

    1. 确定分区结构:您的分区结构应包括至少 1 个存储分区和至少 1 个引导分区。引导分区必须是 FAT32 类型(FAT32 有最大文件限制 - 4GB 和最大卷 - 32GB,即 32768MB。如果您打算使用更大的文件或卷,您不能使用 NTFS,但您可以尝试 exFAT 作为实验 - 我没有尝试过)并且存储可以是任何东西,但我推荐 NTFS。我的看起来像这样: 结构 存储分区是32GB NTFS启动分区是15GB FAT32(它没有像 G 这样的字母:因为它已经设置了隐藏标志,稍后您将了解这一点)。如果您使用的是大磁盘,最好将引导分区放在首位,因为某些 BIOS 无法读取超出特定范围的内容
    2. 磁盘管理方式在这里描述,但你可以用你喜欢的应用分区结构(像任何其他软件的gparted [5]前面提到的或BOOTICE可以从启动WinSetupFromUSB)。在 Windows 中打开磁盘管理。这可以通过在开始菜单中搜索(在Disk Management 中键入)或在 Windows 命令提示符:diskmgmt 中完成
    3. 应用所需的分区结构。右键单击任何分区进行管理。删除分区后,在剩余的未分配空间上右键新建分区。始终选择分配驱动器号,您可以在同一个向导中自由地对其进行格式化: 分区创建
    4. 退出磁盘管理之前,请注意你的引导分区的数量磁盘的数量在系统中。这是它们在磁盘管理中的样子: 指数 这里,磁盘号是 2引导分区号是 1
    5. 当您完成应用分区方案后,是时候让这个驱动器真正可启动了
  3. [添加基本引导环境(YUMI)]

    1. 转到步骤 1 中的文件夹。开始YUMI.exe
    2. 选中Show All Drives框并从下拉列表中选择您的引导分区。您也可以选择对其进行格式化
    3. 现在,是时候添加一些基于 Linux 的发行版了。我选择了分区向导作为示例(您可以选择任何其他发行版,也可以添加多个发行版,软件部分提供了分区向导的链接)。建议此时添加所有基于 Linux 的发行版,因为在磁盘完成后以后会更难做
    4. 选择浏览并选择您的.iso图像。屏幕将如下所示: 由美
    5. 单击创建并按照屏幕上的说明进行操作。当它询问您是否要添加更多时,您可以选择是并重复该过程(显然,重复该过程时不要选择格式化选项)以添加另一个分布。
    6. 此时,磁盘是可引导的。断开磁盘并再次重新连接(这是 Windows 检测到分区正确活动所必需的)。
    7. 转到步骤 1 中的文件夹并start_admin.cmd 以管理员身份运行。这对其操作至关重要,右键单击它并选择以管理员身份运行以管理员身份运行
    8. 它会询问您磁盘编号可引导分区编号(步骤2.4)。重新打开磁盘管理并像在步骤 2.4 中那样找到这些数字。指定相应的数字并按Enter 键

    [注意] 同样,如果您在此步骤或任何其他地方未能指定正确的磁盘和分区编号,我对您的磁盘(包括本教程中未提及的磁盘)发生的情况概不负责。


    1. 最后,它会询问您是否要在将可执行文件放入 USB 驱动器之前对其进行压缩。现在尺寸很少成为问题,所以我建议进入n这里(如果您按下y,稍后可能会出现意外的副作用,只有在您知道自己在做什么时才这样做)。
  4. [添加基于 Windows 的安装程序 (WinSetupFromUSB)]

    1. 回到同一个文件夹,进入WSFUSB文件夹(不是 WinSetupFromUSB 文件夹)并运行适合您的系统架构的WinSetupFromUSB.exe
    2. 在最顶部的下拉菜单中选择您的分区。请务必仔细操作。
    3. 选中 Windows 7/8 安装程序旁边的框,然后单击右侧的按钮以选择您的Windows 安装程序 .iso
    4. 选择高级选项框。确保Don't check for and install grub4dos MBR and Launch Q-Dir before Setup
    5. 仔细检查您的设置并确保它们.iso此示例几乎 100% 相同(磁盘和路径除外): WSFUSB
    6. 或者,您可以为 Vista/7/8/Server Source选择自定义菜单名称,以便在启动时选择 Windows 发行版时能够看到自定义名称。
    7. 准备好后,按GO按钮。如果您选择了步骤4.7 中的框,它将询问名称。之后,等待操作完成
    8. 对要添加的每个 Windows 分发重复这些步骤。
  5. [ 定稿 ]

    1. 在这一点上,我们有2 个可启动结构:一个用于 Linux(从 MBR 启动)和一个用于 Windows(从启动分区上的 bootmgr 启动)。我们需要将它们联系起来。在 Windows 资源管理器中打开可启动分区
    2. 打开文件<drive root>\multiboot\syslinux.cfg。它包含有关从驱动器启动时显示的菜单的信息。关于它的更多信息可以在这里找到:menu.c32 - syslinux.cfg 语法chain.c32 chainloader 命令。现在,我们需要创建一个菜单条目,它允许我们启动我们的 Windows 安装程序。在底部(或其他菜单项之间)添加以下行以创建新菜单项:
      MENU LABEL Windows Installers/Recoveries >>>
      MENU INDENT 1 
      KERNEL chain.c32
      APPEND fs ntldr=/bootmgr
      Run Code Online (Sandbox Code Playgroud) 最好在此代码前后添加一个空的换行符。如果您愿意,可以调整菜单标签。保存并关闭文件。
    3. [此处可选]再次打开WinSetupFromUSB。我们将从 Windows 安装程序菜单中删除陈旧的Back to Main Menu(Grub4dos)菜单条目。选择Bootice工具。
    4. 转到BCD 编辑。选择其他 BCD 文件<drive root>\boot\bcd在引导分区上找到文件: 靴子
    5. 按简易模式编辑 BCD(引导配置数据)文件: BCD 注意:如果您只有 1 个安装程序,它会在您按下您添加的菜单条目后立即加载,而根本不syslinux.cfg 显示任何菜单。此外,您可能希望在要设为 default的任何菜单项上按Set as default。单击关闭并退出Bootice工具。也退出WinSetupFromUSB
  6. [清理(可选)]

    1. 现在我们需要删除陈旧的文件。如果你不关心这类事情,你可以跳过这一节。在 Windows 资源管理器中打开可启动分区。另外,打开驱动器上的第一个分区它们可能是同一个)。
    2. 此磁盘需要以下文件和文件夹才能运行(如果列出了文件夹,则需要保留其所有内容):
      \boot
      \efi
      \multiboot
      \WINSETUP
      \bootmgr
      
      Run Code Online (Sandbox Code Playgroud)
    3. 可以安全删除以下文件和文件夹:
      .disk
      \default
      \grldr
      \menu.lst
      \plpbt.bin
      \shifthd.bat
      \usbdrive.tag
      
      Run Code Online (Sandbox Code Playgroud) 随意删除它们。此外,Windows 可能会创建其愚蠢的系统卷信息- 如果幸运的话,您也可以将其删除。此外,这也是您可以将启动分区MULTIBOOT重命名为任何其他名称的地方(我更喜欢简单的Boot)。您可以像通过 Windows 资源管理器处理任何文件夹一样执行此操作。
  7. [隐藏启动分区(可选)]

    1. 现在您可能想要隐藏您的引导分区以防止其上的任何文件被意外更改。这意味着在插入磁盘时默认情况下它在大多数系统上将不可见,但您仍然可以从它启动。再次打开WinSetupFromUSB
    2. 如果尚未选择,请打开Bootice工具并选择Physical Disk选项卡。在下拉菜单中(小心地)选择您的磁盘
    3. 单击部件管理按钮。将显示分区列表。
    4. 在列表中找到您的分区,然后按隐藏按钮。将弹出一个确认成功的窗口。整个事情看起来像这样: 隐藏这个 就是这样您的分区不再在大多数系统上自动安装(不会有驱动器号),并且引导驱动器所需的文件不会被意外更改

另外,我宁愿保持vmount(程序[3]软件部分),以能够快速安装Windows下的隐藏分区,如果我需要。

差不多就是这样,如果您发现任何误解或错误,请随时在此处发布。此外,欢迎提出问题和反馈。

学分:

Wonko , erwan.l , ilko , Steve - reboot.pro 社区的成员,他们在这个主题中给了我极大的帮助。旅程到此结束:)

最初在这个房间暗示 ImDisk 驱动程序的Bob

马里奥这个原始问题中对 BCD 文件、它们的目的和编辑它们的方法进行了教育。这就是旅程开始的地方。

修复了缩进错误的Ricky