从 grub 菜单启动 ubuntu iso 文件

从 grub 菜单启动 ubuntu iso 文件

我遵循 Grub2 ISO 启动指南

https://help.ubuntu.com/community/Grub2/ISOBoot

这是我的 iso 启动菜单

menuentry "Ubuntu 14.04 Live" {
     set isofile="/lilw/os/ubuntu.iso"
     loopback loop (hd0,10)$isofile
     linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isofile noprompt noeject
     initrd (loop)/casper/initrd.lz
}

但是我无法从 iso 文件启动,它总是使我的系统重新启动。没有发出任何消息,所以我不知道发生了什么。

如果我进入 grub 菜单然后使用命令

grub >

输入以下命令:

grub > loopback loop (hd0,10)/lilw/os/ubuntu.iso
grub > linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isofile noprompt noeject
grub > initrd (loop)/casper/initrd.lz

进而

grub > boot

它将正常启动到 iso。

我不想以这种方式启动。但是 grub 中的菜单项不起作用。

仅供参考:我的系统上运行着多个版本的 ubuntu,范围从 10.04 到最新版本。我的 iso 文件存储在 sda10 中,它是当前 ubuntu grub 的 /home。

编辑1:我提取了 iso 文件的内容,但仍然无法使用 ubuntu 启动。但是当我将其内容提取到文件夹时,我可以使用 Fedora 20 启动,很奇怪。

编辑2:最后我找到了一个可以帮助解决新 grub2 命令语法问题的网站。所有启动失败都是因为 grub2 语法错误

尝试这个:解决了我的问题

http://git.marmotte.net/git/glim/tree/grub2

因此我的 grub 菜单项将如下所示:

menuentry "Ubuntu 14.04 (LTS) Live Desktop amd64" --class ubuntu {
   set isoname="ubuntu-14.04-desktop-amd64.iso"
   set isofile="/lilw/os/${isoname}"
   loopback loop (hd0,10)$isofile
   linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=${isofile} quiet splash
   initrd (loop)/casper/initrd.lz
}

如果我缺少 isofile 的两个 '{ }',它就无法启动。太奇怪了

答案1

尝试这个

 menuentry "Ubuntu 14.04 Live" {
 loopback loop (hd0,10)/lilw/os/ubuntu.iso
 linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=/lilw/os/ubuntu.iso noprompt noeject
 initrd (loop)/casper/initrd.lz
 }

答案2

在许多版本的 ubuntu iso 中,例如在 Ubuntu 18.10(Cosmic Cuttlefish)中,文件initrd.lz只是initrd。我建议您去检查 iso 文件中的 initrd 和 vmlinuz 文件。

在启动 Ubuntu 18.10 时,我也犯了那个错误。

答案3

  • 将您的 ISO 文件放置到/live

sudo mkdir /live

sudo cp somelinux.iso /live

  • 添加新菜单项到grub.cfg

sudo gedit /etc/grub.d/40_custom

menuentry 'ISO Ubuntu 14.04 2014 Live' --class os --class gnu-linux --class gnu --class os --group group_main {
                set isofile="/live/ubuntu-14.04-desktop-amd64.iso"

         insmod ext2
         insmod loopback
         insmod iso9660      
                loopback loop (hd0,msdos5)$isofile      

                linux (loop)/casper/vmlinuz.efi  file=(loop)/cdrom/preseed/ubuntu.seed noprompt boot=casper persistent iso-scan/filename=/$isofile quiet splash --
                initrd (loop)/casper/initrd.lz


}

去做:

  1. 在菜单项上方更改分区的代码名称,按住/live/somelinux.iso,在我的情况下,这是hd0,msdos5因为它在/dev/sda5/

  2. 将文件名从 somelinux.iso 更改为您的,就我而言:ubuntu-14.04-desktop-amd64.iso

    • 更新 GRUB

sudo update-grub

  • 重启

答案4

我发现问题在于 grub2 的语法发生了变化。按照此链接找到要启动的 grub 条目,仍然需要填写一些行才能工作。

http://git.marmotte.net/git/glim/tree/grub2

相关内容