如何在UEFI计算机上使用grub2从我的驱动器启动ISO文件?
我有一堆现场ISO文件,如GParted , CloneZilla , Boot-Repair , Ubuntu 14.04 32位 ,…在/opt
和我的旧BIOS机器上下载,我以前只能将它们添加到grub菜单中启动它们。 🙂
我现在有一台UEFI机器,我能找到的所有信息都是用于BIOS机器的。
从grub引导这些ISO文件的步骤是什么?
我只是厌倦了把这些“燃烧”到USB记忆棒,因为我永远找不到我需要的棍子,而我的电脑本身如果在我周围的总混乱中更难以松动…… ) 🙁
那么,将一个ISO文件添加到grub的基础知识对于UEFI和BIOS机器是相同的:编辑/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
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,gpt4) (hd1,gpt3) (hd1,gpt2) (hd1,gpt1) (hd2) ... (hd3) ...
咦? 4个驱动器? 我只有3个! 并且它不是BIOS上的(hd1,4)
行,而是UEFI中的(hd1,gpt4)
和(hd0)
根本没有分区!
好吧,显然当NVRAM的一部分用作存储并显示为(hd0)
您需要开始将驱动器编号为1! 虽然您在启动ISO文件时找到的所有信息都表明您必须从0开始编号(在BIOS计算机上这始终是正确的 ,但在某些UEFI计算机上并不一定如此!)
因此,我的机器上的ISO文件是/dev/sdb2
(第二个驱动器hd2
,第二个分区gpt2
), loopback
的值变为(hd2,gpt2)$GPartedISOFile
:
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
和linuxefi
,这给了我们最终的结果:
#!/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记忆棒!
🙂
另一种方法是将配置文件添加到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 add nomodeset启动参数。 但仍然经常需要卸载/ isodevice。
无法卸载isodevice unmount 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 }
三个简单的步骤
将ISO添加到grub菜单并从中启动。
首先,安装grml-rescueboot
打开终端并输入:
sudo apt install grml-rescueboot
其次,将iso文件移动到/boot/grml/
在同一个终端输入:
sudo mv ~/Downloads/ /boot/grml/
第三,更新grub
在同一个终端输入:
sudo update-grub
必要时重复第二步和第三步
不要忘记从/boot/grml
删除过时的ISO文件。
参考: Ubuntu帮助Grub2 ISO启动
希望这可以帮助
mkusb MULTIBOOT HACK
Mkusb为自定义启动驱动项目提供了很好的基础,因为它具有BIOS和UEFI的function。
这个hack引导多个ISO文件,包括Windows安装程序,并有一个grub2菜单。
大多数操作系统的Grub2菜单条目都可以通过Google搜索获得,超出了本答案的范围。
创建永久USB驱动器时使用mkusb默认值。
如果有疑问,请使用mkusb持久性默认值,以后可以调整分区大小但需要时间。
安装后的DUS控制台。
在分区修改之前进行GParted。
修改后的Gparted – 覆盖sdb4,ISO9660操作系统分区和sdb5,ext2 casper-rw分区,带有FAT32分区,用于持久性文件。
持久性分区 – 为每个操作系统创建唯一的名称文件夹(需要持久性)
持久性文件夹 – 将casper-rw文件和可选的home-rw文件添加到每个持久性文件夹。 可以通过重命名casper-rw文件来制作home-rw文件。 home-rw文件就像完全安装时的单独主分区,它可以在版本升级后重用。
在NTFS usbdata分区上为ISO文件创建一个文件夹。
将一些ISO添加到ISO文件夹。
grub.cfg位置
编辑grub.cfg以循环安装ISO文件。 包括: persistent persistent-path=/
如果你想要持久化。
sudo parted -ls / dev / sdb
sudo lsblk -f / dev / sdb
如果需要Windows安装程序,最简单的方法是使用mkusb“解压缩Windows安装程序”function,(我必须手动将Windows ISO解压缩到TAR),
安装后为ISO创建一个文件夹,如果需要,为持久性创建文件夹(类似于上述过程)。
编辑/boot/grub/grub.cfg以循环挂载任何ISO并指定任何持久性文件夹。
(还没有找到一种循环安装Windows ISO文件的方法)。
如果将上述内容用作USB记忆棒,则可用于启动存储在仅限Windows的计算机上的ISO。 内部驱动器不需要Grub。
MultiBootUSB – QEMU
如果您想以最少的麻烦启动ISO文件并且不需要持久性,MultiBootUSB包含一个QEMU选项:
-
启动MultiBootUSB并选择Boot ISO / USB选项卡。
-
在选择图像空间上拖放ISO。
-
选择RAM大小并点击Boot ISO按钮。
您无需编辑grub.cfg甚至注销。
SIMPLE mkusb ISO多引导程序
如果您不需要多持久性,则很容易在mkusb闪存驱动器上多引导操作系统ISO。
使用mkusb使用您选择的默认操作系统制作永久USB驱动器, https: //help.ubuntu.com/community/mkusb
在usbdata分区sdx1中创建一个名为ISO的文件夹。
将要引导的ISO添加到此文件夹。
将菜单条目添加到/sdx3/boot/grub/grub.cfg以循环安装ISO。
样品:
menuentry "Ubuntu-18.04 64-bit ISO" { set root=(hd0,1) set isofile="/ISOs/ubuntu-18.04-desktop-amd64.iso" loopback loop $isofile linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile splash -- initrd (loop)/casper/initrd.lz } menuentry "GParted 64-bit ISO" { set root=(hd0,1) set isofile="/ISOs/gparted-live-0.31.0-1-amd64.iso" loopback loop $isofile linux (loop)/live/vmlinuz boot=live union=overlay username=user config components noswap noeject toram=filesystem.squashfs ip='' nosplash findiso=$isofile splash -- initrd (loop)/live/initrd.img } menuentry "Clonezilla 64-bit ISO" { set root=(hd0,1) set isofile="/ISOs/clonezilla-live-2.5.5-38-amd64.iso" loopback loop $isofile linux (loop)/live/vmlinuz boot=live live-config nolocales edd=on nomodeset ocs_live_run=\"ocs-live-general\" ocs_live_extra_param=\"\" ocs_live_keymap=\"\" ocs_live_batch=\"no\" ocs_lang=\"\" vga=788 ip=frommedia nosplash toram=filesystem.squashfs findiso=$isofile splash -- initrd (loop)/live/initrd.img }