W Grub 2.04 występuje błąd, więc upewnij się, że masz wcześniejszą lub późniejszą wersję.
Cóż, podstawy dodawania pliku ISO do GRUB-a są takie same dla UEFI jak dla systemu BIOS: edytuj /etc/grub.d/40_custom
i dodaj menuentry
element (w tym przykładzie użyto GParted) na dole pliku:
menuentry "GParted Live ISO" {
}
Teraz dodamy zmienną zawierającą katalog, w którym przechowywaliśmy ISO (do tej pory tak dobrze: żadnych różnic z komputerami BIOS):
menuentry "GParted Live ISO" {
set GPartedISOFile="/opt/Live-ISOs/gparted-live-0.31.0-1-amd64.iso"
}
Używam ich /opt
do przechowywania, ponieważ nie lubię tworzyć katalogów w katalogu głównym mojego komputera i zgodnie z hierarchią systemu plików Linux , gdzie i tak powinno znajdować się opcjonalne oprogramowanie.
Zanim dodamy loopback
zmienną, musimy dowiedzieć się, na którym dysk twardy jest przechowywany plik, więc robimy: df --output=source /opt/Live-ISOs/gparted-live-0.31.0-1-amd64.iso | tail -1
a wyjście na moim komputerze jest: /dev/sdb2
.
Jednak GRUB używa ( hdX,Y
) notacji i to jest, gdy różnica między UEFI BIOS i maszyn przychodzi! Więc teraz ponownie uruchomić maszynę, przejdź do menu grub i naciśnij przycisk C: Spowoduje to przejście do wiersza polecenia grub z różnych komend niż masz w zwyczaju , ale tylko jedno, że trzeba to: ls
.
Na mojej maszynie dane wyjściowe to:
(hd0) (hd1) (hd1,gpt3) (hd1,gpt2) (hd1,gpt1) (hd2) ... (hd3) ...
Co? 4 dyski? Mam tylko 3! I to nie jest (hd1,4)
linia w BIOSie, ale (hd1,gpt3)
w UEFI i (hd0)
nie ma żadnych partycji!
Cóż, najwyraźniej gdy część pamięci NVRAM jest używana jako pamięć i pojawia się, gdy (hd0)
trzeba zacząć numerowanie dysków od 1! Podczas gdy wszystkie informacje, które znajdziesz podczas uruchamiania plików ISO, mówią, że musisz zacząć numerowanie od 0 (na komputerach z BIOSem jest to zawsze prawda , niekoniecznie tak jest w przypadku niektórych maszyn z UEFI !)
Tak więc wartość loopback
staje się (hd2,gpt2)$GPartedISOFile
jak plik ISO na moim komputerze /dev/sdb2
(drugi dysk hd2
, druga partycja gpt2
):
menuentry "GParted Live ISO" {
set GPartedISOFile="/opt/Live-ISOs/gparted-live-0.31.0-1-amd64.iso"
loopback loop (hd2,gpt2)$GPartedISOFile
}
Inną różnicą jest to, że linux
i initrd
na komputerach BIOS są nazywane linuxefi
i linuxefi
na maszynach UEFI, co daje nam nasz ostateczny wynik:
#!/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
}
Więc teraz zapisz ten plik i zaktualizuj grub za pomocą:
update-grub
Po wykonaniu powyższych czynności uruchom ponownie komputer, przejdź do menu GRUB , wybierz GParted Live ISO
i możesz łatwo uruchomić ISO bez konieczności ponownego szukania pamięci USB!
:-)
Przykład CloneZilla Live (na to pytanie )
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
}