从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中的menuentry不起作用。

仅供参考:我的系统上运行了多个版本的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的两个'{}’,它将无法启动。 太奇怪了

试试这个

  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 } 
  • 将您的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 hd0,msdos5 /上

  2. 将文件名从somelinux.iso更改为你的文件名,在我的情况下我有: ubuntu-14.04-desktop-amd64.iso

    • 更新GRUB

sudo update-grub

  • 重启

我想出问题是grub2的语法改变了。 按照这个链接找到要启动的grub条目,仍然需要填写一些行来工作。

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