Jak uruchomić plik ISO z dysku za pomocą grub2 na maszynach UEFI?


12

Mam kilka żywych plików ISO, takich jak GParted , CloneZilla , Boot-Repair , Ubuntu 14.04 32 bit , ... pobranych /optna moją starą maszynę BIOS, mogłem po prostu dodać je do menu gruba i uruchomić . :-)

Mam teraz maszynę UEFI i wszystkie informacje, które mogę znaleźć, dotyczą maszyn z systemem BIOS.

Jakie są kroki, aby uruchomić te pliki ISO z gruba?

Po prostu mam dość ciągłego „wypalania” ich na pendrivie, ponieważ nigdy nie mogę znaleźć pendrive'a, którego potrzebuję, podczas gdy sam komputer jest o wiele trudniejszy do stracenia w całym chaosie wokół mnie… ) :-(


1
Przeszedłem tę drogę jakiś czas temu i jest niesamowity.
Marmur Organiczny

1
Lubię używać osobnej partycji, po jednej na każdym dysku, aby ułatwić instalację na innym dysku lub pełną instalację na dyskach flash. help.ubuntu.com/community/Grub2/ISOBoot Przykłady: help.ubuntu.com/community/Grub2/ISOBoot/Examples Uważam, że uzyskanie prawidłowej ścieżki przed zamontowaniem partycji i uzyskanie szczegółowych parametrów rozruchu jako dwóch głównych problemów z uzyskaniem to działa. Ścieżka może się nawet zmienić, jeśli pamięć flash jest podłączona. Spojrzenie na ISO, aby zobaczyć jego sekcję rozruchową i ścieżkę, może pomóc ci dowiedzieć się szczegółów.
oldfred

1
Często używałem tej metody „grub-n-iso” i działa ona dobrze :-), ale teraz testuję pliki ISO na osobnym komputerze do testowania i klonuję z plików ISO na szybkie pendrivy USB3 lub tworzę trwały live Pendrive USB z mkusb . (Przechowuję pendrivy USB w małym plastikowym pudełku.)
Sudodus,

VBox uruchamia pliki ISO OK, po wyjściu użyj opcji Zapisz stan komputera, MultiBootUSB ma opcję przeciągania i upuszczania rozruchu ISO, a QEMU z menedżerem Virtual Machine szybko uruchomi ISO.
CSCameron

1
Na razie używaj tylko grub2 2.02 do montowania w pętli ISO. Grub2 2.04 podaje błąd braku pamięci. bugs.launchpad.net/ubuntu/+source/grub2/+bug/1851311 Ubuntu 18.04 nadal ma grub 2.02.
oldfred

Odpowiedzi:


14

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_customi dodaj menuentryelement (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 /optdo 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 loopbackzmienną, 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 -1a 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ść loopbackstaje się (hd2,gpt2)$GPartedISOFilejak 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 linuxi initrdna komputerach BIOS są nazywane linuxefii linuxefina 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 ISOi 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
}

Czy skonfigurowałeś już Clonezillę? Jest trochę inaczej, mogę to opublikować, jeśli jeszcze tego nie wymyśliłeś.
Marmur Organiczny

1
Zamierzam opublikować kolejną odpowiedź dla wszystkich, którzy dodam jutro dla osób, które dodają „daj mi kodezę” ... @OrganicMarble
Fabby

+1, ale prawdopodobnie bezpiecznie jest upuścić 2z update-grub2tych dni.
WinEunuuchs2Unix

@ WinEunuuchs2Unix To jest w mojej historii ... Po prostu wpisuję, upd↑a następnie kopiuję-wklejam . Dziękujemy za przypomnienie Zaktualizowano!
Fabby

6

Alternatywą jest dodanie pliku konfiguracyjnego do 40_custom w następujący sposób:

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
} 

Robię to tak, jak kiedy aktualizuję ISO, zawsze zapominam o uruchomieniu sudo update-grub. Powyższe wpisy nigdy nie muszą się zmieniać i mogę po prostu edytować plik livecdimage.cfg, który ma taki sam format jak każdy niestandardowy 40_, ale bez linii nagłówka i znajduje się w folderze mój / ISO na mojej partycji ISO.

Dodam toram jako kolejny parametr rozruchowy, a w systemie z Nvidią dodaję parametr rozruchowy nomodeset. Ale wciąż często trzeba odmontowywać / isodevice.

Nie można umountować isodevice odmontować ISO https://bugs.launchpad.net/ubuntu/+source/ubiquity/+bug/1155216

sudo umount -l -r -f /isodevice

I to jest część mojego pliku 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
}

Lubię Reboot i zatrzymaj! :-) +1 Dlaczego dodajesz insmod? Możesz także
pingować

inmod prawdopodobnie nie jest potrzebny. W Grub2 niektóre funkcje zostały wbudowane, a niektóre zostały dodane (insmod). Prawdopodobnie na początku potrzebowałem insmod gpt, kiedy zacząłem używać gpt w 2010 roku lub zanim komputer był UEFI, a grub2 był nowy i tylko dla BIOS / MBR, chociaż uruchamiałby się z gpt z BIOS-em.
oldfred

Dziękuję za Twoją odpowiedź. Czy nie lepiej byłoby zatem usunąć te linie z odpowiedzi?
Fabby,

1
Pozwól mi edytować własną zwrotkę i zobacz, czy buty 18.04. Oczekuję, że tak będzie. Chciałem również zaktualizować mój wpis rozruchowy ISO z dwoma partiami, który jest teraz bardzo stary, więc wrócę za chwilę.
oldfred 17.04.18

1
Uruchomiono dobrze. Zapomniałem, że mam podłączony napęd flash 18.04 i staje się on hd0 w moim systemie, więc podczas uruchamiania muszę ręcznie edytować wpis jednego HDX, aby mieć poprawny napęd. Mój partycjonowany rozruch .25 nie działał, zmieniając tylko na .30. Musiałem spojrzeć na ISO i zobaczyć jego grub.cfg i użyć tych parametrów i poleceń pętli gruba, a potem zadziałało.
oldfred 17.04.18

5

mkusb MULTIBOOT HACK

Mkusb stanowi doskonałą bazę dla projektów niestandardowych dysków rozruchowych ze względu na jego możliwości zarówno w systemie BIOS, jak i UEFI.

Ten hack uruchamia wiele plików ISO, w tym instalatora Windows, i ma menu Grub2.

Grube menu dla większości systemów operacyjnych są dostępne za pomocą wyszukiwarki Google i wykraczają poza zakres tej odpowiedzi.

Domyślnie mkusb

Użyj domyślnych ustawień mkusb podczas tworzenia trwałego napędu USB.

mkusb ponownie używa wartości domyślnych

W razie wątpliwości użyj domyślnych parametrów trwałości mkusb, rozmiar partycji można dostosować później, ale zajmuje to trochę czasu.

Konsola DUS

Konsola DUS po instalacji.

GParted Before

GParted przed modyfikacją partycji.

Podzieliłem się po

Gparted po modyfikacji - Zastąp sdb4, partycję OS ISO9660 i sdb5, partycję ext2 casper-rw, partycją FAT32 dla plików trwałości.

Partycja trwałości

Partycja trwałości - Utwórz unikatowy folder nazw dla każdego systemu operacyjnego (który wymaga trwałości)

Folder trwałości

Folder trwałości - Dodaj plik casper-rw i opcjonalny plik home-rw do każdego folderu trwałości. Plik home-rw można utworzyć, zmieniając nazwę pliku casper-rw. Plik home-rw przypomina oddzielną partycję domową podczas pełnej instalacji, może być ponownie użyty po aktualizacji wersji.

Folder ISO

Utwórz folder dla plików ISO na partycji usbdata NTFS.

Zawartość folderu ISO

Dodaj trochę ISO do folderu ISO.

Lokalizacja GRUB

lokalizacja grub.cfg

grub.cfg

Edytuj grub.cfg, aby zamontować w pętli pliki ISO. Uwzględnij: persistent persistent-path=/<persistent-folder-name>/jeśli chcesz wytrwałości.

EDYTUJ 18.04+ W Grub podaj vmlinuz nie vmlinuz.efi i initrd not initrd not initid.lz

sudo parted -ls / dev / sdb

sudo parted -ls / dev / sdb

sudo lsblk -f / dev / sdb

sudo lsblk -f / dev / sdb

Jeśli wymagany jest instalator Windows, najłatwiej jest zacząć od funkcji „wyodrębniania instalatora Windows” mkusb (musiałem ręcznie wyodrębnić ISO systemu Windows do TAR),

Instalator Windows mkusb

Po instalacji utwórz folder dla ISO i, jeśli to konieczne, foldery dla trwałości (podobnie jak w powyższej procedurze).

mkusb Windows grub

Edytuj /boot/grub/grub.cfg, aby zamontować w pętli dowolne ISO i określić dowolne foldery trwałości.

(nie znalazłem sposobu na zamontowanie w pętli pliku ISO systemu Windows).

Jeśli powyższe dane są używane jako pamięć USB, można ich użyć do uruchomienia ISO zapisanych na komputerze z systemem Windows. Grub nie jest wymagany na dysku wewnętrznym.


A jak je odzyskać na HDD / SDD? Pytanie dotyczy tego, czy chcesz je teraz na pamięci USB, czy coś przeoczyłem?
Fabby

1
@ Fabby, dotyczy to nie tylko pamięci USB. Jeśli masz nowy dysk SATA, możesz uruchomić zgodnie z opisem w tej odpowiedzi i pozwolić mkusbowi zainstalować solidny system rozruchowy, który działa zarówno w trybie UEFI, jak i BIOS. Ten dysk SATA można zainstalować wewnętrznie lub podłączyć zewnętrznie przez USB lub eSATA. Możliwe jest dodanie zarówno „konwencjonalnie zainstalowanych systemów”, jak i nowych plików ISO, które zostaną uruchomione za pomocą „grub-n-iso”.
sudodus

OK, wciąż tego nie rozumiem: chcę te ISO /opt/. Jak mogę to zrobić? (W międzyczasie +1 za wysiłek ...)
Fabby

1
@Fabby: Myślę, że zamiast tworzyć nowy folder dla ISO, jak pokazano powyżej, wskaż lokalizację ISO w / opt /, w grub.cfg, grub na pendrive może uruchomić ISO na dysku twardym. Spróbuję tego.
CSCameron

@Fabby: Jeśli ISO są włączone / opt / na dysku wewnętrznym, ta sama pozycja menu, której używasz na dysku wewnętrznym, będzie działać na dysku zewnętrznym. Uruchamianie GRUB-a na pendrivie może mieć zalety, takie jak brak nadmiernego stłoczenia lub uszkodzenia wewnętrznego menu GRUB-a.
CSCameron

3

Trzy proste kroki

aby dodać ISO do menu GRUB i uruchomić z niego.

Najpierw zainstaluj grml-rescueboot

Otwórz terminal i wprowadź:

sudo apt install grml-rescueboot

Po drugie, przenieś pliki ISO do /boot/grml/

W tym samym terminalu wpisz:

sudo mv ~/Downloads/<filename.iso> /boot/grml/

Po trzecie, zaktualizuj grub

W tym samym terminalu wpisz:

sudo update-grub

Powtórz drugi i trzeci krok w razie potrzeby

Nie zapomnij usunąć przestarzałych plików ISO /boot/grml.

Odniesienie: Pomoc Ubuntu na temat rozruchu Grub2 ISO

Mam nadzieję że to pomoże


/bootjest najgorszym miejscem do ich umieszczenia. Przepraszam, zajrzałem do grml, powinienem o tym wspomnieć. +1 za wysiłek
Fabby

Dzięki @Fabby za +1! To może nie być najlepszy sposób, ale wydaje się to najłatwiejsze, IMHO.
user68186,

1
Dlatego +1: dobra odpowiedź dla użytkowników nietechnicznych.
Fabby

2

MultiBootUSB - QEMU

Jeśli chcesz uruchomić pliki ISO z najmniejszym wysiłkiem i nie potrzebujesz trwałości, MultiBootUSB zawiera opcję QEMU:

  • Uruchom MultiBootUSB i wybierz kartę Boot ISO / USB.

  • Przeciągnij i upuść ISO w obszarze Wybierz obraz.

  • Wybierz rozmiar pamięci RAM i naciśnij przycisk Boot ISO.

Nie musisz edytować grub.cfg ani nawet się wylogowywać.

MultiBootUSB-QEMU


Sprytne! Spróbuję to później!
Fabby

@Fabby: Istnieje wersja MBUSB dla systemu Windows i wersja dla systemu Linux. Nie mogłem uzyskać wersji systemu Windows do rozruchu ISO, tylko USB. Wersja Linux 9.2.0 działa dla mnie świetnie.
CSCameron

2

SIMPLE mkusb ISO multibooter

Jeśli nie potrzebujesz wielu trwałości, łatwo jest uruchomić system operacyjny z wieloma systemami operacyjnymi na dysku flash mkusb.

Użyj mkusb, aby zrobić Trwały dysk USB przy użyciu domyślnego systemu operacyjnego wybranego przez ciebie, https://help.ubuntu.com/community/mkusb

Utwórz folder na partycji usbdata sdx1 o nazwie ISO.

Dodaj ISO do uruchomienia w tym folderze.

Dodaj menuentral do /sdx3/boot/grub/grub.cfg, aby zamontować pętlę ISO.

Próbki:

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
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.