如何创建一个多分区 USB 驱动器,它也充当可引导的 ubuntu.iso?

Ray*_*rth 7 partitioning boot usb system-installation

这个老问题听起来像我想要的:Copy ubuntu.iso to Usb Stick with two partitions

它被标记为重复:How do I install Ubuntu to a USB key? (不使用启动盘创建器)

但是答案都回答了一个不同的问题,即如何创建具有多个分区的可启动 USB。

我不想要简单可启动的东西;我想要一些可以用来安装Ubuntu 的东西(如果我只是用来dd复制 iso ,我会得到什么),但是除了 iso 中的内容之外,USB 记忆棒应该有一个或多个可写分区。

Lor*_*eel 6

另一种可能的解决方案是使用Ventoy。直接从工具说明:

Ventoy 是一个开源工具,用于为 ISO/WIM/IMG/VHD(x)/EFI 文件创建可启动的 USB 驱动器。使用ventoy,您无需反复格式化磁盘,只需将映像文件复制到USB 驱动器并启动它即可。您可以一次复制多个 iso 文件,ventoy 将为您提供一个启动菜单来选择它们。Legacy BIOS 和 UEFI 都以相同的方式受支持。以相同的方式支持 MBR 和 GPT 分区样式。

我已经创建了一个可启动的 USB,我只是通过复制/粘贴过程复制了我的 Ubuntu ISO 文件,这样当 USB 记忆棒用作可启动驱动器时,它们会显示在菜单中。同时,我也可以使用这个 USB 存储我的个人数据(它们不会出现在 Ventoy 菜单中)。

这意味着当我使用这个 U 盘作为可启动驱动器时,我有一个这样的菜单(截图来自官方网站):

通风菜单

当我通过 Nautilus 打开它时,它就像一个普通的 U 盘,您可以在其中放置您的文件(截图来自我的 Ubuntu 20.04):

鹦鹉螺

您可以从发布页面下载 Ventoy 。选择.tar.gz版本,将其解压缩,然后在终端中转到包含Ventoy2Disk.sh.

然后,如果您的 U 盘是/dev/sdb,您可以运行:

sudo bash 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)
Run Code Online (Sandbox Code Playgroud)

Ventoy 安装中提供了更多详细信息。

另一个有趣的来源是RedHat.com上的这篇文章:Creating a multi-boot Linux desktop system


sch*_*ity 5

  1. 根据需要对 Pendrive 进行分区,在 FAT 分区中为 ISO 映像提供空间,第一个分区。

  2. 运行lsblk以确定哪个设备是您的笔式驱动器,即/dev/sdbFAT 分区的第一个分区,即/dev/sdb1. 挂载它,即/media/user/PENDRIVE

  3. 将此分区标记为可引导,您可以从磁盘实用程序执行此操作。

  4. 运行这些命令:

    警告!前面有危险的命令,你可能会破坏你的系统!建议:在虚拟机中执行此操作,或者,如果您有备用的随身碟,则在实时环境中执行此操作(更简单)。

    sudo apt install grub-efi-amd64
    
    dirs=(dev bin sbin etc sys usr proc lib lib64)
    
    for dir in "${dirs[@]}"; do
      mkdir -p /media/user/PENDRIVE/$dir
      sudo mount --bind /$dir /media/user/PENDRIVE/$dir
    done
    
    sudo chroot /media/user/PENDRIVE/ grub-install --force --removable --target=x86_64-efi --efi-directory=/ /dev/sdb1
    
    sudo chroot /media/user/PENDRIVE/ grub-install --force --removable --target=i386-pc --boot-directory=/ /dev/sdb
    
    Run Code Online (Sandbox Code Playgroud)

    等到命令完成。

  5. 卸载绑定的目录并删除它们:

    for dir in "${dirs[@]}"; do
      sudo umount /media/user/PENDRIVE/$dir
      rm -r /media/user/PENDRIVE/$dir
    done
    
    Run Code Online (Sandbox Code Playgroud)
  6. grub.cfg/media/user/PENDRIVE/grub/其内容下创建一个文件:

    set root='(hd0,1)'
    configfile /boot/grub/grub.cfg
    
    Run Code Online (Sandbox Code Playgroud)
  7. 挂载 Ubuntu ISO 并将grub.cfg文件复制到/media/user/PENDRIVE/boot/grub/

  8. 更改文件¹,在本例中为 ubuntu-20.04.1-desktop-amd64.iso

设置根=“(hd0,1)”
设置 iso_path=/ubuntu-20.04.1-desktop-amd64.iso
环回循环 $iso_path

菜单项“Ubuntu”{
    设置 gfxpayload=keep
    linux    (loop) /casper/vmlinuz iso-scan/filename=$iso_path file=/cdrom/preseed/ubuntu.seed 也许是无处不在的安静飞溅 ---
    initrd   (循环) /casper/initrd
}
  1. 复制分区中的 ISO 映像(第一个 FAT 映像)。

准备好,您现在拥有一个带有您创建的分区的 EFI/i386 可引导笔式驱动器。


¹您可以更改所有条目,其余条目保持不变,在我的示例中,我正在简化。


C.S*_*ron 5

简单手工制作持久USB

如果您喜欢学习体验,您可以创建一个多分区、永久 USB 来从头开始安装 Ubuntu。

  • 引导安装的 Ubuntu 或 Live USB。
  • 插入目标 USB。
  • 启动 GParted。
  • 在目标 USB 上创建 GPT 分区表。
  • 在左侧创建一个1MB的BIOS引导分区,格式化为未格式化。
  • 旁边添加一个300MB FAT32 EFI启动分区。
  • 添加一个足以容纳 Ubuntu ISO 内容的 ext4 根分区(20.04 约为 3GB)。
  • 创建一个标记为 casper-rw 的 ext4 分区
  • 如果需要,添加 NTFS 数据分区。
  • 应用所有操作。
  • 标记分区 1 bios_grub。
  • 标记分区 2 引导,特别是
  • 关闭 GParted。

gparted

  • 以管理员身份打开 ISO 文件夹,使用存档管理器打开 ISO。
  • 将 ISO 的内容提取到目标的根分区。
  • 将启动和 EFI 文件夹从 Archive Manager 窗口拖放到 EFI 启动分区。
  • 编辑 sdx2/boot/grub/grub.cfg 在“尝试 Ubuntu ...”行后添加 set root=(hd0,3) 。
  • 在 --- 后面添加一个空格和“持久”一词。

grub配置文件

  • 安装 grub(如果处于 BIOS 模式或从 Live USB 驱动器启动)运行:

      sudo mount /dev/sdx2 /mnt
    
      sudo grub-install --boot-directory=/mnt/boot /dev/sdx
    
    Run Code Online (Sandbox Code Playgroud)
  • 如果已安装的系统处于 UEFI 模式,请引导至目标驱动器并运行上述命令。

*基于 sudodus 的 mkusb 启动