如何创建与 BIOS 和 UEFI 兼容的多重启动 USB?

如何创建与 BIOS 和 UEFI 兼容的多重启动 USB?

目前,我已经使用 Yumi 的 UEFI 程序创建了一个驱动器,用于为 UEFI 创建多启动 USB,但最近,我还需要一个 BIOS 驱动器。有没有办法将这两个驱动器合并到一个驱动器中?基本上支持 UEFI 和 BIOS?或者我需要两个不同的 USB?谢谢!

答案1

从头开始的多重启动 USB 棒

(修改如何在 UEFI 机器上使用 grub2 从驱动器启动 ISO 文件?

GParted 分区

分区

  • 在 USB 上创建 gpt 分区表。

  • 如上图创建分区,分区 2 选择未格式化。

  • 创建一个casper-rw文件:

    sudo dd if=/dev/zero of=casper-rw bs=1M count=512

    sudo mkfs.ext3 -L casper-rw -F casper-rw

(其中count=512持久大小以兆字节为单位,最大为 4GB)。

持久性分区

持久分区

  • 在 USB-PRST 分区上为每个操作系统(需要持久性)创建一个唯一名称的文件夹。

  • 向每个持久性文件夹添加一个 casper-rw 文件(以及可选的 home-rw 文件)。可以通过重命名 casper-rw 文件来生成 home-rw 文件。home-rw 文件就像完整安装上的单独主分区,可以在版本升级后重复使用。

数据分区

数据分区

  • 在 NTFS USB-DATA 分区上为 ISO 文件创建一个文件夹。

  • 将一些 ISO 添加至 isos 文件夹。

启动文件夹

启动分区

  • 打开最新的 ISO 文件并将 boot 和 EFI 文件夹复制到 USB-BOOT 分区。rmmod tpm在第一个菜单项上方添加 grub.cfg

  • 安装 grub

    sudo mount /dev/sdx3 /mnt

    sudo grub-install --boot-directory=/mnt/boot /dev/sdx

编辑 grub.cfg 以循环挂载 ISO 文件。persistent persistent-path=/<persistent-folder-name>/如果您想要多个持久性,请包括:。

if loadfont /boot/grub/font.pf2 ; then
    set gfxmode=auto
    insmod efi_gop
    insmod efi_uga
    insmod gfxterm
    terminal_output gfxterm
    rmmod tpm
fi

set menu_color_normal=white/black
set menu_color_highlight=black/light-gray

set timeout=5

menuentry "ubuntu-19.10-desktop-amd64.iso" {
    set root=(hd0,1)
    set isofile="/isos/ubuntu-19.10-desktop-amd64.iso"
        loopback loop $isofile
        linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile persistent persistent-path=/persist-1/ splash --
        initrd (loop)/casper/initrd
}
menuentry "lubuntu-16.04.3-desktop-amd64.iso" {
    set root=(hd0,1)
    set isofile="/isos/lubuntu-16.04.3-desktop-amd64.iso"
        loopback loop $isofile
        linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isofile persistent persistent-path=/persist-2/ splash --
        initrd (loop)/casper/initrd.lz
}

Grub.cfg 示例

sudo parted -ls /dev/sdx

sudo parted -ls /dev/sdx

sudo lsblk -f /dev/sdx

sudo lsblk -f /dev/sdx

如果将上述设备用作 USB 记忆棒,则可用于启动存储在 Windows 计算机上的 ISO。内部驱动器上不需要 Grub。

答案2

为了安全起见,请使用两个 USB,一个用于执行安装,另一个用于待安装。

  1. 将 USB 格式化为 FAT。

  2. 安装软件包grub-efi-amd64grub-pc-bin

  3. 插入 USB 并记下设备(例如/dev/sdb)和挂载点(例如)/media/user/USB

  4. 创建一个chroot

    dirs=(dev bin sbin etc sys usr proc lib lib64)
    for dir in ${dirs[@]}; do
      mkdir /media/user/USB/$dir && sudo mount --bind /$dir /media/user/USB/$dir
    done
    sudo chroot /media/user/USB/
    
  5. 进入 chroot 后,运行以下命令:

    grub-install --force --removable --target=x86_64-efi --efi-directory=/ /dev/sdb1
    grub-install --force --removable --target=i386-pc --boot-directory=/ /dev/sdb
    exit
    
  6. 现在卸载并删除目录:

    for dir in ${dirs[@]}; do
      sudo umount /media/user/USB/$dir && rm /media/user/USB/$dir
    done
    
  7. 将 iso 复制到您的 USB。

  8. 在你的 USB 中,创建文件/grub/grub.cfg并添加内容:

    set root='(hd0,1)'
    configfile /boot/grub/grub.cfg
    
  9. 要启动 Debian 和 Kali,在此示例中(您必须根据下载的内容更改 iso 的名称),添加/boot/grub/grub.cfg

    set root='(hd0,1)'
    
    menuentry "Kali Live system" {
      set iso_path=/kali-linux-2020.1b-live-i386.iso
      loopback loop $iso_path
      linux (loop)/live/vmlinuz-5.4.0-kali2-686-pae boot=live components quiet splash noeject findiso=${iso_path}
      initrd  (loop)/live/initrd.img-5.4.0-kali2-686-pae
    }
    
    menuentry "Debian GNU/Linux Live (kernel 4.19.0-8-686)" {
      set iso_path=/debian-live-10.3.0-i386-xfce.iso
      loopback loop $iso_path
      linux (loop)/live/vmlinuz-4.19.0-8-686 boot=live findiso=$iso_path components splash quiet "${loopback}"
      initrd (loop)/live/initrd.img-4.19.0-8-686
    }
    

¹ 您可以在您的机器操作系统上执行此操作,但有几个命令如果错误,可能会损害您的系统。

相关内容