Arrancar su Raspberry Pi 3 desde un USB

Por Soloelectronicos @soloelectronico

Como sin duda sabrá , todas las versiones de Raspberry Pi, por pura cuestión económica y simplicidad, instalan el sistema operativo en una tarjeta micro-SD y por lo tanto ese es el medio desde el que se inicia cualquier Rasberry Pi .
Desgraciadamente las tarjetas micro-SD , aunque son económicas y ocupan muy poco espacio, son relativamente lentas tanto en operaciones de lectura como de escritura de datos , de modo que cuando el S.O. tiene que hacerlo de forma intensiva, el sistema queda sin responder y aparentemente atascado a causa precisamente de la baja tasa de transferencia de E/S en las memorias SD.
Como vamos a ver, afortunadamente , para aumentar muy notablemente el rendimiento ( y de paso la capacidad de almacenamiento ) de la Raspberry Pi , podemos instalar la partición del sistema operativo en una memoria USB o disco duro externo, pues no es muy complicado y el aumento de rendimiento es notable.

A partir de abril de 2017 el soporte de arranque desde un dispositivo USB se ha contemplado oficialmente en el kernel del SO y por tanto es totalmente apoyado por Raspbery Pi, por lo que vamos a ver es este post rápidamente cómo arrancar una Raspberry Pi desde un almacenamiento USB, como unidad flash o disco duro USB.

Es importante destacar que hay dos opciones : que la Raspberry Pi inicie el sistema desde la tarjeta SD, por lo que aunque instalemos el sistema en un dispositivo USB, seguiremos necesitando la tarjeta SD para que contenga al menos la partición de arranque (boot) o bien que prescinda definitivamente de esta SD.

Como nota aclaratoria, el dispositivo puede ser una memoria flash pero también un disco duro de 2,5″, así que en este segundo caso, al tomar la alimentación de la propia Raspberry Pi , asegúrese que alimenta con corriente suficiente esta.

METODO QUE PRESCINDE DE LA SD

Veamos en primer lugar como prescindir de tarjeta micro- sd, aunque tenga mucho cuidado pues el método puede ser irreversible.

Primero , como siempre tendrá que descargar Rasbian , aunque este método funciona con otros sistemas operativos más recientes como OSMC desde de abril de 2017 donde se añadió oficialmente el soporte de arranque desde un dispositivo USB en el kernel del SO y por tanto es totalmente apoyado por Raspbery Pi.

Ahora vamos a necesitar el software de etcher, d el que hemos hablado en este blog , para escribir la imagen tanto en nuestra tarjeta SD, como en el dispositivo de almacenamiento USB.

Con todo el software descargado, ahora debe permitir escribir la imagen descargada tanto en la tarjeta SD como en el dispositivo de almacenamiento USB.

Si no puede detectar el dispositivo de almacenamiento USB asegúrese de comprobar la opción "inseguro" en los ajustes de etcher.

PROGRAMAR USB BOOT MODE

Una vez que ambas imágenes hayan sido escritas (tanto en la miscro-sd como en el dispositivo USN) , tendremos que insertar una línea en nuestro archivo config.txt ubicado en /boot/config.txt

Ahora agregue el final del archivo la siguiente linea en ambos dispositivos: en la sdcard y el medio de almacenamiento USB que vaya a usar:

program_usb_boot_mode=1 

Esto establecerá un bit en la memoria OTP (One Time Programmable) en el Raspberry Pi SoC que habilitará el arranque desde un dispositivo de almacenamiento masivo USB, por lo que una vez que se ha ajustado este bit, la tarjeta SD ya no será necesaria.

Tenga en cuenta que cualquier cambio que realice en la OTP es permanente y no se puede deshacer, pero usted todavía será capaz de arrancar desde la tarjeta SD si se inserta y no cambia las operaciones de su Pi.

Ahora que la parte difícil se ha completado, sólo necesitamos arrancar desde la tarjeta sd primero , y a continuación reiniciar una vez que esté completamente arrancado para asegurarse de que ha escrito el modo de arranque para el Pi.
Después de reiniciar, ahora puede quitar la tarjeta SD y conectar el dispositivo de almacenamiento USB y ya debería arrancar su Raspberry Pi.

Asegúrese eso si , de quitar el código de modo de arranque program_usb_boot_mode=1 de su tarjeta SD ubicado en el fichero /boot/config.txt cuando se completan estos pasos anteriores pues, puede si introduce nuevamente la sd por accidente puede que no arranque provocando mas problemas.

SOLUCIÓN DE PROBLEMAS

Si su Pi no arranca desde el dispositivo de almacenamiento USB, puede comprobar si el modo de arranque se ha escrito ejecutando este comando en el Pi arrancado desde SD

Asegúrese de que se muestra la salida 0x302000a . En caso que no sea ésta ,el modo de arranque no se ha escrito correctamente.

También es posible que su dispositivo de almacenamiento USB no sea compatible, de modo que debería probar con otro dispositivo de almacenamiento si es posible.

METODO CON SD

En este método que vamos a describir, la Raspberry Pi se inicia desde la tarjeta SD por lo que aunque instalemos el sistema en un dispositivo USB seguiremos necesitando la tarjeta SD para que contenga al menos la partición de arranque (boot).

Primero , como siempre tendrá que descargar Rasbian , aunque este método funciona con otros sistemas operativos más recientes como OSMC desde de abril de 2017 donde se añadió oficialmente el soporte de arranque desde un dispositivo USB en el kernel del SO y por tanto es totalmente apoyado por Raspbery Pi.

Ahora vamos a necesitar el software de etcher para escribir la imagen en el dispositivo de almacenamiento USB.

Con todo el software descargado, ahora debe permitir escribir la imagen descargada en el dispositivo de almacenamiento USB.

Si no puede detectar el dispositivo de almacenamiento USB asegúrese de comprobar la opción " inseguro " en los ajustes de etcher.

Una vez que haya terminado, tendremos el dispositivo USB con dos particiones una de arranque que se ve desde cualquier sistema operativo y otro que es solo visible desde Linux (Raspbian, Ubuntu, ...).

Ahora arrancaremos la Raspberry Pi ( con la sd ) de forma habitual, introduciremos la unidad USB en ésta , y bien desde el terminal o por ssh ejecutamos el comando

dmesg

Este comando ,como puede imaginar, sirve para obtener el nombre del usb que hemos conectado, ( normalmente sera sda o sda2).

Una vez sepamos el nombre de la unidad usb, podemos crear la partición de una forma muy similar a como lo haríamos desde linea de comandos desde un entorno windows.

De forma sintética, el proceso seria el siguiente bien desde ssh o desde el terminal:

  • Ejecutaremos fdsik sobre sda : sudo fdisk /dev/sda
  • Presionamos p para ver las particiones
  • Después presionamos d para eliminar una partición, y escribimos 2 a continuación.
  • Para crear la nueva partición, o presionamos n y crearemos la nueva partición,
  • Presionamos p para que sea primaria , y escribimos 2.
  • Ahora nos preguntará por el primer sector de la unidad extraible , (por ejemplo en caso de ser una unidad flash de 16GB seria de 12280 ), pulsamos Enter.
  • Pulsaremos Enter en las siguientes preguntas sin necesidad de escribir nada para que tome el valor por defecto.
  • Por ultimo pulsamos w para que se guarden los cambios.

Con esto, ya tendremos el usb preparado, por lo solo nos falta decirle a la Raspberry Pi donde se encuentra el sistema, para ello vamos a modificar tanto el fichero cmdline.txt como el fstab para que apunte a nuestro usb en lugar de la sd.

En la Raspberry Pi ejecutamos los siguientes comandos:

  • sudo nano /boot/cmdline.txt
  • Sustituimos root=/dev/mmcblk0p2( es decir la sd) por root=/dev/sda2 (por el usb en nuestro caso)
  • Pulsamos Control + O seguido de enter para guardar los cambios
  • Pulsamos Control+X para salir del editor.
  • Ahora modificaremos el fichero /etc/fstab con el comandos:
    sudo nano /etc/fstab
  • Sustituimos root=/dev/mmcblk0p2 ( es decir la sd) por root=/dev/sda2 (por el usb en nuestro caso)
  • Pulsamos Control + O seguido de enter para guardar los cambios
  • Pulsamos Control+X para salir del editor.

Hechos los cambio mencionados reiniciamos la Raspberry Pi bien desde el propio interfaz de Raspbian o bien desde consola o por ssh ejecutar el comando:

sudo shutdown -r now

Una vez reiniciada la Raspberry Pi, para poder utilizar todo el espacio de nuestro usb, ejecutaremos:

sudo resize2fs /dev/sda2

Cuando haya finalizado la ejecución del comando, podremos comprobar que está todo correcto mirando el tamaño del disco, y donde se encuentra /dev/root .

Para ver el tamaño del disco ejecutaremos el comando:

df -h

Asimismo ,para ver donde se encuentra /dev/root ejecutaremos: ls -la /dev/root y debería aparecernos una flecha hacia la partición de nuestro usb.

Una vez realizado todos estos pasos, Raspbian se encontrará en nuestro usb, notaremos una mejora de velocidad y dispondremos de mas tamaño de disco del que disponíamos con la SD.

Cambio de SD

En caso de querer cambiar la microSD por otra mas pequeña poner la nueva microSD que vaya a usar ( por ejemplo muchas personas hablan que con una de sd de 16MB puede ser suficiente) y copiar todos los archivos de la partición de arranque del USB a la SD.

Ahora solo queda hacer un cambio en el archivo: cmdline.txt y lo editamos para cambiar este texto: root=/dev/mmcblk0p2 por este otro texto: root=/dev/sda2

Asimismo modificaremos el fichero /etc/fstab con el comando sudo nano /etc/fstab y s ustituimos root=/dev/mmcblk0p2 ( es decir la sd) por root=/dev/sda2 (por el usb en nuestro caso)

A partir de este punto con la tarjeta SD insertada en la Raspberry Pi y el dispositivo USB conectado a uno de los puertos se iniciará la Pi desde la partición del sistema del dispositivo USB en vez de la tarjeta SD.

Con la partición del sistema instalada en una memoria o disco duro externo siguiendo algunos de los dos métodos descritos deberíamos notar un menor tiempo de arranque y sobre todo un aumento de rendimiento considerable debido a la mejora en los tiempos de lectura o escritura puestos que es mayor tasa de transferencia de los dispositivos USB.