如何将可启动的ISO文件刻录到硬盘分区上,以便用作救援系统?

我计划重新安装Ubuntu,并且我想在我的硬盘分区上烧录一个小型可引导的恢复系统(类似于SystemRescueCD),但仍然能够在同一硬盘上安装Ubuntu并能够引导Ubuntu和恢复分区。这是否可能,如果是,我该如何操作? 编辑: 我当前使用的Ubuntu版本是19.04。

2我使用 dd 将我的 ISO 文件写入到闪存驱动器中,所以我只需将 of=/dev/sd?? 设置为你想要写入的分区,而不是通常使用的闪存驱动器。注意:如果你对 dd(数据转储)不熟悉,请小心使用,如果给出错误的参数,它会覆盖整个硬盘/固态硬盘 - guiverc
是的,这是可能的,在GRUB菜单中添加正确的条目。实际上,您可以引导多个ISO文件,但这取决于ISO镜像本身。 - schrodingerscatcuriosity
1我在想是否需要安装GRUB,或者只需安装Ubuntu即可解决这个问题。我对dd命令很熟悉,而且我本来就要重新安装,所以这并不是一个真正的问题。 - GNULinuxOnboard
1你只需要编辑你的Ubuntu安装中现有的GRUB。 - schrodingerscatcuriosity
1我无法让它在同一物理驱动器上运行。在另一个物理驱动器上运行得很好。继续关注,看看是否有人能够展示如何操作。 - Organic Marble
1我打算在清除硬盘后,从一个实际的系统中进行操作。唯一剩下的将是一个备份分区,以便我可以将我的200GB垃圾移动到新的安装中。在我刷入systemrescuecd或kaspersky recovery或其他类似工具之后,我会安装Ubuntu,并保留备份分区来将所有文件转移到Ubuntu上。 - GNULinuxOnboard
可能最好的做法是先安装Ubuntu,并留下4GB的空间用于恢复分区,然后再刻录ISO文件。 - GNULinuxOnboard
1个回答

从分区引导ISO镜像:
(hd0,6)只是一个例子,你需要根据你拥有的分区进行更改。
  1. 获取ISO文件(显然)

  2. 选择要从中引导ISO镜像的分区。它不需要是特殊的分区,可以是任何格式,至少是FAT、NTFS、EXT*(我没有尝试其他格式)(如果您想要持久性,必须使用FAT格式)。它可以包含其他数据,不会有影响。记下它是哪个分区,例如/dev/sda6

  3. 将ISO文件复制到您的分区。为了整理起见,您可以在分区的根目录下创建一个名为/isoboot/的文件夹,然后再创建一个以系统名称命名的子文件夹,并将ISO文件粘贴到其中。

  4. 挂载ISO文件。最简单的方法是在文件浏览器中右键单击文件,选择上下文菜单中的"使用磁盘映像挂载器打开"选项。

  5. 一旦挂载成功,进入目录/boot/grub/,并复制文件grub.cfg。将其粘贴到/isoboot/<your_system_name>目录中。

  6. 在Ubuntu中,使用sudo权限打开文件/etc/grub.d/40_custom。添加以下菜单项:

    menuentry '您的ISO系统名称' {
      set root='hd0,6' # 这表示/dev/sda6
      configfile /isoboot/<your_system_name>/grub.cfg
    }
    
  7. 运行update-grub命令。


这在每个ISO上都不同,grub配置文件的名称可能不同。
配置ISO grub.cfg文件,系统救援CD
使用您喜欢的文本编辑器打开文件并进行以下更改:
在文件的顶部添加以下行: ``` set isofile=/isoboot/systemrescuecd-6.0.3.iso loopback loop $isofile probe -u $root --set=rootuuid set imgdevpath="/dev/disk/by-uuid/$rootuuid" ```
在菜单项中加粗的文本如下: ``` menuentry "使用默认选项启动SystemRescueCd" { set gfxpayload=keep linux (loop)/sysresccd/boot/x86_64/vmlinuz archisobasedir=sysresccd archisolabel=SYSRCD603 img_loop=$isofile img_dev=$imgdevpath initrd (loop)/sysresccd/boot/intel_ucode.img (loop)/sysresccd/boot/amd_ucode.img (loop)/sysresccd/boot/x86_64/sysresccd.img }
menuentry "启动SystemRescueCd并将系统复制到内存" { set gfxpayload=keep linux (loop)/sysresccd/boot/x86_64/vmlinuz archisobasedir=sysresccd archisolabel=SYSRCD603 copytoram img_loop=$isofile img_dev=$imgdevpath initrd (loop)/sysresccd/boot/intel_ucode.img (loop)/sysresccd/boot/amd_ucode.img (loop)/sysresccd/boot/x86_64/sysresccd.img } ```

配置ISO grub.cfg文件,引导修复

使用您偏好的文本编辑器打开文件,并进行以下更改:

  1. 在文件的顶部添加以下行:

    set isofile=/isoboot/boot-repair/boot-repair-disk-64bit.iso
    loopback loop $isofile
    
  2. 在菜单项中加粗的文本:

    
    menuentry "Boot-Repair-Disk session" {
        set gfxpayload=keep
        linux   (loop)/casper/vmlinuz.efi file=/cdrom/preseed/lubuntu.seed boot=casper quiet splash iso-scan/filename=$isofile --
        initrd  (loop)/casper/initrd.lz
    }
    


配置ISO grub.cfg文件,带有持久化的Ubuntu

这里我们将使用ubuntu-16.04.6-desktop-i386.iso

警告:为了使持久化工作,文件系统类型必须是FAT

如何创建casper-rw文件

casper-rw文件复制到ISO旁边

用您喜欢的文本编辑器打开grub.cfg文件并进行以下更改:

在文件的顶部添加以下行: set iso_path=/isoboot/ubuntu/ubuntu-16.04.6-desktop-i386.iso loopback loop $iso_path
在菜单项中加粗的文本: menuentry "尝试不安装Ubuntu" { linux (loop)/casper/vmlinuz file=/cdrom/preseed/ubuntu.seed boot=casper iso-scan/filename=${iso_path} quiet splash persistent persistent-path=/isoboot/ubuntu --- initrd (loop)/casper/initrd } menuentry "安装Ubuntu" { linux (loop)/casper/vmlinuz file=/cdrom/preseed/ubuntu.seed boot=casper only-ubiquity iso-scan/filename=${iso_path} quiet splash --- initrd (loop)/casper/initrd } menuentry "检查光盘错误" { linux (loop)/casper/vmlinuz boot=casper integrity-check iso-scan/filename=${iso_path} quiet splash --- initrd (loop)/casper/initrd } menuentry "测试内存" { linux16 (loop)/install/mt86plus }
grub>终端访问系统
grub> configfile (hd0,6)/isoboot/<your system folder>/grub.cfg

是否可以将Boot-Repair或其他系统恢复工具添加到救援ISO中?以防万一在没有网络的情况下,仍然可以恢复系统。谢谢。 - Jags
@Jags 是的,几乎所有的Debian/Ubuntu系统都可以通过这种方式添加,其他系统可能会更复杂一些(我曾经成功引导Manjaro,但花了一些时间)。如果GRUB损坏了,就无法访问引导修复工具 :),不过如果有grub rescue shell可用,还是可以运行它的。 - schrodingerscatcuriosity
谢谢,那么请问我该如何将boot-repair或其他软件包添加到救援ISO中呢? - Jags
1每个ISO都有一点不同,告诉我你需要哪些其他的ISO(除了引导修复)我会把它们添加到答案中。 - schrodingerscatcuriosity
非常感谢。我正在考虑首先将(1)boot-repair 和(2)grub-customizer 添加到Ubuntu Mate 19.04 x64 ISO中,然后按照您详细描述的方式实施系统救援分区。 - Jags
我也可以将ntfs-3g添加到救援ISO中。 - Jags
ISO是实时系统,这意味着您所做的任何更改,比如安装软件包,在重新启动后都会被删除。您可以创建一个持久化系统,可以使用Ubuntu镜像来完成,但我不确定是否适用于System Rescue CD或类似工具。 - schrodingerscatcuriosity
@Jags 已添加启动修复功能。 - schrodingerscatcuriosity
已添加带有持久化功能的Ubuntu系统。 - schrodingerscatcuriosity
1将ISO复制到你的分区。 - itil memek cantik
1@itilmemekcantik 复制ISO,不要提取。如果您查看条目配置,它们会引用ISO _文件_,例如:set iso_path=/isoboot/ubuntu/ubuntu-16.04.6-desktop-i386.iso - schrodingerscatcuriosity