Wie starte ich eine ISO-Datei von meinem Laufwerk mit grub2 auf UEFI-Computern?


12

Ich habe eine Reihe von Live-ISO-Dateien wie GParted , CloneZilla , Boot-Repair , Ubuntu 14.04 32-Bit , ... in /optund auf meinen alten BIOS-Rechner heruntergeladen. Früher konnte ich sie einfach zum Grub-Menü hinzufügen und booten . :-)

Ich habe jetzt eine UEFI-Maschine und alle Informationen, die ich finden kann, sind für BIOS-Maschinen.

Was sind die Schritte, um diese ISO-Dateien von Grub zu booten?

Ich habe es einfach satt, diese ständig auf einen USB-Stick zu "brennen", da ich den benötigten Stick nie finden kann, während mein Computer selbst im totalen Chaos um mich herum viel schwerer zu verlieren ist ... ) :-(


1
Ich bin vor einiger Zeit diesen Weg gegangen und es ist großartig.
Bio-Marmor

1
Ich verwende gerne eine separate Partition, eine auf jedem Laufwerk, um die Installation auf einem anderen Laufwerk zu vereinfachen, oder eine vollständige Installation auf Flash-Laufwerken. help.ubuntu.com/community/Grub2/ISOBoot Beispiele: help.ubuntu.com/community/Grub2/ISOBoot/Examples Ich finde, dass der Pfad korrekt ist, bevor Partitionen eingehängt werden, und dass detaillierte Boot-Parameter als die beiden Hauptprobleme ermittelt werden es zu arbeiten. Der Pfad kann sich sogar ändern, wenn das Flash-Laufwerk angeschlossen ist. Wenn Sie sich die ISO-Datei ansehen, um die Boot-Zeilengruppe und den Pfad zu sehen, können Sie Details herausfinden.
Oldfred

1
Ich habe diese 'grub-n-iso'-Methode schon oft benutzt und sie funktioniert gut :-), aber jetzt teste ich ISO-Dateien in einem separaten Computer zum Testen und klone sie von den ISO-Dateien auf schnelle USB3-Pendrives oder erstelle dauerhafte Live-Dateien USB-Sticks mit mkusb . (Ich bewahre meine USB-Sticks in einer kleinen Plastikbox auf.)
sudodus

VBox führt ISO-Dateien aus. OK. Verwenden Sie beim Beenden die Option zum Speichern des Computerzustands. MultiBootUSB bietet eine Option zum Ziehen und Ablegen von ISO-Booten. QEMU mit Virtual Machine Manager führt schnell eine ISO aus.
CSCameron

1
Verwenden Sie zur Zeit nur grub2 2.02, um ISO per Loop zu mounten. Grub2 2.04 gibt einen Speicherfehler aus. bugs.launchpad.net/ubuntu/+source/grub2/+bug/1851311 Ubuntu 18.04 hat immer noch Grub 2.02.
Oldfred

Antworten:


14

Es gibt einen Fehler in Grub 2.04 , stellen Sie also sicher, dass Sie eine frühere oder spätere Version haben.

Nun, die Grundlagen für das Hinzufügen einer ISO-Datei zu grub sind für eine UEFI dieselben wie für eine BIOS-Maschine: Bearbeiten /etc/grub.d/40_customSie ein menuentryElement und fügen Sie es hinzu (in diesem Beispiel wird GParted verwendet) am Ende der Datei:

menuentry "GParted Live ISO" {
}

Jetzt fügen wir eine Variable hinzu, die das Verzeichnis enthält, in dem wir die ISO gespeichert haben (bisher so gut: keine Unterschiede zu BIOS-Maschinen):

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

Ich /optspeichere diese Dateien, da ich keine Verzeichnisse im Stammverzeichnis meines Computers erstellen möchte. Gemäß der Linux-Dateisystemhierarchie sollte sich dort ohnehin optionale Software befinden.

Bevor wir die Add loopbackVariable, müssen wir gespeichert ist, die Festplatte die Datei , um herauszufinden , auf, so dass wir ein tun: df --output=source /opt/Live-ISOs/gparted-live-0.31.0-1-amd64.iso | tail -1und die Ausgabe auf meinem Rechner ist: /dev/sdb2.

Allerdings benutzt grub die hdX,YNotation ( ) und hier kommt der Unterschied zwischen UEFI- und BIOS-Maschinen ins Spiel! So jetzt einen Neustart Ihrer Maschine, gehen in die Grub - Menü und drücken Sie C: Dieses Sie auf den Befehl grub bringen wird prompt mit verschiedenen Befehle , als Sie es gewohnt sind , aber die einzige, die Sie brauchen , ist: ls.

Auf meiner Maschine ist die Ausgabe:

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

Huh? 4 Antriebe? Ich habe nur 3! Und es ist keine (hd1,4)Zeile in einem BIOS, sondern (hd1,gpt3)in UEFI und (hd0)hat überhaupt keine Partitionen!

Nun, anscheinend, wenn ein Teil des NVRAM als Speicher verwendet wird und angezeigt wird, wie (hd0) Sie Ihre Laufwerke mit 1 nummerieren müssen!   Während alle Informationen, die Sie zum Booten von ISO-Dateien finden, besagen, dass Sie mit der Nummerierung von 0 beginnen müssen (auf BIOS-Computern ist dies immer der Fall, auf einigen UEFI-Computern muss dies nicht der Fall sein !)

Also für den Wert loopbackwird (hd2,gpt2)$GPartedISOFileals die auf meinem Rechner Datei ISO war /dev/sdb2(zweites Laufwerk hd2, zweite Partition gpt2):

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

Ein weiterer Unterschied besteht darin, dass die linuxund initrdauf BIOS-Maschinen linuxefiund linuxefiauf UEFI-Maschinen aufgerufen werden, was unser Endergebnis ergibt:

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

Also speichere diese Datei und aktualisiere grub mit:

update-grub

Nach all dem, starte neu, gehe in das Grub-Menü , wähle GParted Live ISOund du kannst jetzt ganz einfach deine ISO booten, ohne jemals wieder nach einem USB-Stick suchen zu müssen!

:-)

CloneZilla Live Beispiel (für diese Frage )

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
}

Hast du Clonezilla schon eingerichtet? Es ist ein bisschen anders, das kann ich posten, wenn du das noch nicht herausgefunden hast.
Bio-Marmor

1
Ich werde eine weitere Antwort für all die posten, die ich morgen für die Art von "gimme the codez" hinzufügen werde ... @OrganicMarble
Fabby

+1 aber es ist wahrscheinlich sicher, die 2aus update-grub2diesen Tagen fallen zu lassen.
WinEunuuchs2Unix

@ WinEunuuchs2Unix Es ist in meiner Geschichte ... Ich tippe nur upd↑und kopiere dann Einfügen. Danke für die Erinnerung Aktualisiert!
Fabby

6

Eine Alternative ist, einfach eine Konfigurationsdatei wie folgt zu 40_custom hinzuzufügen:

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
} 

Ich mache das so, als würde ich beim Aktualisieren einer ISO immer vergessen, sie auszuführen sudo update-grub. Die obigen Einträge müssen sich nie ändern und ich kann nur die Datei livecdimage.cfg bearbeiten, die das gleiche Format wie jede andere 40_custom-Datei hat, aber keine Kopfzeilen enthält und sich in meinem / ISO-Ordner in meiner ISO-Partition befindet.

Ich füge toram als weiteren Boot-Parameter hinzu und auf dem System mit Nvidia füge nomodeset Boot-Parameter hinzu. Muss aber noch oft das / isodevice aushängen.

Isodevice kann nicht gemountet werden, nachdem ISO https://bugs.launchpad.net/ubuntu/+source/ubiquity/+bug/1155216 gemountet wurde

sudo umount -l -r -f /isodevice

Und das ist Teil meiner livecdimage.cfg-Datei

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

Ich mag den Neustart und halte diejenigen! :-) +1 Warum fügst du das hinzu insmod? Sie können mich auch im Chat
anpingen

inmod wird wohl nicht benötigt. Mit grub2 wurden einige Features eingebaut und einige wurden hinzugefügt (das insmod). Wahrscheinlich brauchte ich zu Beginn das insmod gpt, als ich 2010 mit der Verwendung von gpt begann oder bevor der PC UEFI und grub2 neu waren und nur für BIOS / MBR, obwohl ich von gpt mit BIOS booten würde.
Oldfred

Danke für die Antwort. Wäre es dann nicht besser, diese Zeilen aus der Antwort zu entfernen?
Fabby

1
Lassen Sie mich meine eigene Strophe bearbeiten und sehen, ob 18.04 lädt. Ich rechne damit. Ich wollte auch meinen gparted ISO-Starteintrag aktualisieren, der jetzt sehr alt ist, also werde ich gleich zurück sein.
Oldfred

1
OK gebootet. Ich habe vergessen, dass ich mein 18.04-Flashlaufwerk eingesteckt habe und es auf meinem System zu hd0 wird. Daher muss ich beim Booten den Eintrag auf einer HDX manuell bearbeiten, um das richtige Laufwerk zu haben. Mein gparted .25-Boot funktionierte nicht, indem ich nur auf .30 umstieg. Ich musste mich mit ISO befassen, die Datei grub.cfg ansehen und die Schleifenbefehle dieser Parameter und grubs verwenden, und dann funktionierte es.
Oldfred

5

mkusb MULTIBOOT HACK

Mkusb ist aufgrund seiner Fähigkeiten sowohl mit dem BIOS als auch mit UEFI eine großartige Basis für benutzerdefinierte Boot-Drive-Projekte.

Dieser Hack bootet mehrere ISO-Dateien, einschließlich des Windows-Installationsprogramms, und verfügt über ein grub2-Menü.

Grub2-Menüeinträge für die meisten Betriebssysteme sind über die Google-Suche verfügbar und gehen über den Rahmen dieser Antwort hinaus.

Mkusb Standardeinstellungen

Verwenden Sie die mkusb-Standardeinstellungen, wenn Sie ein persistentes USB-Laufwerk erstellen.

mkusb verwende wieder die Standardeinstellungen

Verwenden Sie die Standardeinstellungen für die mkusb-Persistenz, wenn Sie sich nicht sicher sind, dass die Partitionsgröße später angepasst werden kann, dies jedoch einige Zeit in Anspruch nimmt.

DUS-Konsole

Die DUS-Konsole nach der Installation.

Vorher GParted

Vor der Änderung der Partition erstellt.

Gparted nach

Nach Änderung aufgeteilt - Überschreiben Sie sdb4, die ISO9660-OS-Partition und sdb5, die ext2-casper-rw-Partition, mit einer FAT32-Partition für Persistenzdateien.

Persistenz-Partition

Persistenzpartition - Erstellen Sie einen eindeutigen Namensordner für jedes Betriebssystem (für das Persistenz erforderlich ist).

Persistenzordner

Persistenzordner - Fügen Sie jedem Persistenzordner eine casper-rw-Datei und eine optionale home-rw-Datei hinzu. Eine Home-RW-Datei kann durch Umbenennen einer Casper-RW-Datei erstellt werden. Eine Home-RW-Datei ist wie eine separate Home-Partition bei einer vollständigen Installation. Sie kann nach einem Versions-Upgrade wiederverwendet werden.

ISO-Ordner

Erstellen Sie einen Ordner für die ISO-Dateien auf der NTFS-Partition usbdata.

Inhalt des ISO-Ordners

Fügen Sie dem ISO-Ordner einige ISOs hinzu.

GRUB-Standort

grub.cfg Ort

grub.cfg

Bearbeiten Sie grub.cfg, um die ISO-Dateien per Loop zu laden. Umfassen:persistent persistent-path=/<persistent-folder-name>/ wenn Sie Ausdauer wünschen.

EDIT 18.04+ In grub geben Sie vmlinuz nicht vmlinuz.efi und initrd nicht initrd nicht initid.lz an

sudo hat -ls / dev / sdb getrennt

sudo hat -ls / dev / sdb getrennt

sudo lsblk -f / dev / sdb

sudo lsblk -f / dev / sdb

Wenn ein Windows-Installer benötigt wird, ist es möglicherweise am einfachsten, mit der mkusb-Funktion "Windows-Installer extrahieren" zu beginnen (ich musste die Windows-ISO manuell nach TAR extrahieren).

mkusb Windows Installer

Erstellen Sie nach der Installation einen Ordner für ISOs und, falls erforderlich, Ordner für die Persistenz (ähnlich wie oben beschrieben).

mkusb Windows grub

Bearbeiten Sie die Datei /boot/grub/grub.cfg, um alle ISOs per Loop zu laden und alle Persistenzordner anzugeben.

(habe keine Möglichkeit gefunden, eine Windows-ISO-Datei per Loop zu laden).

Wenn der obige als USB-Stick verwendet wird, kann er zum Booten von ISOs verwendet werden, die auf einem Windows-Computer gespeichert sind. Auf dem internen Laufwerk ist kein Grub erforderlich.


Und wie bekommt man diese wieder auf die HDD / SDD ??? Die Frage ist, ob ich sie jetzt auf einem USB-Stick haben möchte, oder habe ich etwas verpasst?
Fabby

1
@Fabby, Das ist nicht nur für USB-Sticks. Wenn Sie ein neues SATA-Laufwerk haben, können Sie wie in dieser Antwort beschrieben starten und mkusb sein robustes Boot-System installieren lassen , das sowohl im UEFI- als auch im BIOS-Modus funktioniert. Dieses SATA-Laufwerk kann intern installiert oder extern über USB oder eSATA angeschlossen werden. Es ist möglich, sowohl "konventionell installierte Systeme" als auch neue ISO-Dateien hinzuzufügen, die über "grub-n-iso" gebootet werden sollen.
Sudodus

OK, ich verstehe es immer noch nicht: Ich möchte diese ISOs in /opt/. Wie mache ich das? (+1 in der Zwischenzeit für Mühe ...)
Fabby

1
@Fabby: Ich denke, anstatt wie oben gezeigt einen neuen Ordner für die ISOs zu erstellen, zeigen Sie auf den ISO-Speicherort in / opt / in grub.cfg. Grub on a pendrive kann eine ISO auf der Festplatte booten. Ich werde es versuchen.
CSCameron

@Fabby: Wenn die ISOs auf / opt / des internen Laufwerks aktiviert sind, funktioniert derselbe Menüeintrag, den Sie auf dem internen Laufwerk verwenden, auch auf dem externen Laufwerk. Das Booten von Grub auf einem USB-Stick kann Vorteile haben, z. B. nicht überfüllt zu sein oder das interne Grub-Menü zu beschädigen.
CSCameron

3

Drei einfache Schritte

um ISO zum Grub-Menü hinzuzufügen und von dort zu booten.

Zuerst installieren grml-rescueboot

Öffne ein Terminal und gib ein:

sudo apt install grml-rescueboot

Zweitens verschieben Sie die ISO-Dateien nach /boot/grml/

Im selben Terminal geben Sie ein:

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

Drittens Update Grub

Im selben Terminal geben Sie ein:

sudo update-grub

Wiederholen Sie den zweiten und dritten Schritt nach Bedarf

Vergessen Sie nicht, veraltete ISO-Dateien von zu löschen /boot/grml.

Referenz: Ubuntu-Hilfe zum Grub2-ISO-Boot

Hoffe das hilft


/bootist der schlechteste Ort, um sie zu setzen. Sorry, habe in grml nachgesehen, hätte es erwähnen sollen. +1 für Mühe aber
Fabby

Danke @Fabby für die +1! Dies ist möglicherweise nicht der beste Weg, dies zu tun, aber meiner Meinung nach scheint dies der einfachste zu sein.
user68186

1
Deshalb +1: gute Antwort für nicht technische Benutzer.
Fabby

2

MultiBootUSB - QEMU

Wenn Sie ISO-Dateien mit dem geringsten Aufwand starten möchten und keine Persistenz benötigen, enthält MultiBootUSB eine QEMU-Option:

  • Starten Sie MultiBootUSB und wählen Sie die Registerkarte Boot ISO / USB.

  • Ziehen Sie den ISO-Wert per Drag & Drop in den Bereich Bild auswählen.

  • Wählen Sie die RAM-Größe und klicken Sie auf die Schaltfläche Boot ISO.

Sie müssen die Datei grub.cfg nicht bearbeiten oder sich abmelden.

MultiBootUSB-QEMU


Raffiniert! Ich werde das später ausprobieren!
Fabby

@ Fabby: Es gibt eine Windows-Version von MBUSB und eine Linux-Version. Ich konnte die Windows-Version nicht zum Booten von ISOs bringen, nur von USBs. Die Linux-Version 9.2.0 funktioniert hervorragend für mich.
CSCameron

2

EINFACH mkusb ISO Multibooter

Wenn Sie keine Multi-Persistenz benötigen, ist es einfach, ISOs von Multiboot-Betriebssystemen auf einem mkusb-Flash-Laufwerk zu speichern.

Verwenden Sie mkusb, um ein persistentes USB-Laufwerk mit einem Standardbetriebssystem Ihrer Wahl ( https://help.ubuntu.com/community/mkusb) zu erstellen

Erstellen Sie in der usbdata-Partition sdx1 einen Ordner mit dem Namen ISOs.

Fügen Sie die zu startenden ISOs in diesen Ordner ein.

Fügen Sie Menüeinträge zu /sdx3/boot/grub/grub.cfg hinzu, um die ISOs per Loop zu mounten.

Proben:

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
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.