Como criar um USB inicializável a partir de um ISO inicializável com a linha de comando no Linux?

50

Eu tenho um CD que é criado a partir de um arquivo ISO que eu uso para instalar uma versão personalizada do Ubuntu via plop linux.

O cd funciona bem, mas eu gostaria de usar uma unidade USB inicializável. Eu usei o comando dd para tentar criar o USB inicializável:

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

Agora isso copia os arquivos e torna o USB inicializável, mas eu recebo o erro "Sistema operacional ausente"

Alguma idéia?

    
por xsdf 03.05.2013 / 22:11

4 respostas

57

Ok, depois de algumas pesquisas, descobri uma solução e passo a passo. Problema foi duplo.

  1. Conecte a unidade flash USB e determine o dispositivo com o comando:

    sudo fdisk -l
    

    Desta vez foi / dev / sdc1 para mim, então vou usar isso como meu exemplo.

  2. Umount do dispositivo

    umount /dev/sdc1
    
  3. Não tenho certeza se necessário, mas formatei a unidade em FAT32, apenas no caso de

    sudo mkdosfs -n 'USB-Drive-Name' -I /dev/sdc -F 32
    
  4. Agora meu ISO estava usando o isolinux e não o syslinux. Eu sabia que funcionava com CDs, então descobri que precisava chamar o comando isohybrid, que permite que um ISO seja reconhecido pelo BIOS a partir de um disco rígido.

     isohybrid filename.iso
    

    Você pode descobrir mais sobre esse comando aqui , mas esta foi a causa da mensagem "Sistema operacional ausente" O primeiro problema foi corrigido, mas agora ele dizia "isolinux.bin estava ausente ou corrompido"

  5. O próximo passo é copiar o iso. Meu segundo problema estava aqui, onde eu estava copiando para a partição, sdc1, não o dispositivo, sdc.

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

    Isso parece funcionar muito bem, mas o fórum em que recebi a última correção recomendou que você fizesse o seguinte antes de desconectar o dispositivo:

    sync
    sudo eject /dev/sdc
    
por 07.05.2013 / 18:46
3

Este é um problema comum com os pen drives USB da SanDisk ou com os sticks não formatados em FAT32.

Se nenhum desses é certamente um problema com sua ordem de partição do stick ou com o arquivo syslinux.cfg.

    
por 03.05.2013 / 22:25
1

isohybrid nem sempre funciona. Por exemplo, eu tinha um .iso com FreeDOS e o isohybrid não conseguia encontrar alguns arquivos importantes lá (não sei se eles deveriam ter sido colocados lá pelo syslinux, que eu usei também, ou qualquer outra coisa). Eu proponho várias alternativas aqui.

1) Instale outro bootloader como o GRUB. É explicado aqui :

"Suponha que a primeira partição do seu dispositivo USB seja FAT32 e sua partição seja / dev / sdy1" (Eu tinha grub2 no meu Fedora Core, então alterei um pouco os comandos):

# 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) O wiki do FreeDOS oferece um método composto com o GRUB e o syslinux aqui (embora eu não não entendi como eles lançaram grub> - não consegui inicializar do usb até esse estágio).

3) Aqui é um post que pode ser útil - diz 'Contanto que os arquivos command.com, kernel.sys, syslinux.cfg, ldlinux.sys e fat32lba.bss estejam na raiz da unidade e o MBR e o setor de inicialização não sejam reescritos drive deve permanecer inicializável. '

4) Aqui é explicado como gerar um inicializável. arquivo iso com um gerenciador de inicialização syslinux. Eles nem usam isohybrid. Infelizmente isso não me ajudou (talvez por causa do syslinux).

5 *) Use um programa do windows via wine . Eu tentei rufus, no entanto, isso não funcionou, não foi possível encontrar o dispositivo.

Eu aviso que infelizmente não consegui resolver este problema, meu dispositivo não pôde ser inicializado, mas espero que isso possa ser útil para outras pessoas (também para aqueles que não querem instalar um linux no usb). A imagem usb gerada pelo chtaube, embora funcionou para mim, então acho que esses métodos estão corretos.

UPD: O terceiro método realmente funciona (com uma correção para um arquivo de instalação personalizado).

UPD2: (links fixos). O problema com isohybrid foi provavelmente porque as versões do isolinux.bin no iso e meu sistema eram diferentes. Recompilou o iso usando genisoimage como sugerido aqui :

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

Também houve alguns problemas, eles foram resolvidos pelo método aqui antes do genisoimage:

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

== end UPD2 ==

    
por 20.01.2016 / 14:42
0

Você pode usar o bootiso utility , que faz exatamente isso com segurança:

bootiso -d /dev/sdb filename.iso

O bootiso irá verificar se o dispositivo selecionado /dev/sdb está conectado via USB e falhará se não, o que é uma grande vantagem de segurança. Ele também detectará automaticamente o dispositivo USB se houver exatamente uma unidade USB conectada ao seu sistema; veja-o em ação:

Se você deseja instalar o carregador de inicialização syslinux para contornar os problemas mencionados por @xsdf, use -b option:

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

Para instalá-lo:

curl -L https://rawgit.com/jsamr/bootiso/latest/bootiso -O
chmod +x bootiso
    
por 10.04.2018 / 01:44