Raspberry Pi 3: Arrancar desde USB (II)

Como ya dijimos en un post anterior, la Raspberry Pi tiene un problema que arrastra (aunque cada vez menos) desde su primera versión: La facilidad de corromper las tarjetas SD o MicroSD.

Un corte de corriente, un reinicio o un bloqueo puede hacer que en el peor de los casos perdamos todo nuestro trabajo en un momento. Es por eso que la posibilidad de que se arranque por USB (que suelen ser más resistentes) es para nosotros un gran avance en lo que a estabilidad y seguridad se refiere.

En el otro tutorial se complicaba mucho a partir de los pasos en los que transferíamos nuestros datos de la MicroSD al USB, pero eso ha cambiado drásticamente desde la versión de Raspbian que salió el 10/04/2017… donde únicamente es necesario grabar la imagen en el USB para que arranque!

Gracias a este tutorial vamos a resolver este problema y a dar un poco más de vida a nuestro querido mini-pc, reproductor multimedia, consola retro, etc…

Cosas que vamos a necesitar

  • Una Raspberry Pi 3b o 3 b+ y todos sus cables para conectarla a una TV. Es recomendable una fuente de alimentación de, al menos, 2,5 mA (mejor una de 3mA).
  • Una tarjeta MicroSD de al menos 8GB de capacidad, formateada en FAT32. Nosotros vamos a utilizar una MicroSD Samsung de 16 Gigas UHC 1.
  • Una memoria USB de al menos 8GB de capacidad, formateado ya que se borrarán los datos más adelante. Nosotros utilizaremos un SANDISK Cruzer Micro de 32 Gb.
  • La imagen de Raspbian Stretch (con escritorio o lite) o superior que se puede descargar de aquí.
  • Win32DiskImager si estás en Windows, o dd si trabajas en Linux/Mac. También se puede usar Etcher.
  • El proceso requiere conocimientos de la línea de comando de Linux, aunque copiando y pegando las instrucciones de este tutorial conseguiremos un arranque 100% funcional.

Consideraciones previas

  • Lee todos los pasos atentamente.
  • No te dejes ninguna línea sin escribir, exactamente en el mismo orden que el que las escribimos.
  • No nos hacemos responsables de los daños que podáis causar a la Raspberry, la MicroSD o el USB si no seguís de manera exacta. Realmente no es posible hacer un daño mucho que no necesite más que un formateo, pero lo avisamos igual.
  • Cualquier duda que tengáis la podéis escribir en los comentarios del Post, intentaremos solventarla lo antes posible.
  • IMPORTANTE: Este tutorial sólo funciona para la Raspberry Pi 3b o 3b+.
  • Por lo que hemos podido leer, no funcionan todas las memorias USB. Por favor, comentad si os ha funcionado y el modelo con el que lo habéis probado.

Programar el modo de arranque USB

Instalar Raspbian en la MicroSD

Desde un PC/MAC, instala la imagen de Raspbian en la MicroSD (mediante Win32DiskImager, Etcher o dd según el Sistema Operativo). Recomendamos en este paso usar la versión LITE, ya que es menos pesada y sólo la vamos a usar para ejecutar los comandos necesarios.

Inserta la MicroSD que acabas de preparar en la Raspberry y arráncala. Cuando haya pasado todo el proceso de arranque, si estás en un entorno gráfico abre una consola para escribir las siguientes instrucciones.

Preparar el arranque

Prepararemos el directorio /boot con con los ficheros del arranque experimental. Para ello, seleccionaremos la rama “next” del paquete rpi-update.

Como paso previo, si la imagen que hemos descargado es la Raspbian Lite, necesitaremos antes instalar los paquetes de rpi-update:

$ sudo apt-get update; sudo apt-get install rpi-update
Activar el modo de arranque USB

Activaremos el USB boot mode con este código, que lo que hace es añadir el parámetro program_usb_boot_mode=1 al final de fichero /boot/config.txt, que modifica el flag de la memoria OTP para indicar que se habilita el USB boot mode:

$ echo program_usb_boot_mode=1 | sudo tee -a /boot/config.txt

Reinicia entonces la Raspberry Pi con:

$ sudo reboot

Una vez reiniciada, comprueba que el flag de la memoria OTP ha sido modificadao correctamente con la siguiente instrucción:

$ vcgencmd otp_dump | grep 17:

Esto debería responder el siguiente valor (nos aseguramos que de este valor o es que algo hemos hecho mal):

17:3020000a

NOTA: Modificar la memoria OTP (One Time Programmable memory) para habilitar estos nuevos modos de arranque no es reversible; pero no sufras, podrás seguir arrancando con normalidad por MicroSD si utilizas la Raspberry Pi para más de una cosa, incluso si decides no seguir arrancando por USB (un USB con Raspbian, una MicroSD con Retropie, otra MicroSD con OSMC, etc…). Únicamente estamos activando un flag que le dice al firmware que puede usar esos modos de arranque, no que obligatoriamente vamos a arrancar con USB.

Ahora ya podemos modificar de nuevo el fichero config.txt para poder utilizar la MicroSD en otra Raspberry sin que se intente marcar el flag de la memoria OTP al iniciar. Tendremos por tanto que eliminar o comentar (añadiendo al principio el carácter #) la línea de configuración con el parámetro program_usb_boot_mode=1 prestando especial atención en no dejar ningún espacio ni carácter extraño al eliminarla. Se puede hacer extrayendo la MicroSD y editándola desde Windows, Mac, etc. o en la propia Raspberry con el comando (requiere conocimientos):

$ sudo nano /boot/config.txt
Instalar Raspbian en el USB

Desde un PC/MAC, instala la imagen de Raspbian (desktop o lite) en el USB (mediante Win32DiskImager, Etcher o dd según el Sistema Operativo).

Con la Raspberry Pi apagada, desconectamos la fuente de alimentación, sacamos la tarjeta MicroSD, introducimos la memoria USB y volvemos a reconectar la fuente de alimentación… si todo ha ido bien, tendremos un arranque desde la memoria USB completamente funcional. Enhorabuena!

Esperamos que os haya gustado el tutorial.

Un pensamiento sobre “Raspberry Pi 3: Arrancar desde USB (II)

  1. Pingback: Raspberry PI 3: Arrancar desde USB - eXpert Designs

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.


Fatal error: Uncaught exception 'Exception' with message 'Piwik and/or some plugins have been upgraded to a new version. --> Please run the update process first. See documentation: https://matomo.org/docs/update/ ' in /mounted-storage/home15c/sub003/sc13389-PNRP/www/stats/plugins/CoreUpdater/CoreUpdater.php:76 Stack trace: #0 [internal function]: Piwik\Plugins\CoreUpdater\CoreUpdater->dispatch() #1 /mounted-storage/home15c/sub003/sc13389-PNRP/www/stats/core/EventDispatcher.php(141): call_user_func_array(Array, Array) #2 /mounted-storage/home15c/sub003/sc13389-PNRP/www/stats/core/Piwik.php(780): Piwik\EventDispatcher->postEvent('Request.dispatc...', Array, false, NULL) #3 /mounted-storage/home15c/sub003/sc13389-PNRP/www/stats/core/FrontController.php(345): Piwik\Piwik::postEvent('Request.dispatc...') #4 /mounted-storage/home15c/sub003/sc13389-PNRP/www/blog/wp-content/plugins/wp-piwik/classes/WP_Piwik/Request/Php.php(38): Piwik\FrontController->init() #5 /mounted-storage/home15c/sub003/sc13389-PNRP/www/blog/wp-content/plu in /mounted-storage/home15c/sub003/sc13389-PNRP/www/stats/plugins/CoreUpdater/CoreUpdater.php on line 76