Booteando Raspbian desde un SSD en Raspberry Pi 4

Booteando Raspbian desde un SSD en Raspberry Pi 4

Hace un tiempo, en casa se me está cortando seguido el suministro de energía (Argentina, no lo entenderías) y si no estoy en casa mi Pi queda obsoleta porque cuando la luz vuelve el sistema no llega a levantar del todo por lo que queda inaccesible y si yo o alguien en casa la desenchufa de la corriente y la vuelve a enchufar el sistema vuelve a restaurarse y todo vuelve a funcionar de maravilla. Pero es un problema y muy grande. Por lo que me puse a investigar y... 🤪

¡Por fin pude hacer algo que queria hacer hace rato!. Logré llevar mi Raspbian actual, el que tengo instalado en mi microSD de 32GB a un SSD de 128GB. Para ésta prueba lo voy hacer en un HDD de 320GB que tengo tirado por ahí. Asi que paso a contarles como logré éste hito domótico para mi.

Cosas a tener en cuenta:

Primero que nada tenemos que tener la última versión del firware EEPROM de la Pi para que tengamos la opción de poder bootear desde un SSD, HDD o un pendrive. Para eso vamos a ejecutar el siguiente comando:

$ sudo raspi-config

Con ese comando vamos a ejecutar la configuración de la Pi por lo que vamos a setear lo siguiente: 6 Advanced Options -> A7 Bootloader Version -> E1 Latest -> Confirmamos y Finish

Una vez confirmado ésto vamos a reiniciar la Pi para que se instale la nueva versión del firmware.

Preparamos el SSD o HDD o pendrive para hacer el volcado del sistema:

Ahora con el nuevo firmware ya podemos hacer el volcado del sistema en el dispositivo de almacenamiento que vamos a usar. En mi caso y como dije arriba voy a usar un HDD de 2.5mm (el típico de una notebook) para después hacer la comparación con un SSD que es el que estoy usando. Eso si, si tu microSD que tenés en es de 32GB tenés que usar un dispositivo con un tamaño más grande sea el dispositivo que sea. Yo lo intenté hacer con un pendrive de 32GB (mismo tamaño que la microSD) pero al final del volcado indica el error de que no tiene espacio para seguir escribiendo por lo que no funciona y conviene usar uno más grande.

Ahora, conectamos nuestro dispositivo a la Pi el cual será detectado (pero no montado) por el sistema. Con el disco conectado tenemos que saber cual es la ruta donde está el disco, para ello vamos hacer lo siguiente:

$ lsblk -f

Con ese comando vamos a saber cual es la ruta del disco, en mi caso /dev/sdc. Si tenemos más dispositivos conectados antes de conectar el HDD que queremos para el sistema seguramente veamos /dev/sda y /dev/sdb correspondiente a los conectados. Si solo va a estar conectado el del sistema es probable que solo esté sda.

Resultado del comado

Haciendo el vuelco del sistema en el HDD/SDD/Pendrive

Ahora vamos a hacer el vuelco de información de lo que está actualmente en la microSD de la Pi al disco que vamos a querer bootear, en mi caso a modo de prueba, un HDD (con su ruta /dev/sdc).

El comando que vamos a utilizar es el siguiente:

sudo dd bs=4M if=/dev/mmcblk0 of=/dev/sdX (donde X es el disco a volcar el sistema)

Paso a desglosar el comando completo:

  • dd: El comando principal para la copia de datos.
  • bs=4M:bs significa "block size" (tamaño de bloque).4M indica que la copia se realizará en bloques de 4 megabytes. Esto puede acelerar significativamente el proceso de copia, especialmente con archivos grandes o dispositivos completos, ya que el sistema maneja la información en trozos más grandes.
  • if=/dev/mmcblk0:if significa "input file" (archivo de entrada)./dev/mmcblk0 es la ruta al dispositivo de origen. En este caso, probablemente se refiere a una tarjeta eMMC (embedded MultiMediaCard) o una tarjeta SD (en éste caso) conectada internamente, que se identifica como el primer dispositivo de bloque de memoria flash. Este es el dispositivo del que se copiarán los datos.
  • of=/dev/sdX:of significa "output file" (archivo de salida)./dev/sdX es la ruta al dispositivo de destino. La X aquí es un marcador de posición muy importante. Podría ser a, b, c, etc., dependiendo de cómo tu sistema identifique los discos duros u otros dispositivos de almacenamiento externos (como unidades USB o discos SATA). Este es el dispositivo al que se copiarán los datos.
A no desesperar!!

Cuando ejecutás el comando no vas a tener respuesta alguna hasta el final, solo vas a ver la consola colgada hasta que se libere cuando termine de hacer la copia completa de la microSD al disco. En mi caso tardó alrededor de 20 minutos.

Ya casi lo tenemos!

Una vez que se hace el volcado del contenido de la microSD en el dispositivo de almacenamiento, solo resta apagar la pi, desconectar la microSD de la bahía y volver a prenderla solo con el disco y ver como bootea el sistema. Si lo hiciste sobre un SSD el booteo es casi instantáneo (sobre todo, y siendo super recomendable, usando el puerto usb 3.0) pero con un HDD se toma unos segundos.

Solo queda un paso, extender el espacio del disco.

Con el sistema booteado (espero que haya pasado) si hacés el comando df -k vas a ver que el espacio del sistema tiene solo los 32GB que tenía la microSD a pesar de estar puesto es un disco 360GB como es el caso del HDD que usé por lo que tenemos que usar las opciones avanzadas para hacer la extensión de la partición, para ello vamos a ejecutar nuevamente sudo raspi-config.

Vamos a ir nuevamente a la opción 6 Advanced Options y elegiremos la opción A1 Expand Filesystem para expandir el sistema de archivos y poder usar todo el espacio disponible que queda del dispositivo.

La opción para expandir el sistema de archivos
Y eso es todo!! Espero que te sirva mucho, tuve que buscar mucha info porque lo que hay es bastante viejo.