在多分区和多启动的 USB 闪存驱动器上安装 grub

在多分区和多启动的 USB 闪存驱动器上安装 grub

我有以下 USB 闪存驱动器分区:

/dev/sdb1  *      204800   8593407  8388608    4G  b W95 FAT32 
/dev/sdb2        8593408  11460607  2867200  1.4G  b W95 FAT32 
/dev/sdb3       11460608  24043519 12582912    6G  7 HPFS/NTFS/exFAT 
/dev/sdb4       24043520 120127487 96083968 45.8G  7 HPFS/NTFS

注意:
sdb1 = 具有持久性的 Lubuntux_64。sdb2
= androidx_86。sdb3
= Windows10_64。sdb4
= 通用存储。sdb1
之前有 100 MB 未分配。

为什么会这样?我尝试了多个多重引导软件,但没有一个能按预期工作。此配置有效,但我必须在引导所需的每个分区上手动设置引导标志。

问题是:如何将 grub 安装到 sdb(检测每个操作系统)以便让我选择要运行的操作系统?我不怕手动写东西,但我不知道在 grub.cfg 中写什么来指向所需的分区。

答案1

多重安装至 USB - BIOS/UEFI

姆库斯布为自定义多启动 USB 奠定了良好的基础。下面介绍如何制作一个可同时启动 BIOS 和 UEFI 的完整安装 USB,然后进一步将其修改为多启动器,甚至可以使用 grub2 启动 ISO。

  • 使用韓國在安装程序 USB(2GB 或更大)上制作 Live 系统。

  • 使用韓國使用默认设置在目标 128GB USB 上创建持久系统,持久性约为 25GB(剩余的 NTFS 分区用作 Windows 可访问数据分区)。

在此处输入图片描述

  • mkusb 完成后,立即打开 GParted 并删除 sdx4(ISO9660 分区)并将 sdx5 扩展到恢复的空间,sdx 是目标驱动器的设备名称。

在此处输入图片描述

  • 在继续操作之前,拔下或移除硬盘(可选但推荐,在 UEFI 模式下强烈推荐)。

  • 启动安装程序驱动器,选择尝试。

  • 插入目标驱动器

开始安装 Ubuntu...

  • 选择其他。

  • 选择 sdx5(在目标驱动器上),然后单击“更改”。

在此处输入图片描述

  • 选择使用为:ext4,格式和挂载点:/。

不要触碰任何其他分区(除非添加 /home 分区)。

  • 选择 sdx5 作为引导加载程序安装设备

  • 完成安装。

  • 从 sdx5/boot/grub 剪切 grub.cfg 并粘贴到 sdx3/boot/grub,覆盖现有的 grub.cfg 文件。

  • 启动目标驱动器并运行 sudo update-grub 将所有驱动器添加到启动菜单。

多重启动

可以将多个操作系统(完整安装和实时/持久安装)添加到 USB。

按照上述建议创建一个驱动器,然后将扩展分区分成几部分(在本例中为 sdx5、sdx6、sdx7...)。

然后您可以在一个分区上安装 Ubuntu,并在其他分区上安装其他操作系统。

  • 将 sdx5 划分为与操作系统数量相同的 ext4 分区。每个分区大小应为 8GB 左右或更大。

  • 启动 Live mkusb 安装程序并插入目标驱动器。

  • 在分区时选择“其他”。

  • 对于 /,选择 sdx5。

  • 将引导加载程序安装到 sdx5。

  • 不要选中所有其他分区的格式框。

  • 对 sdx6、sdx7 等以及您选择安装的操作系统重复此操作。

  • 最后一次安装后,从 sdx6/boot/grub 剪切 grub.cfg 并粘贴到 sdx3/boot/grub,覆盖现有的 grub.cfg 文件。

  • 启动闪存驱动器并执行更新 grub。这会将所有操作系统添加到 grub。

如果愿意的话,你可以添加一些 OS ISO:

  • 在 NTFS 分区 sdx1 中创建一个名为 isos 的文件夹。

  • 添加一些 ISO。

  • 编辑 sdx3/boot/grub 添加类似以下内容的菜单项:

    menuentry "xubuntu-18.04.1-desktop-amd64 Partition 6" {
     set isofile="/isos/xubuntu-18.04.1-desktop-amd64.iso"
     set root='(/dev/sdx,msdos2)'
     search --no-floppy --fs-uuid --set=root XXXX-XXXX
     loopback loop ($root)$isofile
     linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile noprompt noeject
     initrd (loop)/casper/initrd.lz
    }
    
  • 将第六个(第七个和第八个)分区的 UUID 替换为 XXXX-XXXX

  • 对于某些版本,vmlinuz 可能需要是 vmlinuz.efi。

  • 如果需要,每个 ISO 都可以有自己的 casper-rw 和 home-rw 持久文件,但由于您需要向每个菜单项添加“持久路径”,因此它会变得有点复杂。

答案2

我知道这是一篇老帖子,但我寻找一些“完美”的解决方案,兼容 Windows 和 Linux(和 Mac),并且可启动……很长时间了。

在撰写本文时,我刚刚发现了这个名为“Ventoy”的解决方案。简单。功能强大。开源。 Ventoy 官方网站
存储库

轻松准备 USB 驱动器,它既可用于数据 + 多 ISO 启动,也可用于一些我(尚未)使用的功能,例如实时发行版的持久性。

我的 64GB USB 现在有 6+ 个可启动 ISO 以及许多 GB 的文件。完美

答案3

昨天我成功了,我将发布我的决心:
我有一个 Sandisk 64gb USB 闪存驱动器,我需要多个分区、多启动操作系统

  1. 步骤1:

我使用 GParted 创建了一个 MBR 分区表,其内容如下:

sdb1 -> 4gb ->formatted fat32(labeled Linux)<br/>
sdb2 -> 2gb ->formatted fat32(labeled Android)<br/>
sdb3 -> 5GB ->formatted fat32(labeled Windows)<br/>
sdb4 -> the rest of unallocated space -> formatted NTFS(labeled Stuff)<br/>
  1. 第2步:

    使用 UNetBootin 我已经安装了:

    sdb1 -> 带有 2gb 持久存储的 Xubuntu(最新版本)(Lubuntu 在使用 wifi 驱动程序重启后出现一些问题)
    sdb2 -> android-x86_64-8.1
    sdb3 -> 用于 windows10 安装我遵循了以下步骤:

编辑 1:安装所有操作系统后,进入 GParted 并将 bootflag 设置为 sdb1(linux 标签分区)

  1. 步骤3:

    我已经在 sdb1(Linux) 中安装了 grub,如下所示:

    sudo grub-install --force --root-directory=/media/myusername/LINUX/ /dev/sdb1

  2. 像这样更改 /media/myusername/LINUX/boot/grub 中的 grub.cfg 文件:

    如果 loadfont /boot/grub/font.pf2 ; 那么
    设置 gfxmode=自动
    安装 efi_gop
    安装 efi_uga
    修改 gfxterm
    终端输出 gfxterm
    设置菜单颜色正常=白色/黑色
    设置 menu_color_highlight=black/light-gray
    设置超时=30
    菜单项‘Xubuntu18.04 原版精选’{
    搜索--no-floppy--fs-uuid--set XXXX-XXXX
    syslinux_source/isolinux/isolinux.bin
    syslinux_配置文件/syslinux.cfg
    }
    菜单项‘Android8.1 原版精选’{
    搜索--no-floppy--fs-uuid--set XXXX-XXXX
    syslinux_source($root)/isolinux/isolinux.bin
    syslinux_config文件($root)/syslinux.cfg
    }
    菜单项‘Windows10_x64 原始选择’--class windows --class os {
    修改ntfs
    搜索--no-floppy--fs-uuid--set XXXXXXXXXXXXXXXX
    启动管理器
    }

笔记:

  1. 您需要用分区 UUID 替换 XXXX-XXXX。您可以通过运行以下命令获取:blkid /dev/sdbX其中“X”是分区号。
  2. 我要测试的内容:
      • Xubuntu 一切正常。
      • Android 我还没有测试过这个。
      • Windows 10 直到分区选择。
  3. 如果此方法有任何问题,我将进一步编辑它。(很可能在接下来的几天内发生)

相关内容