纯 Linux 多重启动 USB - 无第三方软件

纯 Linux 多重启动 USB - 无第三方软件

是否可以完全从 Linux 中创建适用于 Linux 发行版的多重引导 USB,无需第三方软件?

注意:这是一个自我回答的问题。我想与 Linux 社区分享我的方法。

答案1

使用 Linux Mint 19 64 位作为主机操作系统。可以相当肯定地假设类似的发行版和发行版(例如 Ubuntu)将具有相同的行为。

我们会需要:

  • 至少 8GB 的​​ USB(现在两个 Linux ISO 映像不适合 4GB USB)
  • Linux 的 ISO 映像。在这种情况下,乌班图19.04Debian 10。这些图像仅作为示例。其他发行版或版本适合本指南,包括 Clonezilla 或 GParted 等工具。

过程

  1. 安装grub-efi-amd64GRUB EFI 兼容性。

    sudo apt install -y grub-efi-amd64
    
  2. msdos使用分区表格式化 USB 。分区必须是 FAT 格式。将分区标记为可引导。

  3. 安装 USB。记下:哪个设备是 ie /dev/sdc1,以及它安装的路径 ie /media/foo/USB/。从现在开始,我将使用这两个示例作为指南。

  4. 安装GRUB:

    dirs=(bin dev etc lib lib64 proc sbin sys usr)
    for dir in "${dirs[@]}"; do
      mkdir /media/foo/USB/$dir && sudo mount --bind /$dir /media/foo/USB/$dir
    done
    
    sudo chroot /media/foo/USB/
    
    # chroot environment
    # first we install grub efi
    
    grub-install --force --removable --target=x86_64-efi --efi-directory=/ /dev/sdc1
    
    # now we install grub i386
    
    grub-install --force --removable --target=i386-pc --boot-directory=/ /dev/sdc
    
    # exit the chroot
    
    exit
    

警告!!是非常小心使用下一个命令,因为您可能会删除绑定的目录并损害您的系统。使用制表符完成路径而不是键入路径。

for dir in "${dirs[@]}"; do
  sudo umount /media/foo/USB/$dir && rm -rf /media/foo/USB/$dir
done
  1. 挂载 ISO,并将文件复制/boot/grub/grub.cfg/media/foo/USB/boot/grub.更改名称,即ubuntu.cfgdebian.cfg

  2. 将 ISO 复制到 USB 中。

GRUB配置:

  1. /media/foo/USB/grub在该文件下创建grub.cfg并将以下内容放在那里:

    set root='(hd0,1)'
    configfile /boot/grub/grub.cfg
    
  2. /media/foo/USB/boot/grub在该文件下创建grub.cfg并将以下内容放在那里:

    menuentry 'Ubuntu 19' {
      configfile /boot/grub/ubuntu.cfg
    }
    
    menuentry 'Debian 10' {
      configfile /boot/grub/debian.cfg
    }
    

配置ubuntu.cfg

编辑该文件/media/foo/USB/boot/grub/ubuntu.cfg并在顶部添加以下行:

set iso_path=/ubuntu-19.04-desktop-amd64.iso # the name of the ISO
loopback loop $iso_path

将所有出现的字符串替换/casper/(loop)/casper/

将所有出现的字符串替换vmlinuzvmlinuz iso-scan/filename=$iso_path

配置 debian.cfg

编辑该文件/media/foo/USB/boot/grub/debian.cfg并在顶部添加以下行:

set iso_path=/debian-live-10.2.0-i386-lxqt+nonfree.iso # the name of the ISO
loopback loop $iso_path

将所有出现的字符串替换/live/(loop)/live/

将所有出现的字符串替换/d-i/(loop)/d-i/


我们现在准备测试 USB 是否正常工作,只需在连接 USB 的情况下启动您的计算机,根据 BIOS/EFI,您将有不同的选项在 BIOS 或 EFI 启动之间进行选择,或者仅选择从 USB 启动旧机器。


为了简单起见,并且由于这种方法相当先进,我省略了很多细节,我假设用户能够理清这些细节。无论如何,欢迎建议、批评、改进。如果您要求,可以编辑此答案以添加其他 Linux 系统的 GRUB 配置。

对于 Windows 安装程序使用相同的方法

相关内容