20.04 从 GRUB 菜单启动 .iso

hey*_*ema 4 boot grub2 iso 20.04

我正在尝试从 GRUB 启动 Ubuntu .iso 映像。在Full Circle杂志,#157 page 61,他们描述了如何做到这一点。它不起作用。

我编辑了/etc/grub.d/40-custom,并添加了以下内容...

# Full Circle #157, page 61
menuentry "Ubuntu 20.04 ISO" {
     insmod part_gpt
     insmod ext2
     set root=(hd0,gpt7)
     set isofile="/ubuntu-20.04-desktop-amd64.iso"
     loopback loop $isofile
     linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile noprompt noeject
     initrd (loop)/casper/initrd
}
Run Code Online (Sandbox Code Playgroud)

我的 Ubuntu 根目录在 /dev/sda7 上。

我的 .iso 文件位于 /。

我尝试启动 .iso 时遇到的错误是...

disk hd0,gpt7 not found
no server is specified
can't find command noprompt
you need to load the kernel first
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

关于如何使这项工作的任何想法?

C.S*_*ron 7

在 HDD 上启动 ISO 文件(包括 20.04)

用于引导 ISO 的基本 GRUB 环回菜单项是:

menuentry "isoname ISO" {
    set root=(hdX,Y)
    set isofile="/[path]/[name].iso"
        loopback loop $isofile
        linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile --
        initrd (loop)/casper/initrd
}
Run Code Online (Sandbox Code Playgroud)
  • hdX磁盘在哪里,Y是 ISO 位置的分区号。

  • [path]是 ISO 文件的路径,是 ISO 文件[name]的名称。

  • 允许多个 ISO 文件,每个 ISO 文件需要一个或多个菜单项。(每个 ISO 可以有多个持久性文件)。

持久性(可选)

  • 如果我们想要一个持久的操作系统,请将这个词添加Persistent到 GRUB 菜单项中,(通过/etc/grub.d/40-custom)。

  • 如果使用持久分区,请将其设为 ext4 并将其标记casper-rw为 19.10 和以前的 ISO 文件。

  • 对于 20.04 ISO 文件,标记为持久分区writable

  • 每个驱动器只允许一个持久分区

  • 如果使用持久文件,每个 ISO 都可以有自己的持久性。

  • 每个 ISO 可以有一个writable(或casper-rw)最大 4GB 的home-rw文件和一个最大 4GB 的可选文件。

  • 持久文件必须位于FAT32 分区上

  • 如果使用了多个持久化文件,则必须给出一个持久化路径。只需要持久文件文件夹的唯一名称。每个文件夹一个 casper-rw/可写文件和一个 home-rw 文件。

GRUB 2.04 解决方法

  • Ubuntu 18.04 和以前的版本使用 GRUB 2.02 进行引导。19.10 及更高版本使用 GRUB 2.04 在 UEFI 模式下启动。GRUB 2.04 在 UEFI 模式下引导 ISO 文件时出现问题。

  • 在 GRUB 2.04 UEFI 模式下引导 ISO 文件的解决方法是添加rmmod tpm/boot/grub/grub.cfg第一个菜单项之前:

    export linux_gfx_mode
    rmmod tpm
    menuentry 'Ubuntu efi' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-79a50dba-9300-4c89-b7e8-887651e746c9' {
    
    Run Code Online (Sandbox Code Playgroud)
  • 如果主机系统是 19.10 之前的版本,则应使用 GRUB 2.02 并且不需要解决方法。

最终菜单可能如下所示:

menuentry "Ubuntu 20.04 ISO" {
    rmmod tpm
    set root=(hd0,3)
    set isofile="/isos/ubuntu-20.04-desktop-amd64.iso"
        loopback loop $isofile
        linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile persistent persistent-path=/ub2004-1/ fsck.mode=skip quiet splash toram -- 
        initrd (loop)/casper/initrd
}
Run Code Online (Sandbox Code Playgroud)

rmmod tpm显示在备用位置

  • toram 选项可用于在具有大量 RAM 的计算机上以高速启动到 RAM,但启动需要更长的时间。

  • fsck.mode=skip 选项停止文件系统检查。

  • 可以通过maybe-ubiquity从 grub.cfg 中删除来消除 Language/Try/Install 屏幕

  • rmmod tpm在菜单项中找到备用位置,error: no such module在 BIOS 模式下启动时会发出警告,请参阅 post 60 错误报告https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/1851311

mkusb USB-pack-EFI 替换rmmod tpm为:

grub_platform
if test "$grub_platform" = "efi"; then
        rmmod tpm
fi
Run Code Online (Sandbox Code Playgroud)

所以这rmmod tpm只能在 UEFI 引导上运行。