好了,向UEFI和向BIOS计算机/etc/grub.d/40_custom
添加grub的ISO文件的基本原理相同:编辑并向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
变量之前,我们需要确定文件存储在哪个硬盘上,因此我们执行a:,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
}
另一个区别是,linux
和initrd
上BIOS的机器被称为linuxefi
和linuxefi
UEFI的机器,这为我们提供了我们最终的结果:
#!/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
}