Come creare un USB avviabile da un ISO avviabile con la riga di comando su Linux?


50

Ho un CD creato da un file ISO che utilizzo per installare una versione personalizzata di Ubuntu tramite plop linux.

Il cd funziona bene, ma mi piacerebbe usare un'unità USB avviabile. Ho usato il comando dd per provare a creare l'USB avviabile:

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

Ora questo copia i file e rende l'avvio USB ma viene visualizzato l'errore "Sistema operativo mancante"

Qualche idea?


Hai accesso solo alla riga di comando? Ci sono interfacce come Unetbootin che funzionano molto bene e funzionano su Linux ..
Dashboard

3
@dashboard Preferirei la riga di comando perché è disponibile su tutte le macchine Linux.
xsdf


@dashboard - Gli strumenti della GUI non sembrano mai funzionare bene per me, e questo è sempre stato vero per molti anni. Sono felice di conoscere il metodo da riga di comando. Lo trovo più facile e più affidabile. È molto meno frustrante!
MountainX,

Risposte:


58

Ok dopo alcune ricerche ho trovato una soluzione e la esaminerò passo dopo passo. Il problema era duplice.

  1. Collegare l'unità flash USB e determinare il dispositivo su cui è montato con il comando:

    sudo fdisk -l
    

    Questa volta per me era / dev / sdc1, quindi lo userò come esempio.

  2. Smonta il dispositivo

    umount /dev/sdc1
    
  3. Non sono sicuro se necessario, ma ho formattato l'unità in FAT32, per ogni evenienza

    sudo mkdosfs -n 'USB-Drive-Name' -I /dev/sdc -F 32
    
  4. Ora il mio ISO stava usando isolinux e non syslinux. Sapevo che funzionava con i CD, quindi ho capito che dovevo chiamare il comando isohybrid, che consente a un ISO di essere riconosciuto dal BIOS da un disco rigido.

     isohybrid filename.iso
    

    Puoi scoprire di più su questo comando qui , ma questa è stata la causa del messaggio "Sistema operativo mancante" Il primo problema è stato risolto, ma ora diceva "isolinux.bin mancava o era corrotto"

  5. Il prossimo passo è copiare l'iso. Il mio secondo problema risiedeva qui, dove stavo copiando sulla partizione, SDC1, non sul dispositivo, SDC.

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

    Questo sembra funzionare bene, ma nel forum in cui ho ricevuto l'ultima correzione, mi è stato consigliato di fare quanto segue prima di scollegare il dispositivo:

    sync
    sudo eject /dev/sdc
    

3
Ecco un modo per verificare i progressi di dd: unix.stackexchange.com/a/11264/13011 .
Nikos Alexandris,

3
Facendo un'ipotesi qui, penso che il mkdosfscomando potrebbe non essere necessario, dal momento che l'iso ha già un filesystem su di esso (probabilmente include un MBR, non sicuro) che viene copiato all'inizio del dispositivo a blocchi. Amico, isohybridè un ottimo comando, non lo sapevo!
Ehtesh Choudhury,

1
per Windows 7 avviabile installa USB, vedi anche superuser.com/questions/256869/…
cwd

7
Il passaggio 3 non è necessario; il ddcomando al punto 5 cancellerà il filesystem appena creato con i contenuti dell'ISO.
ewhac,

Sono quasi 12 ore alla ricerca di questo stesso problema fino a quando non trovo il tuo post qui e ho seguito e passo e ... ha funzionato! (anche il passaggio 5 è stato un mio problema, non sono ancora prosu Linux, quindi grazie)
Ismael

3

Questo è un problema comune con le chiavette USB SanDisk o le chiavette non formattate in FAT32.

Se non uno di questi è sicuramente un problema con il tuo ordine di partizione stick o il file syslinux.cfg.


L'unità flash USB proviene da Verbatim. Ho riformattato in FAT32 solo per essere sicuro e ho ancora avuto lo stesso errore.
xsdf,

1

isohybridpotrebbe non funzionare sempre. Ad esempio, ho avuto un .iso con FreeDOS e isohybrid non è stato in grado di trovare alcuni file importanti lì (non so se avrebbero dovuto essere messi lì da syslinux, che ho usato anch'io, o altro). Propongo qui diverse alternative.

1) Installa lì un altro bootloader come GRUB. È spiegato qui :

"Supponiamo che la prima partizione della chiavetta USB sia FAT32 e la sua partizione sia / dev / sdy1" (avevo grub2sul mio Fedora Core, quindi ho cambiato un po 'i comandi):

# 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 offre un metodo composto con GRUB e syslinux qui (anche se non capisco come siano stati lanciati grub>- non sono riuscito ad avviare da USB fino a quel livello).

3) Ecco un post che può essere utile - dice 'Finché i file command.com, kernel.sys, syslinux.cfg, ldlinux.sys e fat32lba.bss sono nella radice dell'unità, nell'MBR e nel boot settore non viene riscritto, l'unità deve rimanere avviabile. "

4) Qui viene spiegato come generare un file .iso avviabile con un bootloader syslinux. Non usano nemmeno isoibrido. Sfortunatamente questo non mi ha aiutato (forse a causa di syslinux).

5 *) Utilizzare un programma Windows tramite wine. Ho provato rufus, tuttavia non ha funzionato, non è stato possibile trovare il dispositivo.

Ti avverto che sfortunatamente non sono riuscito a risolvere questo problema, il mio dispositivo non è stato avviabile, ma spero che questo possa essere utile per altre persone (anche per coloro che vogliono installare non un Linux su USB). L'immagine usb generata da chtaube ha funzionato per me, quindi penso che questi metodi siano corretti.

UPD: il terzo metodo funziona davvero (con una correzione per un file di installazione personalizzato).

UPD2: (collegamenti fissi). Il problema isohybridera probabilmente perché le versioni di isolinux.bin su iso e il mio sistema erano diverse. Ricompilato l'iso usando genisoimagecome suggerito qui :

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

Ci sono stati anche alcuni problemi, sono stati risolti con il metodo qui prima del genisoimage:

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

== fine UPD2 ==



2 °: freedos.sourceforge.net/wiki/index.php/USB#Linux_2 Puoi aggiungere questi link al post se il sistema ti fida di più di me. StackOverflow mi conosce già bene, quindi perché un tale problema in superutente? Inoltre ho avuto problemi a pubblicare questo, non mi ha mostrato che la mia risposta era già stata pubblicata.
Yaroslav Nikitenko,

Sembra che il superutente conti i collegamenti in base ai loro riferimenti, cioè se collego due volte a una stessa risorsa, viene conteggiato. Questo sembra essere un bug. Una soluzione alternativa in UPD è arrivata da spiderbird.com/tag/fat32lba-bss
Yaroslav Nikitenko

Tutti i collegamenti nei commenti sono stati corretti. Li lascio qui per mostrare quanti problemi comporta questa politica.
Yaroslav Nikitenko,

0

È possibile utilizzare l' bootisoutilità , che fa esattamente questo, in modo sicuro:

bootiso -d /dev/sdb filename.iso

bootiso verificherà che il dispositivo selezionato /dev/sdbsia collegato tramite USB e, in caso contrario, fallirà, il che è un grande vantaggio di sicurezza. Rileverà automaticamente il dispositivo USB se al sistema è esattamente collegata un'unità USB, vederla in azione:

Se vuoi installare il bootloader di syslinux per aggirare i problemi menzionati da @xsdf, usa l' -bopzione:

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

Per installarlo:

curl -L https://rawgit.com/jsamr/bootiso/latest/bootiso -O
chmod +x bootiso
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.