从 USB 中的 ISO 映像启动 KALI 时,GRUB 在 initramfs 处停止

从 USB 中的 ISO 映像启动 KALI 时,GRUB 在 initramfs 处停止

这是我正在尝试做的事情。

USB Stick Boots to -> GRUB Loader -> GRUB boots one of many ISO files on the USB into LIVE mode.

这是我的目录结构,非常简单

MULTIBOOT(USB stick) ->
- ubuntu-14.04.1-desktop-i386.iso (ISO File)
- Parrot-full-3.6_amd64.iso (ISO File)
- kali-linux-2017.1-amd64.iso (ISO File)
- boot (FOLDER)
- boot/grub (FOLDER)

unbutu iso 在我的计算机和我的 VM parrot 中正常启动,并且 kali iso 加载内核,但停在 initramfs 并抱怨“找不到安装介质”

这是我的 grub.cfg 文件

menuentry "ubuntu-14.04.1-desktop-i386 Desktop ISO" {
 loopback loop /ubuntu-14.04.1-desktop-i386.iso
 linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=/ubuntu-14.04.1-desktop-i386.iso noeject noprompt splash --
 initrd (loop)/casper/initrd.lz
}

menuentry "Parrot-full-3.6_amd64 ISO" {
 loopback loop /Parrot-full-3.6_amd64.iso
 linux (loop)/live/vmlinuz boot=live iso-scan/filename=/Parrot-full-3.6_amd64.iso noeject noprompt splash --
 initrd (loop)/live/initrd.img
}


menuentry "kali3-amd64 Live system" {
    loopback loop /kali-linux-2017.1-amd64.iso
    linux   (loop)/live/vmlinuz boot=live iso-scan/filename=/kali-linux-2017.1-amd64.iso splash username=root hostname=kali
    initrd  (loop)/live/initrd.img
}

我已经在虚拟机和工作中尝试过这些 ISO。我也尝试在我的电脑上使用 RUFUS 将它们放在 USB 上并直接启动。他们工作。 RUFUS 的问题是当我使用单个 ISO 时它可以工作。但我不想为每个 ISO 制作一个 USB。我只想制作一个 USB 来保存所有 ISO,并且我应该能够将我想要的启动到 LIVE 模式。所以我转而使用 GRUB。但我必须说,虽然 GRUB 还不错,但它的文档非常有限且支离破碎。我猜如果我需要这个,那么很多其他人也需要这个。

答案1

解决了问题!!!解决方案:

启动过程中必须使用 findiso 内核参数来定位 iso 文件以加载根文件系统。请参阅下面我的最新且正在运行的 grub.config 条目:

注意:我已将 ISO 文件移动到 /boot-isos/ 文件夹只是为了测试 superGrub。但它们可以在任何地方。只需确保:

1. to give correct path name to the iso file
2. MUST USE findiso kernel parameter to let boot process find the iso file. Else it will NOT work.

我现在USB中的目录结构如下:

USB STICK ->
/boot (folder that holds GRUB)
/boot-isos (folder that holds isos below)
- KALI iso file
- Parrot iso file
- Ubuntu iso file

menuentry "[loopback]Parrot-full-3.6_amd64" {
    set isofile='/boot-isos/Parrot-full-3.6_amd64.iso'
    loopback loop $isofile
    linux (loop)/live/vmlinuz boot=live findiso=$isofile noconfig=sudo username=root hostname=parrot
    initrd (loop)/live/initrd.img
}


menuentry "[loopback]kali-linux-2017.1-amd64" {
    set isofile='/boot-isos/kali-linux-2017.1-amd64.iso'
    loopback loop $isofile
    linux (loop)/live/vmlinuz boot=live findiso=$isofile noconfig=sudo username=root hostname=kali
    initrd (loop)/live/initrd.img
}

答案2

我在这上面花了很多时间。使用命令行和使用 grub.cfg 参数从环回引导的各种方法进行了测试。无法启动 kali 或 parrot。 Ubuntu 每次都能正常启动。我可以预订其他 Linux 发行版。我用 SuperGrub 测试过,结果相同。我相信这个问题与 kali-linux-2017.1-amd64.iso 和 Parrot-full-3.6_amd64.iso 有关。这两个中的引导过程被破坏,因为它期望从已安装的 cd/dvd 驱动器加载根文件系统。像 RUFUS 这样的工具通过将 ISO 的内容扩展到 /cd 文件来解决这个问题,该文件可能作为单独的 ramdisk /mnt/cd 加载和安装。 KALI 和 PARROT 应该解决这个问题。

答案3

我在从多重启动 USB 盘启动实时 Debian 时遇到了同样的问题。我通过添加参数修复了它findiso=$isofile

这是主菜单条目:

menuentry "Debian 12 testing Live ISO" --class debian --class linux {
    set root='(hd0,1)'
    set isofile="/debian-live-testing-amd64-gnome.iso"
    loopback loop $isofile
    linux (loop)/live/vmlinuz boot=live findiso=$isofile iso-scan/filename=${isofile} components noeject  noprompt splash  "${loopback}"
    initrd (loop)/live/initrd.img
}

相关内容