多分区多操作系统可启动的USB

我想创建一个恢复闪存驱动器。我有我的8GB闪存驱动器[金士顿数据旅行者]。我还有所需的.iso文件,分别是a>Ubuntu 13.10 b>引导修复盘 c>AVG救援CD。
我希望创建4个分区(3个用于每个可引导的.iso文件,一个用于数据存储)。此外,我希望能够在每次从USB启动时选择要引导的操作系统。
那么,有没有办法在USB上安装GRUB以及其他三个实时发行版?如何创建这样的设置?

你可以看一下UNetbootin。它允许你将多个ISO文件写入USB设备,并且我记得你可以从菜单中选择要启动的文件。不过它使用的是syslinux而不是grub。还有一个FAT分区,其中的文件可能会发生冲突。但是或许值得一试。 - MvG
相关链接:http://askubuntu.com/questions/46624/how-to-create-a-bootable-usb-with-multiple-iso-images-in-it - landroni
5个回答

对我来说,创建多操作系统Live USB的最佳工具是MultiSystem,可以在这里找到这里。有许多操作系统可以通过MultiSystem安装。而且你可以很容易地在Ubuntu上使用项目的官方仓库进行安装。
sudo apt-add-repository 'deb http://liveusb.info/multisystem/depot all main' 
wget -q -O - http://liveusb.info/multisystem/depot/multisystem.asc | sudo apt-key add - 

sudo apt-get update 
sudo apt-get install multisystem

尽管该网站是法语的,但可以通过右侧栏的“Google翻译”下拉列表框(或直接使用Google Chrome)非常满意地将其翻译成英语,但您也可以使用这里的逐步说明
至于您的设置,在启动MultiSystem之前,您可以首先使用GParted创建2个分区:
  1. 4GB FAT32分区用于MultiSystem,包括ISO文件等,以及一个空白的持久性文件来存储Ubuntu设置等,可以在MultiSystem中稍后创建。

  2. 4GB NTFS分区用于数据。


1对我来说效果很不错,没有任何麻烦。 - K7AAY
在64位的Lubuntu 18.04上出现了错误的第一条命令: W: GPG错误: http://liveusb.info/multisystem/depot all Release: 由于公钥不可用,无法验证以下签名: NO_PUBKEY 4E940D7FDD7FB8CC .... E: 仓库 'http://liveusb.info/multisystem/depot all Release' 没有经过签名. .... N: 不能安全地从此仓库更新,因此默认情况下已禁用。 - Nikhil VJ
@nikhilvj 这很奇怪,我现在正在使用基于Ubuntu 18.04的Linux Mint 19这个仓库(在输入相同的两个命令后)。也许你可以忽略这个警告并手动启用它 - 可能是因为新的Ubuntu系统认为他们使用的签名不够安全。 - Sadi

我没有使用过MultiSystem,但我见过它被推荐,还有其他几个。 MultiBootUSB - 从U盘/闪存驱动器/USB磁盘上安装和引导多个Linux系统,使用grub2。

https://help.ubuntu.com/community/InstallAndBootMultipleLinuxFromPendriveFlashDriveUSBDisk

请参考yumi以获取多启动版本。

http://www.pendrivelinux.com/

但是为了更好地理解,您可以将grub2安装到闪存驱动器上,创建自己的grub.cfg文件并将ISO复制到闪存驱动器中。与此链接中的硬盘安装非常相似。

https://help.ubuntu.com/community/Grub2/ISOBoot

安装grub2到闪存驱动器中,默认的/media路径现在根据版本而异。新版本将用户添加到路径中。同时假设sdb是闪存驱动器,请确认是否正确。 给分区加上标签 - 如果标签是grub2并且已挂载:
sudo grub-install --root-directory=/media/grub2 /dev/sdb

新版本也会自动挂载使用$USER名称的,这个标记为MC4GB的,用户是fred。
sudo grub-install --root-directory=/media/fred/MC4GB /dev/sdb

在创建 grub.cfg 时,引导驱动器始终为 hd0,因此如果直接从闪存驱动器启动,则设置将为 hd0,Y,其中 Y 通常为分区 1。
loopback loop (hd0,1)$isofile

否则,例子就像这些一样:

https://help.ubuntu.com/community/Grub2/ISOBoot/Examples

在我的MC4GB中,grub.cfg的第一项记录。
set default=0 
set menu_color_normal=cyan/blue
set menu_color_highlight=white/blue
set gfxpayload=800x600

menuentry "Ubuntu 13.04" {
set isofile="/boot/iso/ubuntu-13.04-desktop-amd64.iso"
loopback loop (hd0,1)$isofile
linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isofile nomodeset 
initrd (loop)/casper/initrd.lz
}

menuentry " " {
set root= 
}

注意,我在所有条目中添加了nomodeset,因为我使用的是nVidia显卡。 此外,新版本现在同时用于BIOS和UEFI引导的是vmlinuz.efi。旧版本只有vmlinuz。 其他发行版可能需要不同的引导参数。在上面的示例线程中找到示例或者挂载并检查ISO的引导参数。

grub.cfg文件应该放在USB驱动器的哪个位置?它应该放在根目录下,作为boot/目录的同级文件吗? - Greg
我总是把它放在“正常”的位置。当编译Grub时,可能可以将其设置为任何位置,但对我来说,/boot/grub/grub.cfg就足够了。 - oldfred

一个在Ubuntu 20.04及更高版本上测试过的解决方案是使用Ventoy。直接引用工具描述:
Ventoy是一个开源工具,用于创建可引导的ISO/WIM/IMG/VHD(x)/EFI文件的USB驱动器。 使用Ventoy,您无需反复格式化磁盘,只需将映像文件复制到USB驱动器并引导即可。您可以一次复制多个ISO文件,Ventoy会提供一个引导菜单供您选择。 同时支持传统BIOS和UEFI。 同时支持MBR和GPT分区样式。
我已经创建了一个可引导的USB驱动器,在其中简单地通过复制/粘贴过程复制了我的ISO文件,这样当USB驱动器用作可引导驱动器时,它们会显示在菜单中。与此同时,我还可以使用这个USB来存储我的个人数据(它们不会出现在Ventoy菜单中)。
这意味着当我将这个USB驱动器用作可引导驱动器时,我会有一个类似于这样的菜单(从官方网站截图):

ventoy menu

当我通过Nautilus打开它时,它就像一个普通的USB存储设备,你可以在上面放置文件(来自我的Ubuntu 20.04的截图)。

nautilus

Ventoy没有deb格式或安装脚本,所以您需要从发布页面下载Ventoy。如果您下载了.tar.gz版本(以下示例中将引用版本1.0.61),您可以在终端中执行以下命令进行解压: sudo tar xzf ventoy-1.0.61-linux.tar.gz -C /opt 考虑到/opt文件夹的含义,我认为/opt是目标文件夹的最佳选择。
现在,您需要至少给Ventoy2Disk.shVentoyGUI.x86_64赋予权限: sudo chmod +x /opt/ventoy-1.0.61/Ventoy2Disk.sh /opt/ventoy-1.0.61/VentoyGUI.x86_64 现在你已经准备好使用它了。要创建一个可引导的USB,映射为/dev/usb(始终使用lsblk正确识别你的USB磁盘!)并采用GPT分区方式,你可以运行以下命令: sudo bash /opt/ventoy-1.0.61/Ventoy2Disk.sh -I -g /dev/sdb 接下来是Ventoy2Disk.sh提供的参数列表:
Ventoy2Disk.sh CMD [ OPTION ] /dev/sdX
  CMD:
    -i   install ventoy to sdX (fail if disk already installed with ventoy)
    -I   force install ventoy to sdX (no matter installed or not)
    -u   update ventoy in sdX
    
  OPTION: (optional)
   -r SIZE_MB  preserve some space at the bottom of the disk (only for install)
   -s          enable secure boot support (default is disabled)
   -g          use GPT partition style, default is MBR style (only for install)

否则,您可以使用图形界面运行Ventoy,方法如下:
sudo /opt/ventoy-1.0.61/VentoyGUI.x86_64
更多细节请参见Ventoy Installation
另一个有趣的资源是RedHat.com: Creating a multi-boot Linux desktop system

多系统全系统安装

自从第一次提出这个问题以来,闪存驱动器的大小已经增加。现在使用完整系统安装制作多系统启动驱动器是相当合理的。

完整安装比持久安装更稳定和安全,但制作时间不如后者快。它们更好地利用磁盘空间,因为不需要固定大小的casper-rw文件或分区。它们对于安装操作系统没有太大用处,安装操作系统可以通过引导ISO文件来完成。

使用GParted在大容量闪存驱动器上创建GPT分区表。 根据您拥有的操作系统数量创建尽可能多的ext4分区。每个分区的大小应为8GB或更大。 以UEFI模式启动Live驱动器并插入大目标驱动器。 在分区时选择“其他选项”。 选择sdc1作为/。 将引导加载程序安装到USB驱动器的根目录。 保留所有其他分区的格式框未选中。 如果需要,可以选择加密主目录进行安装,但全盘加密对我来说在闪存驱动器上无法正常工作。 对于您选择安装的每个操作系统,请重复此过程,例如sdc2、sdc3等。 在最后一次安装后,启动闪存驱动器并执行update-grub命令。这将在grub.cfg中添加所有操作系统。 您可以为任何希望进行Live引导或持久引导的ISO文件保留一个分区,通过grub.cfg循环挂载这些ISO文件,从而制作一个安装程序闪存驱动器。

这里是一个用于在多启动闪存驱动器的第二分区上引导 iso 的菜单项(建议来自 sudodus)。

menuentry "ubuntu-12.04-desktop-i386 Partition 2" {
    set isofile="/ubuntu-12.04-desktop-i386.iso"
    set root='(/dev/sda,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。 Boot-repair disk和AVG Rescue CD的菜单项可能与Ubuntu不同。 MultiBootUSB脚本应该会告诉你如何编写这些内容。