Wie erstelle ich einen bootfähigen USB von einem bootfähigen ISO mit der Kommandozeile unter Linux?

50

Ich habe eine CD, die aus einer ISO-Datei erstellt wurde, mit der ich eine benutzerdefinierte Version von Ubuntu über plop linux installiere.

Die CD funktioniert einwandfrei, aber ich möchte stattdessen ein bootfähiges USB-Laufwerk verwenden. Ich habe den Befehl dd verwendet, um den bootfähigen USB zu erstellen:

dd if=filename.iso of=/dev/sdb1 bs=4k

Jetzt kopiert dies die Dateien und macht den USB-Stick bootfähig, aber ich erhalte die Fehlermeldung "Fehlendes Betriebssystem"

Irgendwelche Ideen?

xsdf
quelle
Haben Sie nur Zugriff auf die Befehlszeile? Es gibt Schnittstellen wie Unetbootin, die sehr gut funktionieren und unter Linux laufen.
Dashboard
3
@dashboard Ich würde die Befehlszeile bevorzugen, da sie auf jedem Linux-Computer verfügbar ist.
Xsdf
@dashboard - Die GUI-Tools scheinen für mich nie gut zu funktionieren, und dies ist seit vielen Jahren immer wieder der Fall. Ich bin froh, die Kommandozeilenmethode zu kennen. Ich finde es einfacher und zuverlässiger. Es ist viel weniger frustrierend!
MountainX

Antworten:

58

Ok, nach ein paar Recherchen habe ich eine Lösung gefunden und ich gehe sie Schritt für Schritt durch. Das Problem war zweifach.

  1. Stecken Sie das USB-Flash-Laufwerk ein und bestimmen Sie das Gerät, auf dem es installiert ist, mit dem folgenden Befehl:

    sudo fdisk -l
    

    Dieses Mal war es / dev / sdc1 für mich, also werde ich das als mein Beispiel verwenden.

  2. Hängen Sie das Gerät um

    umount /dev/sdc1
    
  3. Ich bin mir nicht sicher, ob es notwendig ist, aber ich habe das Laufwerk für alle Fälle in FAT32 formatiert

    sudo mkdosfs -n 'USB-Drive-Name' -I /dev/sdc -F 32
    
  4. Jetzt verwendete meine ISO Isolinux und nicht Syslinux. Ich wusste, dass es mit CDs funktioniert, und fand heraus, dass ich den isohybrid-Befehl aufrufen musste, mit dem eine ISO vom BIOS von einer Festplatte erkannt werden kann.

     isohybrid filename.iso
    

    Weitere Informationen zu diesem Befehl finden Sie hier . Dies war jedoch die Ursache für die Meldung "Fehlendes Betriebssystem". Das erste Problem wurde behoben. Jetzt heißt es jedoch "isolinux.bin fehlte oder war beschädigt".

  5. Der nächste Schritt ist das Kopieren der ISO. Mein zweites Problem lag hier, wo ich auf die Partition sdc1 kopierte, nicht auf das Gerät sdc.

    sudo dd if=filename.iso of=/dev/sdc bs=4k
    

    Dies scheint gut zu funktionieren, aber in dem Forum, in dem ich die letzte Korrektur erhalten habe, wurde empfohlen, vor dem Abziehen des Geräts Folgendes zu tun:

    sync
    sudo eject /dev/sdc
    
xsdf
quelle
3
Hier ist eine Möglichkeit, den Fortschritt von dd zu überprüfen: unix.stackexchange.com/a/11264/13011 .
Nikos Alexandris
3
Ich gehe davon aus, dass der mkdosfsBefehl möglicherweise nicht erforderlich ist, da sich auf der ISO bereits ein Dateisystem befindet (wahrscheinlich einschließlich eines MBR, nicht sicher), das an den Anfang des Blockgeräts kopiert wird. Mann, isohybridist ein cooler Befehl, wusste nichts davon!
Ehtesh Choudhury
1
für Windows 7 bootfähigen USB - Installation finden Sie auch superuser.com/questions/256869/...
cwd
7
Schritt 3 ist nicht erforderlich. Der ddBefehl in Schritt 5 löscht das neu erstellte Dateisystem mit dem Inhalt der ISO.
Ewhac
Ich bin fast 12 Stunden auf der Suche nach dem gleichen Problem, bis ich Ihren Beitrag hier finde und ich folgte und schritt und ... es hat funktioniert! (Schritt 5 war auch mein Problem, ich bin noch nicht prounter Linux, also danke)
Ismael
3

Dies ist ein häufiges Problem bei SanDisk-USB-Sticks oder Sticks, die nicht in FAT32 formatiert sind.

Wenn dies nicht der Fall ist, liegt dies höchstwahrscheinlich an Ihrer Stick-Partitionsreihenfolge oder an der Datei syslinux.cfg.

Shouvik Sayef
quelle
Das USB-Flash-Laufwerk stammt von Verbatim. Ich habe in FAT32 neu formatiert, um sicher zu gehen, und trotzdem den gleichen Fehler erhalten.
Xsdf
1

isohybridfunktioniert möglicherweise nicht immer. Ich hatte zum Beispiel eine .iso-Datei mit FreeDOS und isohybrid konnte dort einige wichtige Dateien nicht finden (ich weiß nicht, ob sie von Syslinux, das ich auch verwendet habe, oder von irgendetwas anderem dort abgelegt werden sollten). Ich schlage hier mehrere Alternativen vor.

1) Installieren Sie dort einen anderen Bootloader wie GRUB. Es wird hier erklärt :

"Angenommen, die erste Partition Ihres USB-Sticks ist FAT32 und die Partition ist / dev / sdy1" (Ich hatte grub2auf meinem Fedora Core, also habe ich die Befehle ein wenig geändert):

# mkdir -p /mnt/usb ; mount /dev/sdy1 /mnt/usb
# grub2-install --target=i386-pc --recheck --debug --boot-directory=/mnt/usb/boot /dev/sdy
# grub2-mkconfig -o /mnt/usb/boot/grub2/grub.cfg

# optional, backup config files of grub.cfg
# mkdir -p /mnt/usb/etc/default
# cp /etc/default/grub /mnt/usb/etc/default
# cp -a /etc/grub.d /mnt/usb/etc

# sync; umount /mnt/usb

2) FreeDOS Wiki bietet hier eine Compound-Methode mit GRUB und Syslinux an (obwohl ich nicht verstehe, wie sie gestartet wurden grub>- ich konnte bis zu diesem Zeitpunkt nicht vom USB booten).

3) Hier ist ein Beitrag, der nützlich sein kann: Solange sich die Dateien command.com, kernel.sys, syslinux.cfg, ldlinux.sys und fat32lba.bss im Stammverzeichnis des Laufwerks und des MBR befinden und booten Sektor nicht neu geschrieben werden, sollte das Laufwerk bootfähig bleiben. '

4) Hier wird erklärt, wie eine bootfähige .iso-Datei mit einem Syslinux-Bootloader erzeugt wird. Sie benutzen nicht einmal Isohybrid. Leider hat mir das nicht geholfen (vielleicht wegen syslinux).

5 *) Verwenden Sie ein Windows-Programm über wine. Ich habe versucht, Rufus, aber das hat nicht funktioniert, es konnte das Gerät nicht finden.

Ich warne Sie, dass ich dieses Problem leider nicht lösen konnte, mein Gerät war nicht bootfähig, aber ich hoffe, dass dies für andere Leute nützlich sein kann (auch für diejenigen, die kein Linux auf dem USB installieren wollen). Das von chtaube erzeugte USB-Image hat zwar für mich funktioniert, daher halte ich diese Methoden für richtig.

UPD: Die 3. Methode funktioniert wirklich (mit einer Korrektur für eine benutzerdefinierte Installationsdatei).

UPD2: (feste Verbindungen). Das Problem mit isohybridwar wahrscheinlich, weil die Versionen von isolinux.bin auf iso und meinem System unterschiedlich waren. Kompilieren Sie die ISO genisoimagewie hier vorgeschlagen :

genisoimage -l -r -J -b isolinux/isolinux.bin -no-emul-boot -boot-load-size 4 -boot-info-table -c isolinux/boot.cat -o fd11new.iso fd11new

Es gab auch einige Probleme, die hier vor genisoimage mit der Methode gelöst wurden :

cp /boot/extlinux/*.c32 fd11new/isolinux/
extlinux --install /boot/isolinux

== UPD2 beenden ==

Jaroslaw Nikitenko
quelle
Zweitens : freedos.sourceforge.net/wiki/index.php/USB#Linux_2 Sie können diese Links zum Beitrag hinzufügen, wenn das System Ihnen mehr vertraut als mir. StackOverflow kennt mich schon gut, warum also so ein Problem beim Superuser? Außerdem hatte ich Probleme beim Posten, es zeigte mir nicht, dass meine Antwort bereits gepostet war.
Jaroslaw Nikitenko
Es sieht so aus, als würde der Superuser Links anhand ihrer Referenzen zählen. Wenn ich also zweimal auf dieselbe Ressource verlinke, wird dies gezählt. Dies scheint ein Fehler zu sein. Eine Problemumgehung in UPD kam von spiderbird.com/tag/fat32lba-bss
Yaroslav Nikitenko,
Alle Links in den Kommentaren behoben. Ich lasse sie hier, um zu zeigen, wie viel Probleme diese Politik mit sich bringt.
Jaroslaw Nikitenko
0

Sie könnten das bootisoDienstprogramm verwenden , das genau das sicher macht:

bootiso -d /dev/sdb filename.iso

bootiso überprüft, ob das ausgewählte Gerät /dev/sdbüber USB angeschlossen ist, und schlägt fehl, wenn dies nicht der Fall ist. Dies ist ein großes Sicherheitsplus. Es erkennt das USB-Gerät auch automatisch, wenn genau ein USB-Laufwerk an Ihr System angeschlossen ist.

Wenn Sie den syslinux-Bootloader installieren möchten, um die von @xsdf genannten Probleme zu umgehen, verwenden Sie die folgende -bOption:

 bootiso -b -d /dev/sdb filename.iso

So installieren Sie es:

curl -L https://rawgit.com/jsamr/bootiso/latest/bootiso -O
chmod +x bootiso
Jules Randolph
quelle