Arrancar su Raspberry Pi 3 desde un USB

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,  del 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.

grabador inseguro

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

$ vcgencmd otp_dump | grep 17 : 17 : 3020000a

Asegúrese de que se muestra la salida0x302000a . 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 sustituimos 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.

3 comentarios en “Arrancar su Raspberry Pi 3 desde un USB

  1. Su Tutorial es correcto? A mi no me ha funcionado, ya realizándolo veo que es un poco incoherente eliminar la partición sda2 del disco usb, cuando es hay donde esta el sistema, para luego montarla en el sistema.

    1. Personalmente no perdería el tiempo con eso si no termina de funcionarle. Hace bastante tiempo lo probé , pero recuerdo que arrancando desde el USB Raspbian iba muy lento. Recomiendo usar un microsd con Rasbian montado y dejar los puertos usb para conectar unidades externas ..

Deja una respuesta