Como criar uma unidade flash USB inicializável no Ubuntu a partir do terminal?

353

Existe alguma maneira de criar uma unidade flash USB inicializável do Ubuntu a partir do terminal sem usar aplicativos de terceiros como YUMI , Unetbootin , Startup Disk Creator , etc.

Eu tentei criar uma unidade flash inicializável do Ubuntu com o ddmétodo

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

Ele cria arquivos no disco USB, mas quando tento inicializar o disco USB, ele mostra um Operating System Not Founderro.

Avinash Raj
fonte
Você precisa garantir que sua unidade flash USB NÃO esteja montada. Verifique com lsblk. Se necessário, faça sudo umount / dev / sdb (provavelmente sdb1, sdb2). Adicionar; echo $? após o seu comando dd copy. Então: sudo dd se = ... de = ... bs = 4M; eco $? Se o commandd terminar, o valor retornado deverá ser 0.
Eu segui suas etapas, mas ele também cria os mesmos arquivos que o sudo umount /dev/sdb sudo dd if=/path/to/ubuntu.iso of=/dev/sdb bs=1Mcreate.It não cria nenhum ubninit,ldlinux.sys,etcarquivo que é principalmente importante para o boot do Linux.
precisa
Eu instalaria o grub no MBR do disco USB como uma etapa final.
Elder Geek
2
A maneira mais fácil com as ferramentas internas que usam o terminal é usar ddcomo descrito aqui. Funciona com todos os arquivos iso híbridos. Mas ddé uma ferramenta perigosa porque faz o que você pede para fazer sem perguntas. Portanto, se você disser para apagar as fotos da família ... e houver um pequeno erro de digitação. Muitas ferramentas são mais seguras. Eles ajudam você a identificar e selecionar a unidade de destino e fornecem um ponto de verificação final , onde você pode verificar novamente, se estará gravando na unidade correta. A maioria destas são ferramentas da GUI, algumas também podem funcionar em modo de texto, por exemplo mkusb-dus.
sudodus 26/03
1
O link a seguir mostra um exemplo em que a unidade interna foi substituída por engano, quando uma linha de comando ddfoi usada para criar uma unidade flash USB inicializável do Ubuntu, askubuntu.com/questions/982552/accidentally-did-dd-dev- sda
sudodus

Respostas:

431

Você pode usar dd.

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

onde <?><?>houver uma letra seguida de um número, procure-a executando lsblk.

Será algo como

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 

Eu desmontaria sdb1.

Em seguida, a seguir (este é um comando destrutivo e limpa toda a unidade USB com o conteúdo do iso, tenha cuidado):

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

onde input.isoestá o arquivo de entrada e /dev/sd<?>o dispositivo USB no qual você está gravando (execute lsblkpara ver todas as unidades para descobrir o que <?>é o seu USB).

Este método é rápido e nunca me falhou.


EDIT: para aqueles em um Mac que acabam aqui, use letras minúsculas para bs=4m:

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

EDIT: Se a unidade USB não inicializar (isso aconteceu comigo), é porque o destino é uma partição específica na unidade, e não na unidade. Portanto, o destino precisa ser / dev / sdc e não dev / sdc. <?>Para mim, era / dev / sdb.

Referência: https://superuser.com/a/407327 e https://askubuntu.com/a/579615/669976

Marc
fonte
13
isso não funciona para mim.
precisa
7
Realmente? Você tem certeza de que possui o nome de arquivo .iso correto, incluindo o caminho, e o / dev correto para a sua unidade USB? Como isso falha? Há uma mensagem de erro ou apenas falha ao inicializar? Tem certeza de que o .iso não está corrompido?
Marc
8
Você pode ter um .iso corrompido. Você já conferiu? Tem a certeza de que o .iso é realmente uma cópia de algo que é inicializável?
Marc
5
A pergunta original e a resposta mais votada é a mesma pessoa que disse que esse método não está funcionando para ele. ;-) Para mim, a resposta aprovada não está funcionando e esta funciona. :-) Voto a favor.
Drachenfels 22/03
20
Adicionar um status=progressà linha de comando também é útil para ver quanto resta da cópia superior.
Supernormal
101

Você está quase lá dd, mas está perdendo um passo.

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

onde sdXestá o seu dispositivo USB (isso pode ser verificado com lsblk).

O syncbit é importante, pois ddpode retornar antes que a operação de gravação seja concluída.

user373766
fonte
17
+1 por mencionar sync. Sem ele, você não tem idéia se o conteúdo foi realmente copiado. Além disso, se você não estiver com pressa, os md5sumdois arquivos devem ter apenas uma certeza dupla.
Dave
4
Talvez valha a pena mencionar o USB talvez precise ser (re) formatado como FAT32 sudo mkfs.msdos -F 32 /dev/sdXprimeiro?
Nemo
10
@ Nemo, é possível que isso faça a diferença? ddpara / dev / sdX substituirá qualquer sistema de arquivos existente.
Mwfearnley 8/16
5
syncé inútil aqui. Isso afeta apenas as operações do sistema de arquivos.
19616 punund
3
conv=fdatasync- gravar fisicamente os dados do arquivo de saída antes de terminar deve cuidar da sincronização, mas é bom garantir que o dispositivo seja desmontado primeiro.
precisa
98

Criando uma unidade flash USB inicializável do Ubuntu a partir do terminal

  • Coloque o ubuntu.isoarquivo em qualquer partição do disco rígido.

  • Em seguida, monte o ubuntu.isoarquivo com os comandos abaixo no terminal:

    sudo mkdir /media/iso/
    sudo mount -o loop /path/to/ubuntu.iso /media/iso
    
  • Insira sua unidade flash USB. Minha unidade é /dev/sdd. Aqui está uma captura de tela:

Captura de tela do GParted

  • Sua unidade pode ser montada automaticamente no interior /media/. Vamos supor que foi montado /media/xxx/.

  • Copie todos os arquivos da /media/iso/sua unidade flash USB montada executando o comando abaixo (certifique-se de incluir o ponto):

    cp -a /media/iso/. /media/xxx/
    
  • Em seguida, você precisa do ldlinux.sysarquivo na sua unidade flash USB para tornar o USB inicializável . Minha partição USB é /dev/sdd1; entre lsblkpara ver o que é seu. Execute os comandos abaixo:

    sudo apt-get install syslinux mtools
    sudo syslinux -s /dev/sdd1
    
  • Navegue para a /media/xxxpasta mount e renomeie o isolinuxdiretório para syslinux. Em seguida, vá para a pasta renomeada e renomeie o arquivo isolinux.cfgpara syslinux.cfg.

  • Reinicie o seu PC e altere a ordem de inicialização do BIOS para permitir a inicialização a partir de uma unidade USB. Agora sua unidade flash USB Ubuntu será inicializada e você poderá instalá-la.

Este método funcionará para qualquer distribuição Linux, não apenas para o Ubuntu. Você não precisa instalar nenhum software de terceiros para criar uma unidade flash USB do Linux .

Avinash Raj
fonte
3
Eu estou tentando isso no momento, você poderia especificar o que / porque você usa: cp -a em vez de cp -r
moldovean
2
Você precisa sudodo syslinuxcomando.
Cammy_the_block #
9
Este método não funcionou para mim. O cp -a fornece: 'cp: não é possível criar um link simbólico' /media/xxx/./ubuntu ': Operação não permitida' e outras similares, uma vez que o destino é fat32. Eu tentei ignorar que ... não funcionou #
305
6
Importante notar que o USB deve ser um sistema de arquivos FAT32, caso contrário syslinux não vai funcionar
Ricardo BRGWeb
2
O console me mostra o mesmo erro que o @ sheß. Eu verifiquei o sistema de arquivos (FAT32) e sinalizei BOOT.
precisa saber é o seguinte
40

Você tem duas escolhas.

Se você deseja uma interface gráfica, use o usb-creator (está nos repositórios do ubuntu)

insira a descrição da imagem aqui

Se você deseja uma ferramenta de linha de comando, use dd

#Replace X accordingly in both commands

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

Apenas certifique-se de que /dev/sdXé a unidade flash que você deseja usar (ela destruirá os dados na unidade flash).

Veja https://help.ubuntu.com/community/Installation/FromUSBStick para obter informações adicionais.

Pantera
fonte
1
eu quero apenas ferramentas de linha de comando, não ferramenta gui (como inicialização criador disco) .De acordo com o ddmétodo, apenas 3 pastas e 1 arquivo foi criado na minha usb.While i tentar arrancar diz operating system not founderror.Files como ubninit,menu.c32,ubnpathl.txt,ubnfilel.txt,ldlinux.sysestão faltando (que são muito importante para inicializar o ubuntu usb ao vivo).
Avinash Raj
1
Eu tentei o método dd com o ubuntu.iso e funcionou! muito tempo, no entanto, para ser escrito em um USB. Eu me pergunto o que bs = 1M significa. Encontrei este site manpages.ubuntu.com/manpages/karmic/en/man1/dd.1.html . Agora eu me pergunto se alterar o valor fará com que copiar para o USB seja mais rápido? E quais são os riscos .. talvez alguém saiba.
moldovean
4
O bs é o tamanho do bloco. O dd lerá 1 MB de dados na memória e depois continuará a gravá-los no disco como um todo. Usando um tamanho de bloco muito pequeno, você terá muita sobrecarga da CPU. O uso de um tamanho de bloco muito grande pode resultar em efeitos colaterais inesperados, por exemplo, pausas mais longas sem atividade de disco e / ou grande uso de RAM. 1M ou 4M geralmente é um bom valor ao criar um disco a partir de uma ISO. Mais informações sobre tamanhos de bloco: stackoverflow.com/questions/6161823/…
ApolloLV 11/11
Eu acho que fazer um usb inicializável é algo que faço com pouca frequência, mas quando faço isso, quero que seja feito corretamente. Um tamanho de bloco menor pode levar mais tempo, mas isso é um problema? Não.
Marc
2
@ Marc - O único problema é a velocidade, um tamanho de bloco menor não é mais ou menos propenso a erros, em seguida, um tamanho de bloco maior e, portanto, um tamanho de bloco menor! = "Feito corretamente". Feito corretamente, significa verificar o md5sum do iso e confirmar o md5sum da imagem escrita. Depois de confirmar os m5dsums, você sabe que foi feito corretamente.
Pantera
28

Primeiro, desmonte o dispositivo USB e use-o lsblkpara verificar o dispositivo.

Às vezes (arquivos iso geralmente mais antigos), o dd não é suficiente e o pendrive não inicializa. Nesse caso, você pode precisar instalar o syslinux:

sudo apt-get install syslinux

e, em seguida, execute os seguintes comandos:

sudo mkfs -t vfat -I /dev/sdX

Você deseja executar esse último comando para /dev/sdXe não /dev/sdX1 .

Em seguida, continue com os seguintes comandos:

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

ou, para ver o progresso da gravação da imagem:

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

ou, em vez de dd, você pode usar cat:

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

Lembre-se de emitir o comando sync para liberar o cache de gravação

sync

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

mchid
fonte
Eu preciso mencionar que, para mim, todo o resto falhou, mas isso funcionou - optei pelo catcomando.
Digital Dracula
Para aqueles que insistem que ddbasta, eu também precisava disso para funcionar.
GuiRitter #
Se você quiser uma ferramenta que use ddquando o ISO for híbrido e monte, copie o arquivo ISO e instale o SYSLINUX quando o ISO não for, use-o bootiso.
Jules Randolph
1
Você pode explicar o que cada um desses comandos realmente faz? qual é o objetivo de criar um sistema de arquivos vfat no dispositivo e depois substituí-lo imediatamente pelo conteúdo do arquivo iso? O que isohybridrealmente faz? isso modifica o ISO de alguma forma?
Cheshirekow #
10

Se por "terceiro" você quer dizer "gui", sugiro um script leve chamado bootiso após a resposta Avinash Raj , porque ddnem sempre funciona. A grande vantagem é que é muito seguro (executa muitas verificações de segurança para não mexer com o sistema), fácil de instalar e portátil.

Além disso, bootisoinspecionará o arquivo ISO para escolher entre dois modos: image-copy ( dd) quando o arquivo ISO for híbrido, compatível com USB. E o modo mount-rsync quando o arquivo ISO não é híbrido; nesse caso, um carregador de inicialização SYSLINUX será instalado automaticamente se suportado [ mais detalhes sobre o comportamento automático ].

Como usá-lo

Primeira opção, basta fornecer o ISO como primeiro argumento e você será solicitado a selecionar uma unidade em uma lista extraída de lsblk:

bootiso myfile.iso

Ou forneça explicitamente o dispositivo USB:

bootiso -d /dev/sde myfile.iso

Instalação rápida

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

Veja em ação:

Jules Randolph
fonte
1
Eu concordo, este é um script muito bom que tira os pedaços assustadores do processo. Mais detalhes aqui: tecmint.com/create-bootable-usb-in-linux-commandline
kr37
Ele ainda suporta o Windows 10 de outubro de 2018, pois suporta "wim splitting" o arquivo "install.wim" (usando o comando "wimlib-imagex") que é> 4Gb e não pode ser armazenado no FAT32.
mevdschee 20/02
7
$ dd if=ubuntu-14.04.1-desktop-amd64.iso of=/dev/sdX bs=1MB

Não use o caminho para bits.

  1. Use o cdcomando para chegar à pasta que contém o arquivo .iso
  2. use o comando dd if=FILE NAME HERE.iso of=/dev/sdX bs=1MB
  3. Aguarde até a saída do console se parecer com isso:

    1028+1 records in
    1028+1 records out
    1028653056 bytes (1.0 GB) copied, 55.4844 s, 18.5 MB/s
    
  4. Inicialize a partir do usb.

Nota: Certifique-se de escrever no dispositivo correto em que nem sempre um USB será montado: dev/sdXonde X pode ser qualquer letra.

Alexander Stamos
fonte
2
qual é o significado de bs = 1MB no comando dd ???
juggernauthk108
1
@ juggernaut1996 none. É o tamanho do bloco a ser usado ao copiar. Como nenhum argumento de contagem foi fornecido, ele copiará toda a entrada em blocos de 1 MB. Pode ser removido.
sjbx
O "Não use o caminho para o bit" é uma desinformação. O processo em si não cria os componentes do caminho na imagem copiada em nenhuma etapa, portanto, é irrelevante se você navegar para o diretório que contém a imagem ISO ou apenas fornecer o caminho completo. Além disso, o dd também pode aceitar a entrada do stdin, então você pode simplesmente inserir dois dd um no outro para garantir que nenhum caminho seja inserido na imagem.
Gabor Garami
Isso funcionará apenas para ISOs híbridos, que atendem a boa maioria dos casos hoje em dia, mas há exceções visíveis, como o UltimateBootCD. Use em bootisovez disso.
Jules Randolph
-5

Tente isso e nunca mais falhou comigo por mais de 100 vezes:

Formate o cartão:

$ sudo mkfs.vfat -F32 /dev/sdx

Monte a imagem ISO:

$ sudo mount ubuntu.iso /mnt

Copie o conteúdo para o cartão:

$ sudo cp -rvf /mnt/* /SD_CardMountPoint

Então:

  • renomear isolinuxpasta parasyslinux
  • renomeie syslinux/isolinux.cfgparasyslinux/syslinux.cfg
  • renomeie syslinux/isolinux.binparasyslinux/syslinux.bin
  • corre syslinux -s /dev/sdx
Nooty
fonte
4
-1. Você ainda testou isso? sudo cp -rvf /mnt/* /dev/sdxnão funcionará (ou pelo menos não fará o que você pretende). Você não copia arquivos para um dispositivo bruto ( /dev/). Em vez disso, você deve montar o cartão e copiar o conteúdo do arquivo ISO para o cartão (ponto de montagem para ponto de montagem). E o que há de errado com a atual resposta aceita, que tem a mesma abordagem.
gertvdijk