我有一堆实时 ISO 文件,例如分区,克隆Zilla,启动修复,Ubuntu 14.04 32 位,...下载于/opt
我的旧 BIOS 机器上后,我以前能够将它们添加到 grub 菜单并启动它们。:-)
我现在有一台 UEFI 机器,我能找到的所有信息都是针对 BIOS 机器的。
从 grub 启动这些 ISO 文件的步骤是什么?
我只是厌倦了一直将这些东西“刻录”到 USB 记忆棒上,因为我永远找不到我需要的记忆棒,而我的电脑本身在我周围的混乱中更难丢失...) :-(
答案1
有一个grub 2.04 中的错误因此请确保您拥有先前或更新的版本。
好吧,对于 UEFI 和 BIOS 机器来说,将 ISO 文件添加到 grub 的基本方法相同:编辑/etc/grub.d/40_custom
并menuentry
在文件底部添加一个项目(此示例中使用 GParted):
menuentry "GParted Live ISO" {
}
现在我们要添加一个变量,其中包含我们存储 ISO 的目录(到目前为止一切顺利:与 BIOS 机器没有区别):
menuentry "GParted Live ISO" {
set GPartedISOFile="/opt/Live-ISOs/gparted-live-0.31.0-1-amd64.iso"
}
我用/opt
它来存储这些,因为我不喜欢在我的机器根目录中创建目录,并且根据Linux 文件系统层次结构无论如何,可选软件应该驻留在那儿。
在添加loopback
变量之前,我们需要找出文件存储在哪个硬盘上,因此我们执行:,df --output=source /opt/Live-ISOs/gparted-live-0.31.0-1-amd64.iso | tail -1
我的机器上的输出是:/dev/sdb2
。
然而grub 使用 ( hdX,Y
) 符号和这这就是 UEFI 和 BIOS 机器之间的区别所在!现在重启你的机器,进入 grub 菜单并按C:这将带你进入 grub 命令提示符与你习惯的命令不同但您唯一需要的是:ls
。
在我的计算机上输出是:
(hd0) (hd1) (hd1,gpt3) (hd1,gpt2) (hd1,gpt1) (hd2) ... (hd3) ...
啊?4 个驱动器?我只有 3 个!而且它不是(hd1,4)
BIOS 上的线,而是(hd1,gpt3)
UEFI 上的线,而且(hd0)
根本没有分区!
嗯,显然,当部分 NVRAM 被用作存储并显示为(hd0)
您需要从 1 开始对驱动器进行编号! 而你在启动 ISO 文件时找到的所有信息都表明你必须从 0 开始编号(在 BIOS 机器上,这是永远正确,情况不一定如此在某些 UEFI 机器上! )
因此,的值loopback
就变成了(hd2,gpt2)$GPartedISOFile
我的计算机上的 ISO 文件/dev/sdb2
(第二个驱动器hd2
,第二个分区gpt2
):
menuentry "GParted Live ISO" {
set GPartedISOFile="/opt/Live-ISOs/gparted-live-0.31.0-1-amd64.iso"
loopback loop (hd2,gpt2)$GPartedISOFile
}
另一个区别是BIOS 机器上的linux
和initrd
被称为UEFI 机器上的linuxefi
和initrdefi
,这给了我们最终结果:
#!/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 "GParted Live ISO" {
set GPartedISOFile="/opt/Live-ISOs/gparted-live-0.31.0-1-amd64.iso"
loopback loop (hd2,gpt2)$GPartedISOFile
linuxefi (loop)/live/vmlinuz boot=live components config findiso=$GPartedISOFile ip=frommedia toram=filesystem.squashfs union=overlay username=user
initrdefi (loop)/live/initrd.img
}
现在保存该文件,并使用以下命令更新 grub:
update-grub
完成上述所有操作后,重新启动,进入 grub 菜单,选择GParted Live ISO
,现在您就可以轻松启动您的 ISO,而不必再寻找 USB 记忆棒!
:-)
CloneZilla Live 示例(用于这个问题)
menuentry "CloneZilla ISO" {
set ISOFile="/opt/Live-ISOs/clonezilla-live-20170905-zesty-amd64.iso"
loopback loop (hd2,gpt2)$ISOFile
linuxefi (loop)/live/vmlinuz boot=live components config findiso=$ISOFile ip=frommedia toram=filesystem.squashfs union=overlay
initrdefi (loop)/live/initrd.img
}
答案2
另一种方法是将配置文件添加到 40_custom,如下所示:
menuentry 'Live ISOs on SSD' {
configfile (hd0,3)/ISO/livecdimage.cfg
}
menuentry 'Live ISOs on HDD (boot on SSD)' {
configfile (hd1,3)/ISO/livecdimage.cfg
}
我这样做是因为当我更新 ISO 时,我总是忘记运行sudo update-grub
。上面的条目永远不需要更改,我只需编辑 livecdimage.cfg 即可,它的格式与任何 40_custom 相同,但没有标题行,并且位于我的 ISO 分区中的 /ISO 文件夹中。
我确实添加了 toram 作为另一个启动参数,并在使用 Nvidia 的系统上添加了 nomodeset 启动参数。但仍然经常需要卸载 /isodevice。
无法卸载 isodevice 卸载 ISO https://bugs.launchpad.net/ubuntu/+source/ubiquity/+bug/1155216
sudo umount -l -r -f /isodevice
这是我的 livecdimage.cfg 文件的一部分
# livecdimage.cfg
# Add this to 40_custom to load this file:
# menuentry 'Live ISOs' {
# configfile (hd1,3)/iso/livecdimage.cfg
#}
# Add iso names to livecdimage.cfg
#for i in `ls *.iso`;do echo "# "$i>>livecdimage.cfg; done;
menuentry "Ubuntu 16.04.4 xenial amd64" {
set isofile="/ISO/ubuntu-16.04.4-desktop-amd64.iso"
loopback loop (hd0,3)$isofile
linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isofile toram
initrd (loop)/casper/initrd.lz
}
menuentry "Ubuntu 18.04 Bionic amd64" {
set isofile="/ISO/bionic-desktop-amd64.iso"
loopback loop (hd0,3)$isofile
linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isofile toram
initrd (loop)/casper/initrd.lz
}
# spacer line
menuentry " " {
set root=
}
menuentry "Reboot" {
reboot
}
menuentry "Halt" {
halt
}
答案3
mkusb 多重引导破解
Mkusb 因其具有 BIOS 和 UEFI 功能而成为自定义启动驱动器项目的绝佳基础。
该黑客程序启动了多个 ISO 文件,包括 Windows 安装程序,并有一个 grub2 菜单。
大多数操作系统的 Grub2 菜单项都可以通过 Google 搜索找到,这超出了本答案的范围。
创建持久 USB 驱动器时使用 mkusb 默认值。
如果有疑问,请使用 mkusb 持久默认值,分区大小可以稍后调整,但需要时间。
安装后的 DUS 控制台。
分区修改之前,GParted。
修改后的 Gparted - 使用 FAT32 分区覆盖 sdb4(ISO9660 OS 分区)和 sdb5(ext2 casper-rw 分区)以保存持久文件。
持久性分区 - 为每个操作系统创建一个唯一名称的文件夹(需要持久性)
持久性文件夹 - 向每个持久性文件夹添加一个 casper-rw 文件和可选的 home-rw 文件。可以通过重命名 casper-rw 文件来创建 home-rw 文件。home-rw 文件就像完整安装上的单独主分区,可以在版本升级后重复使用。
在 NTFS usbdata 分区上为 ISO 文件创建一个文件夹。
将一些 ISO 添加至 ISO 文件夹。
grub.cfg 位置
编辑 grub.cfg 以循环挂载 ISO 文件。persistent persistent-path=/<persistent-folder-name>/
如果您想要持久性,请包括:。将 rmmod tpm 添加到 grub.cfg 的第一个菜单项上方。
编辑 18.04+在 grub 中指定维姆林兹不是 vmlinuz.efi 和初始化文件没有 initrd 没有 initid.lz
sudo parted-ls /dev/sdb
sudo lsblk -f /dev/sdb
如果需要 Windows 安装程序,最简单的方法可能是使用 mkusb 的“提取 Windows 安装程序”功能(我必须手动将 Windows ISO 提取到 TAR),
安装后,为 ISO 创建一个文件夹,如果需要,还为持久性创建一个文件夹(类似于上述过程)。
编辑 /boot/grub/grub.cfg 以循环挂载任何 ISO 并指定任何持久文件夹。
(还没有找到循环安装 Windows ISO 文件的方法)。
如果将上述设备用作 USB 记忆棒,则可用于启动存储在 Windows 计算机上的 ISO。内部驱动器上不需要 Grub。