AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1025656
Accepted
Fabby
Fabby
Asked: 2018-04-17 15:50:26 +0800 CST2018-04-17 15:50:26 +0800 CST 2018-04-17 15:50:26 +0800 CST

如何在 UEFI 机器上使用 grub2 从我的驱动器引导 ISO 文件?

  • 772

我有一堆实时 ISO 文件,如GParted、CloneZilla、Boot-Repair、Ubuntu 14.04 32 位…… 下载/opt到我的旧 BIOS 机器上,我曾经能够将它们添加到 grub 菜单并启动它们. :-)

我现在有一台 UEFI 机器,我能找到的所有信息都是针对 BIOS 机器的。

从 grub 引导这些 ISO 文件的步骤是什么?

我只是厌倦了一直将这些“刻录”到USB记忆棒上,因为我永远找不到我需要的记忆棒,而我的电脑本身在我周围的混乱中更难松动...... ) :-(

grub2 boot live-usb iso uefi
  • 7 7 个回答
  • 27986 Views

7 个回答

  • Voted
  1. Best Answer
    Fabby
    2018-04-17T15:50:26+08:002018-04-17T15:50:26+08:00

    grub 2.04 中有一个错误,因此请确保您拥有先前或更高版本。

    嗯,将 ISO 文件添加到 grub 的基本原理对于 UEFI 和 BIOS 机器是相同的:编辑/etc/grub.d/40_custom并添加一个menuentry项目(本示例中使用 GParted)到文件底部:

    menuentry "GParted Live ISO" {
    }
    

    现在我们要添加一个变量,其中包含我们存储 ISO 的目录(到目前为止,一切都很好:与 BIOS 机器没有区别):

    menuentry "GParted Live ISO" {
      set GPartedISOFile="/opt/Live-ISOs/gparted-live-0.31.0-1-amd64.iso"
    }
    

    我/opt用来存储这些,因为我不喜欢在我的机器的根目录中创建目录,并且根据Linux 文件系统层次结构,无论如何都应该驻留可选软件。

    在我们添加loopback变量之前,我们需要找出文件存储在哪个硬盘上,所以我们做了一个:df --output=source /opt/Live-ISOs/gparted-live-0.31.0-1-amd64.iso | tail -1并且我的机器上的输出是:/dev/sdb2。

    但是grub 使用 ( hdX,Y) 表示法,这就是 UEFI 和 BIOS 机器之间的区别所在!所以现在重新启动您的机器,进入 grub 菜单并按C: 这将带您进入 grub 命令提示符,其中包含与您习惯不同的命令,但您唯一需要的是:ls。

    在我的机器上,输出是:

    (hd0) (hd1) (hd1,gpt3) (hd1,gpt2) (hd1,gpt1) (hd2) ... (hd3) ...
    

    嗯?4个驱动?我只有3个!而且它不在(hd1,4)BIOS 中,而是(hd1,gpt3)在 UEFI 中,并且(hd0)根本没有分区!

    好吧,显然当 NVRAM 的一部分用作存储并显示时,(hd0) 您需要从 1 开始对驱动器进行编号!  尽管您在启动 ISO 文件时找到的所有信息都表明您必须从 0 开始编号(在 BIOS 机器上总是如此,但在某些 UEFI 机器上则不一定如此!)

    因此,我机器上的 ISO 文件的值loopback变为(第二个驱动器,第二个分区):(hd2,gpt2)$GPartedISOFile/dev/sdb2hd2gpt2

    menuentry "GParted Live ISO" {
      set GPartedISOFile="/opt/Live-ISOs/gparted-live-0.31.0-1-amd64.iso"
      loopback loop (hd2,gpt2)$GPartedISOFile
    }
    

    另一个区别是BIOS 机器上的 and 在 UEFI 机器上被调用linux,这给了我们最终的结果:initrdlinuxefiinitrdefi

    #!/bin/sh
    exec tail -n +3 $0
    # This file provides an easy way to add custom menu entries.  Simply type the
    # menu entries you want to add after this comment.  Be careful not to change
    # the 'exec tail' line above.
    
    menuentry "GParted Live ISO" {
      set GPartedISOFile="/opt/Live-ISOs/gparted-live-0.31.0-1-amd64.iso"
      loopback loop (hd2,gpt2)$GPartedISOFile
      linuxefi (loop)/live/vmlinuz boot=live components config findiso=$GPartedISOFile ip=frommedia toram=filesystem.squashfs union=overlay username=user
      initrdefi (loop)/live/initrd.img
    }
    

    所以现在保存该文件,并使用以下命令更新 grub:

    update-grub
    

    完成上述所有操作后,重新启动,进入 grub 菜单,选择GParted Live ISO,您现在可以轻松启动您的 ISO,而无需再次寻找 USB 记忆棒!

    :-)

    CloneZilla Live 示例(针对此问题)

    menuentry "CloneZilla ISO" {
      set ISOFile="/opt/Live-ISOs/clonezilla-live-20170905-zesty-amd64.iso"
      loopback loop (hd2,gpt2)$ISOFile
      linuxefi (loop)/live/vmlinuz boot=live components config findiso=$ISOFile ip=frommedia toram=filesystem.squashfs union=overlay
      initrdefi (loop)/live/initrd.img
    }
    
    • 18
  2. oldfred
    2018-04-17T19:55:03+08:002018-04-17T19:55:03+08:00

    另一种方法是像这样向 40_custom 添加一个配置文件:

    menuentry 'Live ISOs on SSD' {
    configfile (hd0,3)/ISO/livecdimage.cfg
    } 
    
    menuentry 'Live ISOs on HDD (boot on SSD)' {
    configfile (hd1,3)/ISO/livecdimage.cfg
    } 
    

    我这样做是因为当我更新 ISO 时,我总是忘记运行sudo update-grub. 上面的条目永远不必更改,我可以编辑 livecdimage.cfg,它与任何 40_custom 具有相同的格式但没有标题行,并且位于我的 ISO 分区的 /ISO 文件夹中。

    我确实将 toram 添加为另一个引导参数,并在具有 Nvidia 的系统上添加 nomodeset 引导参数。但是还是经常要卸载/isodevice。

    无法卸载 isodevice 卸载 ISO https://bugs.launchpad.net/ubuntu/+source/ubiquity/+bug/1155216

    sudo umount -l -r -f /isodevice
    

    这是我的 livecdimage.cfg 文件的一部分

    # livecdimage.cfg
    # Add this to 40_custom to load this file:
    # menuentry 'Live ISOs' {
    # configfile (hd1,3)/iso/livecdimage.cfg
    #} 
    # Add iso names to livecdimage.cfg
    #for i in `ls *.iso`;do echo "# "$i>>livecdimage.cfg; done;
    
    menuentry "Ubuntu 16.04.4 xenial amd64" {
        set isofile="/ISO/ubuntu-16.04.4-desktop-amd64.iso"
        loopback loop (hd0,3)$isofile 
        linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isofile toram
        initrd (loop)/casper/initrd.lz
    }
    
    menuentry "Ubuntu 18.04 Bionic amd64" {
        set isofile="/ISO/bionic-desktop-amd64.iso"
        loopback loop (hd0,3)$isofile 
        linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isofile toram
        initrd (loop)/casper/initrd.lz
    }
    
    # spacer line
    menuentry " " {
    set root= 
    }
    
    menuentry "Reboot" {
        reboot
    }
    
    menuentry "Halt" {
        halt
    }
    
    • 8
  3. C.S.Cameron
    2018-04-18T08:02:24+08:002018-04-18T08:02:24+08:00

    mkusb 多启动黑客

    Mkusb 为自定义启动驱动器项目奠定了良好的基础,因为它具有 BIOS 和 UEFI 的能力。

    这个 hack 引导多个 ISO 文件,包括 Windows 安装程序,并有一个 grub2 菜单。

    大多数操作系统的 Grub2 菜单条目都可以使用 Google 搜索获得,并且超出了此答案的范围。

    mkusb 默认值

    创建持久 USB 驱动器时使用 mkusb 默认值。

    mkusb 再次使用默认值

    如果有疑问,请使用 mkusb 持久性默认值,分区大小可以稍后调整,但需要时间。

    DUS 控制台

    安装后的 DUS 控制台。

    GParted Before

    GParted 在分区修改之前。

    分手后

    修改后的 Gparted - 用 FAT32 分区覆盖 sdb4、ISO9660 OS 分区和 sdb5、ext2 casper-rw 分区,并使用 FAT32 分区来存储持久性文件。

    持久化分区

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

    持久性文件夹

    持久性文件夹 - 将 casper-rw 文件和可选的 home-rw 文件添加到每个持久性文件夹。可以通过重命名 casper-rw 文件来制作 home-rw 文件。home-rw 文件就像完全安装时的单独主分区,可以在版本升级后重用。

    ISO 文件夹

    在 NTFS usbdata 分区上为 ISO 文件创建一个文件夹。

    ISO 文件夹内容

    将一些 ISO 添加到 ISO 文件夹。

    GRUB 位置

    grub.cfg 位置

    grub.cfg

    编辑 grub.cfg 以循环挂载 ISO 文件。包括:persistent persistent-path=/<persistent-folder-name>/如果你想要持久性。将 rmmod tpm 添加到第一个菜单项上方的 grub.cfg。

    编辑 18.04+在 grub 中指定vmlinuz不是 vmlinuz.efi 和initrd不是 initrd 不是 initid.lz

    sudo parted -ls /dev/sdb

    sudo parted -ls /dev/sdb

    sudo lsblk -f /dev/sdb

    sudo lsblk -f /dev/sdb

    如果需要 Windows 安装程序,从 mkusb“提取 Windows 安装程序”功能开始可能是最简单的(我必须手动将 Windows ISO 提取到 TAR),

    mkusb Windows 安装程序

    安装后为 ISO 创建一个文件夹,如果需要,创建持久性文件夹(类似于上述过程)。

    mkusb Windows grub

    编辑 /boot/grub/grub.cfg 以循环挂载任何 ISO 并指定任何持久性文件夹。

    (还没有找到循环挂载 Windows ISO 文件的方法)。

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

    • 5
  4. user68186
    2018-04-19T09:06:38+08:002018-04-19T09:06:38+08:00

    三个简单的步骤

    将 ISO 添加到 grub 菜单并从中启动。

    一、安装grml-rescueboot

    打开终端并输入:

    sudo apt install grml-rescueboot
    

    二、将iso文件移动到/boot/grml/

    在同一终端输入:

    sudo mv ~/Downloads/<filename.iso> /boot/grml/
    

    三、更新grub

    在同一终端输入:

    sudo update-grub
    

    必要时重复第二步和第三步

    不要忘记从/boot/grml.

    参考:关于 Grub2 ISO 引导的 Ubuntu 帮助

    笔记

    grml-rescueboot不适用于所有实时 ISO 文件。例如,gparted live ISO 不起作用。请参阅无法使用 grml-rescueboot 启动 Gparted Live

    希望这可以帮助

    • 4
  5. C.S.Cameron
    2018-04-19T17:23:38+08:002018-04-19T17:23:38+08:00

    MultiBootUSB - QEMU

    如果您想以最少的麻烦启动 ISO 文件并且不需要持久性,MultiBootUSB 包含一个 QEMU 选项:

    • 启动 MultiBootUSB 并选择 Boot ISO/USB 选项卡。

    • 将 ISO 拖放到选择图像空间上。

    • 选择 RAM 大小并点击 Boot ISO 按钮。

    您无需编辑 grub.cfg 甚至注销。

    MultiBootUSB-QEMU

    • 2
  6. C.S.Cameron
    2018-07-08T09:58:27+08:002018-07-08T09:58:27+08:00

    简单的 mkusb ISO 多引导程序

    如果您不需要多重持久性,可以很容易地在 mkusb 闪存驱动器上多重引导操作系统 ISO。

    使用 mkusb 使用您选择的默认操作系统制作永久 USB 驱动器,https: //help.ubuntu.com/community/mkusb

    在 usbdata 分区 sdx1 中创建一个文件夹,命名为 ISOs。

    将要启动的 ISO 添加到此文件夹。

    将 menuentries 添加到 /sdx3/boot/grub/grub.cfg 以循环挂载 ISO。

    样品:

    menuentry "Ubuntu-18.04 64-bit ISO" {
        set root=(hd0,1)
        set isofile="/ISOs/ubuntu-18.04-desktop-amd64.iso"
            loopback loop $isofile
            linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile splash --
            initrd (loop)/casper/initrd.lz
    }
    
    menuentry "GParted 64-bit ISO" {
        set root=(hd0,1)
        set isofile="/ISOs/gparted-live-0.31.0-1-amd64.iso"
        loopback loop $isofile
        linux (loop)/live/vmlinuz boot=live union=overlay username=user config components noswap noeject toram=filesystem.squashfs ip='' nosplash findiso=$isofile splash --
        initrd (loop)/live/initrd.img
    }
    
    menuentry "Clonezilla 64-bit ISO" {
        set root=(hd0,1)
        set isofile="/ISOs/clonezilla-live-2.5.5-38-amd64.iso"
        loopback loop $isofile
        linux (loop)/live/vmlinuz boot=live live-config nolocales edd=on nomodeset ocs_live_run=\"ocs-live-general\" ocs_live_extra_param=\"\"   ocs_live_keymap=\"\" ocs_live_batch=\"no\" ocs_lang=\"\" vga=788   ip=frommedia nosplash toram=filesystem.squashfs findiso=$isofile splash --
        initrd (loop)/live/initrd.img
    }
    
    • 2
  7. PrakashS
    2020-06-09T21:31:34+08:002020-06-09T21:31:34+08:00

    这可能是您需要的多重引导解决方案。

    https://www.ventoy.net/en/index.html

    这个可启动的 USB 制造商在 USB 驱动器中创建两个分区。一种是 32MB FAT 32 EFI 分区。另一个是与 USB 驱动器的其余部分大小相等的 exfat 分区。您可以将任意数量的 ISO(包括 Windows)复制到根文件夹或任何子文件夹。您也可以将此分区用于正常存储。

    在启动菜单中选择此 USB,它会将所有支持的 ISO 显示为可供选择的列表。根据我的经验,它适用于 Ubuntu、Kubuntu、Mint、Clonezilla 和 Windows。

    文托

    • 1

相关问题

  • 更改 Wubi 的启动顺序

  • 如何在 Ubuntu 启动时显示或隐藏启动消息?

  • 如何避免启动时出现“S to Skip”消息?

  • 如何使用 Mac 创建 Ubuntu live USB?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve