Come creare un'unità flash USB Ubuntu avviabile dal terminale?


353

Esiste un modo per creare un'unità flash USB Ubuntu avviabile dal terminale senza utilizzare applicazioni di terze parti come YUMI , Unetbootin , Startup Disk Creator , ecc.

Ho provato a creare un'unità flash Ubuntu avviabile con ddmetodo,

sudo umount /dev/sdb
sudo dd if=/path/to/ubuntu.iso of=/dev/sdb bs=1M

Crea file sul disco USB, ma quando provo ad avviare il disco USB mostra un Operating System Not Founderrore.


È necessario assicurarsi che l'unità flash USB NON sia montata. Verificare con lsblk. Se necessario, esegui sudo umount / dev / sdb (probabilmente sdb1, sdb2). Aggiungi; echo $? dopo il tuo comando dd copy. Quindi: sudo dd if = ... of = ... bs = 4M; echo $? Se il comandod termina, il valore restituito dovrebbe essere 0.

ho seguito i tuoi passi, ma crea anche gli stessi file di sudo umount /dev/sdb sudo dd if=/path/to/ubuntu.iso of=/dev/sdb bs=1Mcreate. Non crea alcun ubninit,ldlinux.sys,etcfile che è principalmente importante per l'avvio di un sistema operativo Linux.
Avinash Raj,

Vorrei installare grub sull'MBR del disco USB come passaggio finale.
Anziano Geek,

2
Il modo più semplice con gli strumenti integrati che utilizzano il terminale è utilizzare ddcome descritto qui. Funziona con tutti i file iso ibridi. Ma ddè uno strumento pericoloso perché fa quello che gli dici di fare senza domande. Quindi, se gli dici di cancellare le foto di famiglia ... ed è un piccolo errore di battitura. Molti strumenti sono più sicuri. Ti aiutano a identificare e selezionare l'unità di destinazione e forniscono un punto di controllo finale , in cui è possibile ricontrollare, che si scriverà sull'unità corretta. La maggior parte di questi sono strumenti GUI, alcuni possono funzionare anche in modalità testo, ad es mkusb-dus.
sudodus,

1
Il seguente link mostra un esempio, in cui l'unità interna è stata sovrascritta per errore, quando è ddstata utilizzata una riga di comando per creare un'unità flash USB Ubuntu avviabile, askubuntu.com/questions/982552/accidentally-did-dd-dev- sda
sudodus,

Risposte:


431

È possibile utilizzare dd.

 sudo umount /dev/sd<?><?>  

dove <?><?>c'è una lettera seguita da un numero, cercala correndo lsblk.

Sembrerà qualcosa del genere

sdb      8:16   1  14.9G  0 disk 
├─sdb1   8:17   1   1.6G  0 part /media/username/usb volume name
└─sdb2   8:18   1   2.4M  0 part 

Smonterei sdb1.

Quindi, dopo (questo è un comando distruttivo e cancella l'intera unità USB con il contenuto dell'iso, quindi fai attenzione):

 sudo dd bs=4M if=path/to/input.iso of=/dev/sd<?> conv=fdatasync  status=progress

dove si input.isotrova il file di input ed /dev/sd<?>è il dispositivo USB su cui stai scrivendo (corri lsblkper vedere tutte le unità per scoprire cosa <?>è per la tua USB).

Questo metodo è veloce e non mi ha mai deluso.


EDIT: per quelli su un Mac che finiscono qui, usa le lettere minuscole per bs=4m:

sudo dd if=inputfile.img of=/dev/disk<?> bs=4m && sync

EDIT: se l'unità USB non si avvia (questo è successo a me), è perché la destinazione è una partizione particolare sull'unità anziché sull'unità. Quindi il target deve essere / dev / sdc e non dev / sdc <?>Per me era / dev / sdb.

Riferimento: https://superuser.com/a/407327 e https://askubuntu.com/a/579615/669976


13
non funziona per me.
Avinash Raj,

7
Veramente? Sei sicuro di avere il nome file .iso corretto incluso il percorso e il corretto / dev per l'unità USB? Come fallisce? C'è un messaggio di errore o non riesce ad avviarsi? Sei sicuro che .iso non sia corrotto?
Marc,

8
Potresti avere un .iso corrotto. L'hai controllato? Sei sicuro che .iso sia in realtà una copia di qualcosa che è avviabile?
Marc

5
La domanda originale e la risposta più votata è la stessa persona che ha affermato che questo metodo non funziona per lui. ;-) Per me la risposta approvata non funziona e questo lo fa. :-) Voto.
Drachenfels,

20
L'aggiunta di status=progressa alla riga di comando è utile anche per vedere quanto rimane in alto nella copia.
Supernormal,

101

Ci sei quasi dd, ma ti manca un passo.

sudo umount /dev/sdX
sudo dd if=/path/to/ubuntu.iso of=/dev/sdX bs=4M && sync

dov'è il sdXtuo dispositivo USB (questo può essere verificato con lsblk).

Il syncbit è importante poiché ddpuò tornare prima che l'operazione di scrittura termini.


17
+1 per la menzione sync. Senza di essa, non hai idea se il contenuto è stato effettivamente copiato. Inoltre, se non hai fretta, dovresti avere md5sumentrambi i file solo per essere doppiamente sicuro.
Dave,

4
Forse vale la pena ricordare che l'USB potrebbe aver bisogno di essere (ri) formattato come FAT32 per sudo mkfs.msdos -F 32 /dev/sdXprimo?
Nemo,

10
@Nemo, è possibile che questo faccia la differenza? ddsu / dev / sdX sovrascriverà qualsiasi file system esistente.
mwfearnley,

5
syncè inutile qui. Influisce solo sulle operazioni del file system.
punund

3
conv=fdatasync- scrivere fisicamente i dati del file di output prima della fine dovrebbe occuparsi della sincronizzazione, ma è bene fare attenzione a assicurarsi che il dispositivo sia smontato per primo.
Johnathon Havens,

98

Creazione di un'unità flash USB Ubuntu avviabile dal terminale

  • Posizionare il ubuntu.isofile in qualsiasi partizione del disco rigido.

  • Quindi montare il ubuntu.isofile con i comandi seguenti nel terminale:

    sudo mkdir /media/iso/
    sudo mount -o loop /path/to/ubuntu.iso /media/iso
    
  • Inserisci la tua chiavetta USB. La mia guida è /dev/sdd. Ecco uno screenshot:

Screenshot di GParted

  • L'unità potrebbe essere montata automaticamente all'interno /media/. Supponiamo che sia stato montato /media/xxx/.

  • Copia tutti i file dall'unità /media/iso/flash USB montata eseguendo il comando seguente (assicurati di includere il punto):

    cp -a /media/iso/. /media/xxx/
    
  • Successivamente, è necessario il ldlinux.sysfile nell'unità flash USB per rendere l' avvio USB . La mia partizione USB è /dev/sdd1; entra lsblkper vedere qual è il tuo. Esegui i comandi seguenti:

    sudo apt-get install syslinux mtools
    sudo syslinux -s /dev/sdd1
    
  • Passare alla /media/xxxcartella mount e rinominare la isolinuxdirectory in syslinux. Quindi vai nella cartella rinominata e rinomina il file isolinux.cfgin syslinux.cfg.

  • Riavvia il PC e modifica l'ordine di avvio nel BIOS per consentire l'avvio da un'unità USB. Ora l'unità flash USB Ubuntu si avvia e puoi installarla.

Questo metodo funzionerà con qualsiasi distribuzione Linux, non solo Ubuntu. Non è necessario installare alcun software di terze parti per creare un'unità flash USB Linux .


3
Ci sto provando al momento, potresti per favore specificare cosa / perché usi: cp -a piuttosto che cp -r
moldavo

2
È necessario sudoper il syslinuxcomando.
Cammy_the_block

9
Questo metodo non ha funzionato per me. Il cp -a fornisce: 'cp: impossibile creare un collegamento simbolico' /media/xxx/./ubuntu ': operazione non consentita' e simili, poiché il target è fat32. Ho provato a ignorare che ... non ha funzionato
sheß

6
È importante notare che l'USB deve essere un filesystem fat32, altrimenti syslinux non funzionerà
Ricardo BRGWeb

2
La console mi mostra lo stesso errore di @ sheß. Ho verificato il filesystem (FAT32) e il flag BOOT.
Chofoteddy

40

Hai due scelte.

Se desideri un'interfaccia grafica, usa usb-creator (è nei repository Ubuntu)

inserisci qui la descrizione dell'immagine

Se si desidera uno strumento da riga di comando, utilizzare dd

#Replace X accordingly in both commands

sudo umount /dev/sdX
sudo dd if=/path/to/ubuntu.iso of=/dev/sdbX bs=1M

Basta essere sicuri che /dev/sdXl'unità flash si desidera utilizzare (distruggerà i dati sull'unità flash).

Consulta https://help.ubuntu.com/community/Installation/FromUSBStick per ulteriori informazioni.


1
Voglio solo strumenti da riga di comando, non strumento gui (come il creatore del disco di avvio). Secondo il ddmetodo, solo 3 cartelle e 1 file sono stati creati nel mio usb. Mentre provo ad avviarlo dice operating system not founderrore. File come ubninit,menu.c32,ubnpathl.txt,ubnfilel.txt,ldlinux.sysmancano (che sono mancanti molto importante per avviare live Ubuntu USB).
Avinash Raj,

1
Ho provato il metodo dd con ubuntu.iso e ha funzionato! troppo tempo comunque per essere scritto su un USB. Mi chiedo cosa significhi bs = 1M. Ho trovato questo sito manpages.ubuntu.com/manpages/karmic/en/man1/dd.1.html . Ora mi chiedo se cambiare il valore renderà più veloce la copia su USB? E quali sono i rischi .. forse qualcuno lo sa.
Moldavo

4
Bs è la dimensione del blocco. dd leggerà 1 MB di dati nella memoria e quindi procederà a scriverli sul disco nel suo insieme. Usando una dimensione di blocco molto piccola otterrai un sacco di sovraccarico della CPU. L'uso di blocchi di dimensioni molto grandi può comportare effetti collaterali imprevisti, ad esempio pause più lunghe di assenza di attività del disco e / o utilizzo di RAM di grandi dimensioni. 1M o 4M di solito è un buon valore quando si crea un disco da un ISO. Maggiori informazioni sulla dimensione dei blocchi: stackoverflow.com/questions/6161823/...
ApolloLV

Immagino che creare un usb avviabile sia qualcosa che faccio di rado, ma quando lo faccio, voglio che sia fatto bene. Una dimensione di blocco inferiore può richiedere più tempo, ma è un problema? No.
Marc,

2
@Marc - L'unico problema è la velocità, una dimensione del blocco più piccola non è più o meno soggetta a errori quindi una dimensione del blocco più grande e quindi una dimensione del blocco più piccola! = "Fatto bene". Fatto a destra significa controllare il md5sum dell'iso e confermare il md5sum dell'immagine scritta. Una volta confermato l'm5dsums sai che è stato fatto bene.
Pantera,

28

Innanzitutto, smontare il dispositivo USB e quindi utilizzare lsblkper verificare il dispositivo.

A volte (di solito file ISO più vecchi) dd non è sufficiente e il pendrive non si avvia. In questo caso, potrebbe essere necessario installare syslinux:

sudo apt-get install syslinux

e quindi eseguire i seguenti comandi:

sudo mkfs -t vfat -I /dev/sdX

Vuoi eseguire l'ultimo comando su /dev/sdXe no /dev/sdX1 .

Quindi, procedere con i seguenti comandi:

isohybrid /path/to/file.iso --entry 4 --type 0x1c
dd if='/path/to/file.iso' of=/dev/sdX bs=8M

oppure, per vedere lo stato di avanzamento dell'immagine scrivere:

pv -tpreb /path/to/file.iso | dd of=/dev/sdX bs=8M

o invece di dd, puoi usare catinvece:

sudo -s
cat /path/to/file.iso > /dev/sdX

Ricorda di inviare il comando di sincronizzazione per svuotare la cache di scrittura

sync

web.archive.org/web/20140327085331/https://tails.boum.org/doc/first_steps/installation/manual/linux/index.en.html


Devo dire che per me tutto il resto è fallito, ma ha funzionato - ho optato per il catcomando.
Digital Dracula,

Per quelli che insistono sul fatto che ddda soli è sufficiente, avevo anche bisogno che funzionasse.
GuiRitter,

Se vuoi uno strumento che usi ddquando ISO è ibrido e monta, copia il file ISO + installa SYSLINUX quando ISO non lo è, usa bootisoinvece.
Jules Randolph,

1
Puoi spiegare cosa fa effettivamente ciascuno di questi comandi? qual è il punto di creare un filesystem vfat sul dispositivo e quindi sovrascriverlo immediatamente con il contenuto del file iso? Cosa fa isohybrideffettivamente? modifica l'ISO in qualche modo?
Cheshirekow,

10

Se per "terze parti" intendi "gui", suggerisco uno script leggero chiamato bootiso dopo la risposta di Avinash Raj , perché ddnon sempre funziona. Il grande vantaggio è che è molto sicuro (esegue molti controlli di sicurezza per non sbagliare con il sistema), facile da installare e portatile.

Inoltre, bootisoispezionerà il file ISO per scegliere tra due modalità: image-copy ( dd) quando il file ISO è ibrido, che è compatibile con USB. E la modalità mount-rsync quando il file ISO non è ibrido, nel qual caso un bootloader SYSLINUX verrà installato automaticamente se supportato [ maggiori dettagli sul comportamento automatico ].

Come usarlo

Prima opzione, basta fornire l'ISO come primo argomento e ti verrà richiesto di selezionare un'unità tra un elenco estratto da lsblk:

bootiso myfile.iso

O fornire esplicitamente il dispositivo USB:

bootiso -d /dev/sde myfile.iso

Installazione rapida

curl -L https://git.io/bootiso -O
chmod +x bootiso

Guardalo in azione:


1
Sono d'accordo, questo è uno script molto carino che elimina i bit spaventosi dal processo. Maggiori dettagli qui: tecmint.com/create-bootable-usb-in-linux-commandline
kr37

Ha persino il supporto per Windows 10 ott 2018 poiché supporta "wim split" il file "install.wim" (usando il comando "wimlib-imagex") che è> 4Gb e che altrimenti non può essere archiviato su FAT32.
mevdschee,

7
$ dd if=ubuntu-14.04.1-desktop-amd64.iso of=/dev/sdX bs=1MB

Non usare il percorso per bit.

  1. Utilizzare il cdcomando per accedere alla cartella che contiene il file .iso
  2. usa il comando dd if=FILE NAME HERE.iso of=/dev/sdX bs=1MB
  3. Attendere che l'output della console assomigli a questo:

    1028+1 records in
    1028+1 records out
    1028653056 bytes (1.0 GB) copied, 55.4844 s, 18.5 MB/s
    
  4. Avvio da USB.

Nota: assicurati di scrivere sul dispositivo corretto un usb non sarà sempre montato su: dev/sdXdove X può essere qualsiasi lettera.


2
qual è il significato di bs = 1 MB nel comando dd ???
juggernauthk108,

1
@ juggernaut1996 none. È la dimensione del blocco da utilizzare durante la copia. Poiché non è stato fornito alcun argomento di conteggio, copierà l'intero input in blocchi da 1 MB. Potrebbe essere rimosso.
sjbx,

"Non utilizzare il percorso per bit" è una disinformazione. Il processo stesso non inserisce i componenti del percorso nell'immagine copiata in alcun passaggio, quindi è irrilevante se si accede alla directory contenente l'immagine ISO o si fornisce semplicemente il percorso completo. Inoltre, dd può accettare anche input da stdin, quindi puoi semplicemente reindirizzare due dd l'uno nell'altro per assicurarti che nessun percorso venga inserito nell'immagine.
Gabor Garami,

Funzionerà solo per ISO ibridi, che oggi soddisfano una buona maggioranza dei casi, ma ci sono eccezioni evidenti come UltimateBootCD. Usa bootisoinvece.
Jules Randolph,

-5

Prova questo e non mi ha mai deluso per più di 100 volte:

Formatta la carta:

$ sudo mkfs.vfat -F32 /dev/sdx

Montare l'immagine ISO:

$ sudo mount ubuntu.iso /mnt

Copia i contenuti sulla scheda:

$ sudo cp -rvf /mnt/* /SD_CardMountPoint

Poi:

  • rinominare la isolinuxcartella insyslinux
  • rinominare syslinux/isolinux.cfginsyslinux/syslinux.cfg
  • rinominare syslinux/isolinux.bininsyslinux/syslinux.bin
  • correre syslinux -s /dev/sdx

4
-1. Hai mai provato questo? sudo cp -rvf /mnt/* /dev/sdxnon funzionerà (o almeno non farà ciò che intendi). Non copiare i file su un dispositivo non elaborato ( /dev/). Invece, è necessario montare la scheda e copiare il contenuto del file ISO sulla scheda (punto di montaggio su punto di montaggio). E cosa c'è di sbagliato nell'attuale risposta accettata che ha lo stesso approccio.
gertvdijk,
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.