Come posso avviare un file ISO dal mio disco usando grub2 su macchine UEFI?


12

Ho un sacco di file ISO live come GParted , CloneZilla , Boot-Repair , Ubuntu 14.04 32 bit , ... scaricati in /opte sulla mia vecchia macchina BIOS, ero in grado di aggiungerli al menu Grub e avviarli . :-)

Ora ho una macchina UEFI e tutte le informazioni che posso trovare sono per le macchine BIOS.

Quali sono i passaggi per avviare questi file ISO da grub?

Sono solo stufo di "bruciarli" sempre su una chiavetta USB dato che non riesco mai a trovare la chiavetta di cui ho bisogno mentre il mio computer stesso se molto più difficile da perdere nel caos totale intorno a me qui ... ) :-(


1
Sono andato in questo modo qualche tempo fa ed è fantastico.
Marmo organico

1
Mi piace usare una partizione separata, una su ogni unità per semplificare l'installazione su un'altra unità o l'installazione completa dell'unità su unità flash. help.ubuntu.com/community/Grub2/ISOBoot Esempi: help.ubuntu.com/community/Grub2/ISOBoot/Examples Trovo che ottenere il percorso corretto com'è prima che vengano montate le partizioni e ottenere parametri di avvio dettagliati come i due principali problemi su come ottenere per funzionare. Anche il percorso può cambiare se l'unità flash è collegata. E guardare in ISO per vedere la sua stanza di avvio e il percorso può aiutarti a capire i dettagli.
oldfred

1
Ho usato questo metodo 'grub-n-iso' molto prima, e funziona bene :-) ma ora collaudo i file iso in un computer separato per i test e clono dai file iso per velocizzare pendrive USB3 o creare live persistenti Pendrive USB con mkusb . (
Conservo i

VBox esegue i file ISO OK, usa salva stato macchina all'uscita, MultiBootUSB ha un'opzione per il trascinamento della selezione ISO e QEMU con Virtual Machine Manager eseguirà rapidamente un iso.
CSCameron,

1
Per il momento usa solo grub2 2.02 per eseguire il loop loop ISO. Grub2 2.04 dà un errore di memoria esaurita. bugs.launchpad.net/ubuntu/+source/grub2/+bug/1851311 Ubuntu 18.04 ha ancora grub 2.02.
oldfred

Risposte:


14

C'è un bug in grub 2.04 quindi assicurati di avere una versione precedente o successiva.

Bene, le basi per aggiungere un file ISO a grub sono le stesse per una UEFI come per una macchina BIOS: modifica /etc/grub.d/40_custome aggiungi un menuentryelemento (GParted è usato in questo esempio) nella parte inferiore del file:

menuentry "GParted Live ISO" {
}

Ora aggiungeremo una variabile contenente la directory in cui abbiamo archiviato gli ISO (finora, tutto bene: nessuna differenza con le macchine BIOS):

menuentry "GParted Live ISO" {
  set GPartedISOFile="/opt/Live-ISOs/gparted-live-0.31.0-1-amd64.iso"
}

Sto usando /optper archiviarli perché non mi piace creare directory nella radice della mia macchina e secondo la Gerarchia del file system Linux è lì che dovrebbe risiedere comunque il software opzionale.

Prima di aggiungere la loopbackvariabile, abbiamo bisogno di sapere su quale disco fisso il file viene memorizzato, quindi facciamo un: df --output=source /opt/Live-ISOs/gparted-live-0.31.0-1-amd64.iso | tail -1e l'uscita sulla mia macchina è: /dev/sdb2.

Tuttavia grub usi ( hdX,Y) notazione e questo è dove la differenza tra le macchine UEFI BIOS e viene in! Così ora riavviare la macchina, andare nel menu di GRUB e premere C: Questo vi porterà al comando grub richiesta con diversi comandi di quanto siete abituati a , ma l'unico che ti serve è: ls.

Sulla mia macchina l'output è:

(hd0) (hd1) (hd1,gpt3) (hd1,gpt2) (hd1,gpt1) (hd2) ... (hd3) ...

Eh? 4 unità? Ne ho solo 3! E non è una (hd1,4)linea su un BIOS ma (hd1,gpt3)in UEFI e (hd0)non ha affatto partizioni!

Bene, apparentemente quando parte della NVRAM viene utilizzata come memoria e si presenta come (hd0) è necessario iniziare a numerare le unità da 1!   Considerando che tutte le informazioni che trovi sull'avvio dei file ISO indicano che devi iniziare la numerazione da 0 (sui computer BIOS questo è sempre vero , questo non è necessariamente il caso su alcuni computer UEFI !)

Quindi il valore per loopbackdiventa (hd2,gpt2)$GPartedISOFilecome il file ISO sulla mia macchina era /dev/sdb2(seconda unità hd2, seconda partizione gpt2):

menuentry "GParted Live ISO" {
  set GPartedISOFile="/opt/Live-ISOs/gparted-live-0.31.0-1-amd64.iso"
  loopback loop (hd2,gpt2)$GPartedISOFile
}

Un'altra differenza è che l' linuxe initrdsulle macchine del BIOS sono chiamati linuxefie linuxefisu macchine UEFI, che ci dà il nostro risultato finale:

#!/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
}

Quindi ora salva quel file e aggiorna grub con:

update-grub

Dopo tutto quanto sopra, riavvia, vai nel menu di grub , scegli GParted Live ISOe ora puoi facilmente avviare il tuo ISO senza dover mai più cercare una chiavetta USB!

:-)

Esempio di CloneZilla Live (per questa domanda )

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
}

Hai già installato Clonezilla? È un po 'diverso, posso postarlo se non l'hai ancora capito.
Marmo organico

1
Pubblicherò un'altra risposta per tutte quelle che aggiungerò domani per il tipo di persone "dammi il codez" ... @OrganicMarble
Fabby

+1, ma probabilmente è sicuro lasciar perdere 2da update-grub2questi giorni.
WinEunuuchs2Unix

@ WinEunuuchs2Unix È nella mia storia ... Scrivo upd↑e poi copia-incolla. Grazie per il promemoria Aggiornato!
Fabby

6

Un'alternativa è semplicemente aggiungere un file di configurazione a 40_custom in questo modo:

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
} 

Lo faccio come quando aggiorno un ISO, invariabilmente mi dimentico di correre sudo update-grub. Le voci precedenti non devono mai cambiare e posso solo modificare livecdimage.cfg che ha lo stesso formato di qualsiasi 40_custom ma senza righe di intestazione, ed è nella mia cartella / ISO nella mia partizione ISO.

Aggiungo toram come un altro parametro di avvio e sul sistema con Nvidia aggiungo il parametro di avvio nomodeset. Ma spesso è necessario smontare il / isodevice.

Impossibile smontare isodevice smontare ISO https://bugs.launchpad.net/ubuntu/+source/ubiquity/+bug/1155216

sudo umount -l -r -f /isodevice

E questo fa parte del mio file 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
}

Mi piace il riavvio e fermare quelli! :-) +1 Perché aggiungi il insmod? Puoi anche chiamarmi in chat
Fabby,

Inmod probabilmente non è necessario. Con grub2 sono state integrate alcune funzionalità e alcune sono state aggiunte (l'insmod). Probabilmente all'inizio avevo bisogno di insmod gpt poiché ho iniziato a usare gpt nel 2010 o prima che il pc fosse UEFI e grub2 era nuovo e solo per BIOS / MBR anche se si sarebbe avviato da gpt con BIOS.
oldfred

Grazie per la risposta. Non sarebbe meglio rimuovere quelle righe dalla risposta allora?
Fabby,

1
Vorrei modificare la mia stanza e vedere se 18.04 si avvia. Mi aspetto che lo faccia. Volevo anche aggiornare la mia voce di avvio ISO gparted che ora è molto vecchia, quindi torneremo tra un po '.
oldfred

1
Avviato ok. Ho dimenticato di aver collegato il mio flash drive 18.04 e diventa hd0 sul mio sistema, quindi all'avvio devo modificare manualmente l'ingresso su un hdX per avere il drive corretto. Il mio avvio .25 partizionato non funzionava semplicemente cambiando in .30. Ho dovuto esaminare ISO e vedere il suo grub.cfg e usare quei parametri e i comandi del ciclo di grub, e poi ha funzionato.
oldfred

5

mkusb MULTIBOOT HACK

Mkusb è un'ottima base per progetti di unità di avvio personalizzate grazie alle sue capacità con BIOS e UEFI.

Questo hack avvia più file ISO incluso Windows Installer e ha un menu grub2.

I menu di Grub2 per la maggior parte dei sistemi operativi sono disponibili utilizzando Ricerca Google e non rientrano nell'ambito di questa risposta.

valori predefiniti di mkusb

Utilizzare i valori predefiniti di mkusb durante la creazione dell'unità USB persistente.

mkusb usa di nuovo le impostazioni predefinite

Utilizzare i valori predefiniti di persistenza mkusb in caso di dubbio, la dimensione della partizione può essere regolata in un secondo momento ma richiede tempo.

Console DUS

La console DUS dopo l'installazione.

GParted Prima

GParted prima della modifica della partizione.

Dopo aver partecipato

Dopo la modifica - Sovrascrivi sdb4, la partizione del sistema operativo ISO9660 e sdb5, la partizione ext2 casper-rw, con una partizione FAT32 per i file di persistenza.

Partizione di persistenza

Partizione di persistenza: crea una cartella con nome univoco per ciascun sistema operativo (che richiede persistenza)

Cartella di persistenza

Cartella di persistenza - Aggiungi un file casper-rw e un file home-rw opzionale a ciascuna cartella di persistenza. Un file home-rw può essere creato rinominando un file casper-rw. Un file home-rw è come una partizione home separata su un'installazione completa, può essere riutilizzato dopo gli aggiornamenti di versione.

Cartella ISO

Creare una cartella per i file ISO sulla partizione usbdata NTFS.

Contenuto della cartella ISO

Aggiungi alcuni ISO alla cartella ISO.

Posizione di GRUB

posizione grub.cfg

grub.cfg

Modifica grub.cfg per montare in loop i file ISO. Includere:persistent persistent-path=/<persistent-folder-name>/ se vuoi la persistenza.

EDIT 18.04+ In grub specificare vmlinuz non vmlinuz.efi e initrd non initrd non initid.lz

sudo parted -ls / dev / sdb

sudo parted -ls / dev / sdb

sudo lsblk -f / dev / sdb

sudo lsblk -f / dev / sdb

Se è richiesto un programma di installazione di Windows, è probabilmente più semplice iniziare con la funzione "estrarre Windows installer" di mkusb, (ho dovuto estrarre manualmente l'ISO di Windows in TAR),

mkusb Windows Installer

Dopo l'installazione, creare una cartella per ISO e, se necessario, cartelle per la persistenza (simile alla procedura precedente).

mkusb Windows grub

Modifica /boot/grub/grub.cfg per montare in loop qualsiasi ISO e specificare eventuali cartelle di persistenza.

(non ha trovato il modo di montare in loop un file ISO di Windows).

Se quanto sopra viene utilizzato come chiavetta USB, può essere utilizzato per avviare ISO memorizzati su un computer solo Windows. Grub non è richiesto sull'unità interna.


E come si ottengono questi su HDD / SDD ??? La domanda è ora di volerli su una chiavetta USB o mi sono perso qualcosa?
Fabby,

1
@Fabby, questo non è solo per le chiavette USB. Se hai una nuova unità SATA, puoi iniziare come descritto in questa risposta e lasciare che mkusb installi il suo robusto sistema di avvio, che funziona sia in modalità UEFI che BIOS. Questa unità SATA può essere installata internamente o collegata esternamente tramite USB o eSATA. È possibile aggiungere sia "sistemi installati in modo convenzionale" sia nuovi file iso da avviare tramite "grub-n-iso".
sudodus,

OK, ancora non capisco: voglio che queste ISO siano presenti /opt/. Come lo faccio? (+1 nel frattempo per sforzo ...)
Fabby,

1
@Fabby: Penso che Invece di creare una nuova cartella per gli ISO come mostrato sopra, punta alla posizione dell'ISO in / opt /, in grub.cfg, grub su un pendrive può avviare un ISO sul disco rigido. Ci proverò.
CSCameron,

@Fabby: se gli ISO sono attivati ​​/ opt / dell'unità interna, la stessa voce di menu che si sta utilizzando sull'unità interna funzionerà sull'unità esterna. Potrebbero esserci vantaggi all'avvio di grub su una chiavetta USB, come non sovraffollamento o corruzione del menu interno di grub.
CSCameron,

3

Tre semplici passaggi

per aggiungere ISO al menu di grub e avviare da esso.

Innanzitutto, installa grml-rescueboot

Apri un terminale e inserisci:

sudo apt install grml-rescueboot

In secondo luogo, spostare i file ISO in /boot/grml/

Nello stesso terminale inserire:

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

Terzo, aggiorna grub

Nello stesso terminale inserire:

sudo update-grub

Ripetere i passaggi secondo e terzo come e quando necessario

Non dimenticare di eliminare i file ISO obsoleti da /boot/grml .

Riferimento: Guida di Ubuntu all'avvio di Grub2 ISO

Spero che sia di aiuto


/bootè il posto peggiore per metterli. Mi dispiace, ho esaminato grml, avrei dovuto menzionarlo. +1 per sforzo
Fabby,

Grazie @Fabby per il +1! Questo potrebbe non essere il modo migliore per farlo, ma questo sembra essere il più semplice, IMHO.
user68186,

1
Ecco perché +1: buona risposta per utenti non tecnici.
Fabby,

2

MultiBootUSB - QEMU

Se vuoi avviare i file ISO con il minimo fastidio e non hai bisogno di persistenza, MultiBootUSB include un'opzione QEMU:

  • Avviare MultiBootUSB e selezionare la scheda Boot ISO / USB.

  • Trascina e rilascia l'ISO nello spazio Seleziona immagine.

  • Seleziona la dimensione della RAM e premi il pulsante ISO di avvio.

Non è necessario modificare grub.cfg o disconnettersi.

MultiBootUSB-QEMU


Nifty! Lo proverò più tardi!
Fabby,

@Fabby: esiste una versione Windows di MBUSB e una versione Linux. Non sono riuscito a ottenere la versione di Windows per avviare ISO, solo USB. La versione 9.2.0 di Linux funziona perfettamente per me.
CSCameron,

2

SEMPLICE multikoter ISO mkusb

Se non hai bisogno della multi-persistenza, è facile eseguire il boot multiplo degli ISO del sistema operativo su un'unità flash mkusb.

Usa mkusb per creare un'unità USB persistente utilizzando un sistema operativo predefinito di tua scelta, https://help.ubuntu.com/community/mkusb

Crea una cartella nella partizione usbdata sdx1, denominata ISO.

Aggiungi gli ISO da avviare in questa cartella.

Aggiungi menuentries a /sdx3/boot/grub/grub.cfg per montare in loop gli ISO.

Campioni:

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
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.