В 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
}