¿Cómo crear un USB de arranque desde un ISO de arranque con la línea de comando en Linux?

50

Tengo un CD creado a partir de un archivo ISO que utilizo para instalar una versión personalizada de Ubuntu a través de plop linux.

El CD funciona bien, pero me gustaría usar una unidad USB de arranque en su lugar. Usé el comando dd para intentar crear el USB de arranque:

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

Ahora esto copia los archivos y hace que el USB sea de arranque, pero aparece el error "Falta el sistema operativo"

¿Algunas ideas?

xsdf
fuente
¿Solo tienes acceso a la línea de comando? Hay interfaces como Unetbootin que funcionan muy bien y se ejecutan en Linux ..
tablero de instrumentos
3
@dashboard Preferiría la línea de comandos porque está disponible en todas las máquinas Linux.
xsdf
askubuntu.com/questions/116942/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
@dashboard: las herramientas GUI nunca parecen funcionar bien para mí, y esto ha sido siempre cierto durante muchos años. Estoy feliz de saber el método de línea de comando. Lo encuentro más fácil y más confiable. ¡Es mucho menos frustrante!
MountainX

Respuestas:

58

Ok, después de un poco de investigación, he descubierto una solución, y la analizaré paso a paso. El problema era doble.

  1. Conecte la unidad flash USB y determine el dispositivo en el que está montado con el comando:

    sudo fdisk -l
    

    Esta vez fue / dev / sdc1 para mí, así que lo usaré como mi ejemplo.

  2. Desmontar el dispositivo

    umount /dev/sdc1
    
  3. No estoy seguro si es necesario, pero formateé la unidad en FAT32, por si acaso

    sudo mkdosfs -n 'USB-Drive-Name' -I /dev/sdc -F 32
    
  4. Ahora mi ISO estaba usando isolinux no syslinux. Sabía que funcionaba con CD, así que descubrí que necesitaba llamar al comando isohíbrido, que permite que el BIOS reconozca un ISO desde un disco duro.

     isohybrid filename.iso
    

    Puede encontrar más información sobre este comando aquí , pero esta fue la causa del mensaje "Falta el sistema operativo". El primer problema se solucionó, pero ahora decía que "isolinux.bin faltaba o estaba dañado".

  5. El siguiente paso es copiar la iso. Mi segundo problema estaba aquí, donde estaba copiando a la partición, sdc1, no al dispositivo, sdc.

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

    Esto parece funcionar bien, pero en el foro donde obtuve la última solución, se recomendó hacer lo siguiente antes de desconectar el dispositivo:

    sync
    sudo eject /dev/sdc
    
xsdf
fuente
3
Aquí hay una manera de verificar el progreso de dd: unix.stackexchange.com/a/11264/13011 .
Nikos Alexandris
3
Suponiendo aquí, creo que el mkdosfscomando puede no ser necesario, ya que la iso ya tiene un sistema de archivos ubicado (probablemente incluyendo un MBR, no estoy seguro) que se copia al comienzo del dispositivo de bloque. Hombre, isohybrides un comando genial, ¡no lo sabía!
Ehtesh Choudhury
1
para la instalación de arranque de Windows 7 USB, también vea superuser.com/questions/256869/…
cwd
77
El paso 3 es innecesario; El ddcomando en el paso 5 borrará el sistema de archivos recién creado con el contenido de la ISO.
ewhac
Estoy cerca de 12 horas buscando este mismo problema hasta que encuentre su publicación aquí y lo seguí y paso y ... ¡funcionó! (el paso 5 también fue mi problema, protodavía no estoy en Linux, así que gracias)
Ismael
3

Este es un problema común con las memorias USB SanDisk, o las memorias no formateadas en FAT32.

Si no es ninguno de los dos, sin duda es un problema con su orden de partición de memoria o el archivo syslinux.cfg.

Shouvik Sayef
fuente
La unidad flash USB es de Verbatim. Volví a formatear en FAT32 solo para estar seguro y todavía recibí el mismo error.
xsdf
1

isohybridPuede que no siempre funcione. Por ejemplo, tenía un .iso con FreeDOS y isohybrid no pudo encontrar algunos archivos importantes allí (no sé si deberían haber sido colocados allí por syslinux, que también usé, o cualquier otra cosa). Propongo varias alternativas aquí.

1) Instale otro gestor de arranque allí, como GRUB. Se explica aquí :

"Suponga que la primera partición de su memoria USB es FAT32 y su partición es / dev / sdy1" (tenía grub2en mi Fedora Core, así que cambié un poco los 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) FreeDOS wiki ofrece un método compuesto con GRUB y syslinux aquí (aunque no entiendo cómo se lanzaron grub>, no pude arrancar desde el usb hasta esa etapa).

3) Aquí hay una publicación que puede ser útil: dice 'Mientras los archivos command.com, kernel.sys, syslinux.cfg, ldlinux.sys y fat32lba.bss estén en la raíz de la unidad y el MBR y arranque sector no se reescriben la unidad debe seguir siendo de arranque.

4) Aquí se explica cómo generar un archivo .iso de arranque con un gestor de arranque syslinux. Ni siquiera usan isohíbridos. Desafortunadamente eso no me ayudó (tal vez por syslinux).

5 *) Utilice un programa de Windows a través de wine. Intenté rufus, sin embargo, eso no funcionó, no pudo encontrar el dispositivo.

Te advierto que desafortunadamente no pude resolver este problema, mi dispositivo no se pudo arrancar, pero espero que esto pueda ser útil para otras personas (también para aquellos que desean instalar no un linux en el usb). Aunque la imagen usb generada por chtaube funcionó para mí, creo que estos métodos son correctos.

UPD: El tercer método realmente funciona (con una corrección para un archivo de instalación personalizado).

UPD2: (enlaces fijos). El problema con isohybridfue probablemente porque las versiones de isolinux.bin en iso y mi sistema eran diferentes. Recompilé la iso usando genisoimagecomo se sugiere aquí :

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

También hubo algunos problemas, se resolvieron mediante el método aquí antes de la genisoimagen:

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

== fin UPD2 ==

Yaroslav Nikitenko
fuente
2do: freedos.sourceforge.net/wiki/index.php/USB#Linux_2 Puede agregar estos enlaces a la publicación si el sistema confía en usted más que en mí. StackOverflow ya me conoce bien, entonces ¿por qué tal problema en el superusuario? También tuve problemas para publicar esto, no me mostró que mi respuesta ya estaba publicada.
Yaroslav Nikitenko
Parece que el superusuario cuenta los enlaces por sus referencias, es decir, si enlace dos veces a un mismo recurso, se cuenta. Esto parece ser un error. Una solución en UPD vino de spiderbird.com/tag/fat32lba-bss
Yaroslav Nikitenko el
Todos los enlaces en los comentarios corregidos. Los dejo aquí para mostrar cuántos problemas trae esta política.
Yaroslav Nikitenko
0

Podría usar la bootisoutilidad , que hace exactamente eso, de forma segura:

bootiso -d /dev/sdb filename.iso

bootiso verificará que el dispositivo seleccionado /dev/sdbesté conectado a través de USB y falle si no lo hace, lo cual es una gran ventaja de seguridad. También detectará automáticamente el dispositivo USB si hay exactamente una unidad USB conectada a su sistema. Véalo en acción:

Si desea instalar el gestor de arranque syslinux para sortear los problemas mencionados por @xsdf, use la -bopción:

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

Para instalarlo:

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