В grub 2.04 есть ошибка, поэтому убедитесь, что у вас установлена предыдущая или более поздняя версия.
Итак, основы для добавления файла 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
и выход на моей машине: /dev/sdb2
.
Однако grub использует hdX,Y
нотацию ( ), и именно здесь возникает разница между машинами с UEFI и BIOS! Так что теперь перезагрузите компьютер, перейдите в меню потайного и нажмите C: Это приведет вас к команде потайной строки с различными командами , чем вы привыкли , но только один , что вам нужно: 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
}