Quemar una ISO de Linux en un pendrive usb sin morir en el intento

Publicado por Diego Córdoba en

En este artículo aprenderemos a «quemar» una ISO de una distribución de GNU/Linux en un dispositivo extraible como una memoria USB, para poder probar o instalar la distribución.

Nota: No se ha testeado con ISO’s de otros sistemas operativos como Windows, por lo que queda a responsabilidad del lector verificar si estos métodos son compatibles con otro sistema diferentes de GNU/Linux.

isoimage

A mas de uno nos ha ocurrido que tratamos de quemar una ISO booteable en un pendrive usb, o memmory stick, o una tarjeta de memoria, y a veces corre bien, otras no, y hasta en algunas ocasiones depende de la máquina en la que vayamos a bootear el sistema operativo.

Quemar una ISO con UNetbootIn

Unetbootin es una buena alternativa, simple y gráfica, ideal para la mayoría de los mortales.

Podemos descargarlo desde https://unetbootin.github.io/ e instalarlo en nuestro sistema operativo.

quemar una iso

Algunos comandos interesantes para hacerlo por consola en Linux

* Verificar el nombre del dispositivo:

Primero que nada, debemos conectar nuestro pendrive usb en la computadora, y luego asegurarnos del nombre que le asoció el kernel al dispositivo.

Esto podemos hacerlo con los comandos:

sudo fdisk -l
[...]
Disk /dev/sdc: 7.6 GiB, 8100249600 bytes, 15820800 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x000779ea

Device     Boot Start      End  Sectors  Size Id Type
/dev/sdc1        2048 15820799 15818752  7.6G  b W95 FAT32

o

sudo parted -l
[...]
Model:  MIMOBOT (scsi)
Disk /dev/sdc: 8100MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start   End     Size    Type     File system  Flags
 1      1049kB  8100MB  8099MB  primary  fat32

o simplemente, inmediatamente luego de conectar el usb, darle una mirada a los logs del ring el kernel:

dmesg
[...]
[63563.092556] sd 5:0:0:0: [sdc] Attached SCSI removable disk
[63563.461591] FAT-fs (sdc1): utf8 is not a recommended IO charset for FAT filesystems, filesystem will be case sensitive!

* Desmontar el dispositivo:

Debemos asegurarnos de que el dispositivo conectado no fue montado automáticamente por nuestro entorno de escritorio, y si así fue, desmontarlo.

Podemos verificar si el nombre del dispositivo conectado anteriormente se encuentra montado analiando, por ejemplo, la salida del comando mount:

[...]
/dev/sdc1 on /media/diego/3ADF-3ECB type vfat (rw,nosuid,nodev,relatime,uid=1000,gid=1000,fmask=0022,dmask=0022,codepage=437,iocharset=utf8,shortname=mixed,showexec,utf8,flush,errors=remount-ro,uhelper=udisks2)

En mi caso, la partición montada es /dev/sdc1. Procedemos a desmontarla:

sudo umount /dev/sdc1

* Habilitar el modo híbrido en la iso

Este es un paso importante, más en el caso de que la iso no haya sido compilada para bootear desde cualquier dispositivo, y solamente desde cd-rom.
El modo híbrido permite que la iso pueda ser booteada desde cualquier dispositivo, incluyendo memorias flash usb. Es por esto que algunas iso’s corren bien desde usb utilizando el comando dd comúnmente (ver el siguiente paso), y otras no.
Para aseguarnos esto, debemos correr este comando:

sudo isohybrid /ruta/al/archivo/imagen.iso

Si isohybrid no está disponible, podremos instalar las utilidades de syslinux que lo incluyen. En Debian:

sudo aptitude install syslinux-utils

* Quemar una iso en la memoria usb:

En este paso copiaremos, en bajo nivel (bit a bit) la imagen de la iso al dispositivo usb, utilizando por defecto bloques de 4K de longitud.

sudo dd if=/ruta/al/archivo/imagen.iso of=/ruta/al/dispositivo bs=4k

Cabe aclarar que el dispositivo NO es el nombre de una partición primaria, sino del dispositivo completo. En mi caso, por ejemplo, el dispositivo es /dev/sdc, mientras que la partición montada anteriormente en forma automática fue /dev/sdc1. En el comando dd debemos colocar, en este caso, /dev/sdc.

También se puede agregar la opción «status=progress» para que dd muestre las estadísticas de progreso de los datos copiados. En la update más abajo explico otra forma de mostrar el avance de copiado ya que, al momento de escribir este post, el modificador «status» en dd no estaba implementado en todas las versiones.

* Extrayendo el dispositivo:

Por último, procedemos a extraer de forma segura el dispositivo. Primero debemos volcar en él cualquier resto de información en los buffers al dispositivo, para que sus datos no queden corruptos.
Luego «desconectamos» por software el dispositivo, y podemos quitarlo del puerto usb:

sync
sudo eject /dev/sdc

Espero les sirva como a mi!


UPDATE (20171205):

Esta update se la agradezco a Pablo Rubio, un amigo y colaborador del GRuSoL (Grupo de Usuarios de Software Libre de San Rafael).

Me compartió un interesante «truco» de terminal, de la mano del comando pv, para poder quemar la iso en cualquier dispositivo, y además, ver el progreso de la copia (algo muy interesante para saber si la copia va realizándose, o se ha colgado, etc.

Al comando dd anterior, podemos reescribirlo de esta manera:

dd if=/ruta/al/archivo/imagen.iso | pv -tpreb -s <TAMAÑO>M | sudo dd of=/ruta/al/dispositivo bs=4k

Donde TAMAÑO es el tamaño de la iso a quemar, y dato que utiliza pv para «saber» cómo llevar el avance del progreso.

Las opciones utilizadas, tpreb, tienen el siguiente significado:

  • -p: Mostrar el progreso.
  • -t: Muestra el timer de tiempo que lleva de proceso.
  • -r: Muestra el ratio de transferencia.
  • -e: Muestra el ETA, tiempo estimado de copia.
  • -b: Muestra el contador de bytes transferidos.

Aquí una captura de ejemplo:

Para quien no lo tenga instalado, pv puede instalarse en distros Debian con:

apt install pv

O en ArchLinux:

pacman -S pv

Hasta la próxima!


¿Preguntas? ¿Comentarios?

Si tenés dudas, o querés dejarnos tus comentarios y consultas, sumate al grupo de Telegram de la comunidad JuncoTIC!
¡Te esperamos!


Diego Córdoba

- Ingeniero en Informática - Mg. Teleinformática - Tesis pendiente - Docente universitario - Investigador

4 comentarios

Javier · 26 mayo, 2016 a las 19:52

Muy bueno y útil el artículo Diego, nunca falta la oportunidad de querer generan una iso en un dispositivo extraible.

    Diego Córdoba · 27 mayo, 2016 a las 13:50

    Gracias por comentar Javier! Si, yo tuve muchos problemas con aplicaciones, a veces andaban, otras no, y de esta forma siempre que he querido quemar la iso en un usb salió bien 🙂

Gabrielix · 10 diciembre, 2017 a las 00:48

Hola Diego si te queres evitar el comando pv, podes usar solo dd. Asi dd if=imagen.iso of=/dev/device bs=1M status=progress. Muy bueno el blog.

    Diego Cordoba - @d1cor · 11 diciembre, 2017 a las 12:33

    EXCELENTE!!! Ya lo estuve probando y va genial, no conocía esa opción. Gracias @Gabrielix por el aporte!! Saludos!

Los comentarios están cerrados.