有没有办法在从实时磁盘运行系统时从 iso 启动?

有没有办法在从实时磁盘运行系统时从 iso 启动?

这是一个有点复杂的问题,让我解释一下预期的内容:

我知道我们可以添加 GRUBmenuentry和 ISO 文件的位置,并使用 GRUB 条目从 ISO 引导。 (IE方法)

但假设:

  • 我有一个 GNU/Linux(比如 Trisquel 7.0)的 ISO 文件存储在计算机(硬盘)中,比如/dev/sda3/
  • 我想将其安装在/dev/sda4
  • 我有 Ubuntu 14.04 安装(可启动)磁盘,我可以从中安装或尝试实时系统。
  • 考虑我当前没有安装操作系统或安装的系统已崩溃/损坏(与当前的引导加载程序无关)

问题是:使用安装盘,运行实时环境(例如尝试不安装 Ubuntu 14.04),我可以从 ISO(Trisquel 7.0)启动/dev/sda3并安装该系统/dev/sda4吗?我如何能?

注意:我同意最好从 iso 创建/刻录我想要安装的系统的实时磁盘/USB,但是如果现在没有可用的磁盘/USB,那么我可以执行上述操作吗?

我认为有一种可能的技术:从(Ubuntu的)实时环境安装GRUB到HDD上,指向我最终想要启动的ISO(Trisquel)的路径!如何?

答案1

在虚拟机上测试。使用此方法能够从 Trisquel Live ISO(驻留在硬盘上)启动。

所需的步骤如下所示:

  1. 启动到 Ubuntu Live 磁盘后,开始安装过程。您至少需要对系统进行最少的安装才能/dev/sda4获得工作且可引导的 GRUB。但完全安装更容易(相当快)。

    1.a.请务必将安装限制为仅更改/dev/sda4.为此,当询问硬盘设置时,您需要选择“其他”。

  2. 通过引导到已安装的系统来测试您的新 GRUB 是否正常工作。

    2.a.笔记:在 Ubuntu 下,要显示 GRUB 菜单,请按住Shift系统启动。这个问题包含有关如何在每次启动时显示 GRUB 菜单的说明。

  3. 现在您需要添加所需的菜单项,如中所述这个方法你提到的。提供适应:

    3.a. 我假设 Trisquel ISO 位于 的根目录/dev/sda3/

    ISO 映像的菜单项需要添加到/etc/grub.d/40_custom文件中。通过以下方式编辑文件:

    sudo apt-get install gksu
    gksudo gedit /etc/grub.d/40_custom
    

    并将该文件中的文本替换为以下文本:

    #!/bin/sh
    exec tail -n +3 $0
    # This file provides an easy way to add custom menu entries.  Simply type the
    # menu entries you want to add after this comment.  Be careful not to change
    # the 'exec tail' line above.
    
    menuentry "Trisquel ISO" {
            set isofile="/trisquel_7.0_amd64.iso"
            loopback loop (hd0,3)$isofile
            linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile noprompt noeject
            initrd (loop)/casper/initrd
    }
    

    哪里:

    • Trisquel ISO= 您想要在 Grub 菜单中显示的名称。
    • /trisquel_7.0_amd64.iso= 目标分区上 ISO 映像的路径。
    • (hd0,3)= 包含 ISO 映像的分区(对于 GRUB,它等于/dev/sda3linux 中的:"sda1" == "(hd0,1)"; "sdb2" == "(hd1,2)"; ...)。
    • 注意:这tail -n +3只是“grub 开始从哪一行读取配置”。本例中的第 3 行是第一个注释行,这很好。

    3.b.保存并关闭此文件,然后运行此命令(以应用更改):

    sudo update-grub
    
  4. 现在您应该能够从硬盘上的 ISO 启动。
    笔记:如果您需要/dev/sda3在安装过程中使用,请从 Live CD 环境使用以下命令:

    sudo umount -l /isodevice
    

进一步阅读:参考例子Ubuntu 菜单项。

答案2

我能够在基于 kickstart 的发行版上实现这一目标,但它也应该适用于其他发行版。挂载 iso,取出文件: cat .....isolinux/initrd.img | unxz| cpio -idm 修改kickstart文件并存储在新文件中

现在棘手的部分...获取 iso 并将其推入新的 initrd 树(从原始 initrd.img 复制),然后使用 dracut 放入一个脚本,该脚本将为其创建一个设备文件,其中包含“losetup”早期启动。然后使用 boot param inst.repo=hd:/dev/loop9 (你的循环)并使用 inst.ks=file://// (kickstart 文件.. 可能会从 iso 中提取,如果有的话)。

然后使用 kexec -l 加载新的 initramfs 和内核,重新启动将导致加载/启动 iso。

我将这个答案放在这里主要是为了确认a)它可以完成,b)我的经验是它非常复杂。

相关内容