¿Cómo puedo hacer un pendrive o tarjeta flash booteable desde un ISO en Ubuntu?

Al asumir su primera presidencia el 4 de junio de 1946, Juan Perón pronuncia un sonado discurso en el que reivindica las necesidades políticas de cambio en la Argentina, y enseña cómo crear un pendrive arrancable a partir de una imagen ISO Live desde la Terminal en Ubuntu.


(...)
"El esplendoroso pronunciamiento del pueblo me autoriza a pedir y me mueve a esperar la colaboración de todos. La pido con la sinceridad y la humildad compatible con la dignidad con que un gobernante puede pedir para el bien de la Nación. No me guían intenciones ocultas; no hay, ni jamás ha existido, doblez en mis palabras; nada desvía ni empaña la trayectoria de mis convicciones. Llamo a todos al trabajo que la Patria tiene derecho a esperar de cada uno. Quienes quieran oír que oigan; quienes quieran seguir que sigan. Mi empresa es alta y clara mi divisa; mi causa es la causa del pueblo; mi guía es la bandera de la Patria.
Al ocupar la primera magistratura de la República, quedan borradas las injusticias de que he sido objeto y los agravios que se me hayan podido inferir. De mi voluntad, de mi mente y de corazón han desaparecido las pasiones combativas y sólo pido a Dios que me conceda la serenidad que requieren los actos de gobierno. Por ello, creo tener derecho a recabar de todos que juzguen mis actos y los de mi gobierno con igual imparcialidad. En definitiva, no aspiro a otra cosa sino al reconocimiento público –ya obtenido electoralmente– de que en todo momento, con paso firme y desoyendo a menudo capciosos cantos de sirena, encaminé al país hacia el completo restablecimiento de nuestras normas institucionales democráticas; y de que mi labor pretérita y mi labor futura se ha
inspirado y se ha de inspirar en la defensa del bien público. Si consigo esto, me daré por suficientemente compensado de las amarguras, de la heridas, de los desgarrones que todo hombre público va dejando a través de su vida en las zarzas del camino. Y no creáis que por ello guarde rencor porque, al igual que un insigne ingenio de nuestra América, “si una espina me hiere, la aparto del
camino, pero no la aborrezco”.

La objetividad de mi posición para con todos y cada uno de los ciudadanos y de los partidos políticos, no ha de representar un obstáculo para que mi gobierno se oriente en el sentido de mis antecedentes. Hacer otra cosa, sería traicionar a la mayoría de los electores. En los regímenes republicanos de tipo presidencialista, inversamente a lo que sucede en otros, el presidente no es
un mero poder moderador sino que desempeña el propio Poder Ejecutivo de la Nación, que ha de ejercer como emanación de la voluntad general. Es decir: para ser fiel a sus antecedentes y a la consagración popular, el presidente de la Nación Argentina, ha de llevar a buen termino “su política”, orientándola hacia el bienestar de todos los argentinos.

Mi política es la de dar a todos los Argentinos el software libre que tanto anhelan. Normalmente, ello no constituye gran problema, pues podremos armar CDs o DVDs arrancables de distintas distribuciones GNU descargando de Internet las imágenes en formato normalizado (ISO), y usando una grabadora de discos compactos para lograr nuestra copia. Luego podríamos utilizar el disco compacto para arrancar el instalador del sistema operativo, o directamente probarlo sin instalar (modo vivo o "live").

Naturalmente, en varias ocasiones esto deja de ser práctico. Cada disco compacto permite una única imagen, y por otro lado necesitamos un sistema que cuente con una lectora de CD/DVD para poder grabarla. A veces puede resultarnos eficiente un DVD-RW (regrabable), pero ineludiblemente necesitaríamos contar con una grabadora.

Por todo ello, el método que considero más práctico para hacernos con imágenes arrancables, es almacenarlas en un Pendrive, pues al ser un medio de almacenamiento conformado por memoria Flash, podremos reescribirlo fácilmente para cargarles otra imagen ISO, amén de poder arrancarse fácilmente en todo tipo de equipo (por ejemplo, equipos próximos a la obsolescencia).

Para grabar la imagen ISO en un Pendrive, se pueden emplear programas de interfaz gráfica especialmente preparados para tal menester (en Ubuntu lo activamos uno desde Sistema / Administración / Creador de discos de arranque).

Ahora bien ¿qué sucede si deseo hacer el mismo predicamento desde la Terminal Linux?

Para ello no usaremos el conocido comando cp (copiar) sino que es imprescindible usar el viejo y peludo dd. Esta poderosa utilidad nos permite convertir entre distintos tipos de ficheros y esquemas. 

El comando de organización a utilizar tendrá la siguiente sintaxis:

sudo dd if=archivo.iso of=dispositivo_de_almacenamiento bs=4M; sync

Un ejemplo suele aclararlo todo, como decía Napoleón.

Vean señores, dispongo de un viejo y peronista pendrive de tan sólo 512 MB (medio giga), y por tanto obsoleto para la mayoría de los usos. Antes de "tirar un viejo por la ventana" mas vale darle nueva vida como medio de arranque USB para un sistema operativo GNU con Linux. A dicho pendrive le incorporaremos Puppy Linux Ubuntu Tahr, de 32 bits. Dicha distribución nos permitirá contar con un sistema operativo completo de tamaño reducido (Puppy requiere apenas 235MB, por lo que cabe en el viejo pendrive). Por lo demás, Puppy es capaz de arrancar en equipos escasa potencia (por ejemplo, netbooks con 1GB de memoria RAM). Naturalmente, podríamos usar cualquier ISO arrancable que deseemos, en este caso usaremos Puppy Linux a modo de ejemplo.

En primer lugar descargamos la ISO deseada. Desde la Terminal, podríamos hacernos con la ISO de Puppy Linux abriendo una consola con Ctrl+Alt+T e ingresando los siguientes Comandos de Organización:

cd ~/Descargas/ ;
wget http://distro.ibiblio.org/puppylinux/puppy-tahr/iso/tahrpup%20-6.0-CE/tahr-6.0.5_PAE.iso ;

Mientras se descarga el fichero tahr-6.0.5_PAE.iso, podremos abrir una segunda terminal con Ctrl+Alt+T y aprovechar el tiempo para identificar fehacientemente cuál nomenclatura de dispositivo que nuestro sistema asigna al Pendrive que queremos utilizar. Esta información es relativamente sencilla de obtener, pero es de capital importancia, pues si no la conocemos con exactitud, podríamos sobreescribir los datos en un dispositivo de almacenamiento diferente al deseado con consecuencias catastróficas (por ejemplo, sobrescribir el sector de arranque de nuestro disco rígido).

Para conocer la nomenclatura con el cual nuestro GNU con Linux designa nuestros medios de almacenamiento, debemos conectarlo (normalmente, a través de un puerto USB, pero también podríamos usar un lector de tarjetas si estamos utilizando tarjetas de memoria Flash). 
Acto seguido, usaremos el comando fdisk y le ordenaremos un listado de dispositivos de almacenamiento. La orden sería la siguiente:

sudo fdisk -l

A ella el sistema nos devolverá un listado bien detallado de los discos y sus particiones (aquellos internos y los conectados por USB). En nuestro sistema de ejemplo existen dos discos: el disco nomenclado como /dev/sda es un disco SSD de 120 GB (o sea, 111,8 Gigabytes luego de ser formateado), mientras que el /dev/sdb es un disco rígido de 1TB (931,5 Gigabytes luego de ser formateado). Pero también se hace presente nuestro pendrive de 512 MB, nomenclado como /dev/sdc (de apenas 488 Megabytes luego de ser formateado).

Disco /dev/sda: 111,8 GiB, 120 GB, 234441648 sectores
Unidades: sectores de 1 * 512 = 512 bytes
Tamaño de Sector (lógico/físico): 512 bytes / 512 bytes
Tamaño E/S (mínimo/óptimo): 512 bytes / 512 bytes
Tipo de Etiqueta de Disco: dos
ID de Disco: 0xyyyyyyy

Disposit. Inicio Start Final Sectores Size Id Tipo
/dev/sda1 * 2048 234440703 234438656 111,8G 83 Linux

Disco /dev/sdb: 931,5 GiB, 1000 GB,, 1953525168 sectoresUnidades: sectores de 1 * 512 = 512 bytesTamaño de Sector (lógico/físico): 512 bytes / 4096 bytesTamaño E/S (mínimo/óptimo): 4096 bytes / 4096 bytesTipo de Etiqueta de Disco: dosID de Disco: 0xzzzzzzz

Disposit. Inicio Start Final Sectores Size Id Tipo
/dev/sdb1 2048 1816408297 1816406250 866,1G 83 Linux
/dev/sdb2 1919924224 1953523711 33599488 16G 82 Intercambio Linux / Solaris

Disco /dev/sdc: 488,8 MiB, 512 MB, 1000944 sectoresUnidades: sectores de 1 * 512 = 512 bytesTamaño de Sector (lógico/físico): 512 bytes / 512 bytesTamaño E/S (mínimo/óptimo): 512 bytes / 512 bytesTipo de Etiqueta de Disco: dosID de Disco: 0xxxxxxxx

Disposit. Inicio Start Final Sectores Size Id Tipo
/dev/sdc1 2048 999423 997376 487M b W95 FAT32

Estos datos nos permiten inferir que que el dispositivo /dev/sdc de 488,8 MiB es el viejo pendrive de 512 MB. Para hacer un doble chequeo (pues podrían coincidir en el sistema varios dispositivos del mismo tamaño, o particiones que justo coincidan) usaremos también el comando:

df -l

y el sistema debería devolvernos algo como:

S.ficheros bloques de 1M Usados Disponibles Uso% Montado en
udev          7983           0         7983   0% /dev
tmpfs         1601          10         1592   1% /run
/dev/sda1   112547       52333        54475  49% /
tmpfs         8003           5         7999   1% /dev/shm
tmpfs            5           1            5   1% /run/lock
tmpfs         8003           0         8003   0% /sys/fs/cgroup
/dev/sdb1   872871      470553       357957  57% /home

tmpfs         1601           1         1601   1% /run/user/1000
/dev/sdc1      487           1          487   1% /media/peron/PENDRIVE512

...esta lista nos confirma que el dispositivo /dev/sdc es el pendrive de 512MB (y que además está vacío y montado como una subcarpeta dentro de la carpeta /media/usuario). Tomamos nota de /dev/sdc.

Como dijimos, en este ejemplo anhelamos sobrescribir en el pendrive /dev/sdc usando los datos contenidos en el archivo ISO descargada, de manera que nos quede arrancable. Según la sintaxis del comando dd, el archivo de entrada (if, o "input file") será la ISO de Puppy Linux, llamada tahr-6.0.5_PAE.iso, en tanto que el dispositivo de salida (of, "output file") será el pendrive /dev/sdc. Naturalmente, vosotros habrán de cambiar las variables por las que os correspondan en vuestro casos particulares. En nuestro ejemplo, para copiar dicha ISO al pendrive ingresamos:

cd ~/Descargas ;


sudo dd if=tahr-6.0.5_PAE.iso of=/dev/sdc bs=4M; sync 

El sistema comenzará a copiar la ISO al dispositivo. Debemos tener en cuenta que en muchas ocasiones puede suceder que el sistema nos informe que los registros han sido escritos, pero esto no significa que los datos hayan sido físicamente copiados aún. En realidad sólo significa que se ha emitido la orden de copia al dispositivo, pero sucederá que la misma todavía estará en transfiriéndose y escribiéndose en el dispositivo (si el pendrive cuenta con una luz LED, la misma indicará "escritura"). La velocidad de copiado depende puramente de la velocidad del medio de almacenamiento y los buses de transporte. En resumen, sólo debemos asumir que la escritura ha sido finalizada cuando el sistema nos devuelva al Prompt de la terminal.
Una vez finalizada la copia, podremos extraer el pendrive y volver a conectarlo para ver si el sistema lo monta (o sea, "levanta" sus datos normalmente como cualquier otro pendrive bien formateado). Si este es el caso, ya contaremos con el pendrive preparado y listo para arrancarlo con Puppy Linux derivado de Ubuntu, en cualquier computadora compatible.

Simplemente hay que reiniciar el sistema, y durante el arranque ingresar al Boot Menú, y seleccionar el pendrive como medio temporal de arranque. Al cabo de un par de minutos arrancará Puppy Linux Tahr, que es un excelente sistema operativo para contar con una sesión operativa capaz de arrancar en cualquier equipo.