我遵循 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
}
去做:
在菜单项上方更改分区的代码名称,按住
/live/somelinux.iso
,在我的情况下,这是hd0,msdos5
因为它在/dev/sda5
/将文件名从 somelinux.iso 更改为您的,就我而言:
ubuntu-14.04-desktop-amd64.iso
- 更新 GRUB
sudo update-grub
- 重启
答案4
我发现问题在于 grub2 的语法发生了变化。按照此链接找到要启动的 grub 条目,仍然需要填写一些行才能工作。
http://git.marmotte.net/git/glim/tree/grub2