ACTUALIZACIÓN: He publicado un nuevo tutorial para poder arrancar la Raspberry Pi 4 desde el USB sin necesidad de microSD. Os aviso antes de que os enfrasquéis con este tutorial.
Aunque actualmente (al menos mientras escribo el tutorial) no se puede arrancar la Raspberry Pi 4 desde USB, hay una manera de hacer un arranque híbrido para que el sistema corra desde el USB. Después del primer contacto con la Raspberry Pi 4, es hora de ponerla en marcha.
En la Raspberry Pi 3 si que se puede hacer el arranque total con modificar el config.txt que se encuentra en /boot y poniendo “program_usb_boot_mode=1”. De esta forma, se escribe ne la memoria de la Raspberry y permite el arranque desde USB como principal (si no tiene USB que arranque, la microSD seguiría siendo la siguiente opción). El problema es que si hacéis esto mismo en la Raspberry Pi 4, os contestará “000008b0” cuando comprobéis si lo ha hecho en lugar de “3020000a”.
Este problema es debido a que no está soportado todavía por el firmware de la Pi 4, aunque, está puesto que junto a PXE serán añadidos próximamente, por lo que antes de hacer el tutorial, si ves que tiene tiempo, revisa porque igual es innecesario hacerlo de esta forma.
Funcionamiento para arrancar desde el USB la Raspberry Pi 4
Para comenzar, voy a explicar lo que hace esta manera de arrancar para entender lo que se está haciendo y posteriormente, cuando sea posible, se podrá cambiar a todo USB sin mucho esfuerzo. Estos son los pasos:
- Grabaremos una microSD con Raspbian (nos crea particiones boot y roofs)
- Grabaremos un SSD con Raspbian (también nos creará las particiones boot y rootfs)
- Arrancaremos con la microSD y prepararemos la partición rootfs del SSD.
- Cambiaremos en la partición boot de la microSD que el sistema es la partición rootfs del SSD en lugar de el de la propia microSD
- Dentro de rootfs del SSD le diremos que el boot será el de la microSD en lugar de el SSD.
- Es decir, usaremos el boot de la microSD (para que arranque) mientras que el rootfs será el del SSD
De esta forma (un poco liosa) solo necesita usar la microSD al principio en el arranque, pero una vez que el sistema se lanza, el resto ya corre desde el SSD por lo que ganamos en velocidad y en estabilidad, ya que las microSD se corrompen más y, sobretodo, cuando tengamos un Home Assistant con un log grande, acelerará ver dichos datos. Vamos a empezar con el paso a paso.
Compras necesarias
Si no tenéis un SSD, el adaptador USB-SATA o la microSD, podéis conseguirlos de los siguientes enlaces:
- Disco SSD 60GB aquí.
- Adaptador SATA – USB aquí.
- MicroSD aquí.
- Por supuesto, si no tenéis Raspberry Pi 4, podéis conseguir de aquí, aquí o aquí.
Si vuestra idea es solo usar Home Assistant no necesitáis mucho espacio.
Grabamos Raspbian tanto en la SD como en el SSD
Para este paso, tendréis que bajar la iso de Raspbian de aquí (o el sistema que queráis) y para grabar, suelo usar, etcher que podéis descargar de aquí. Abrimos etcher, seleccionamos la iso de raspbian, nuestra microSD o bien el SSD y debe quedar algo así:
Y cuando termine, nos dirá algo así:
Una vez que tenemos grabado los dos, metemos la microSD, montamos la partición boot (en Windows será la única que veremos) y creamos un fichero vacío dentro que se llame ssh. De esta forma, nos aseguramos que Raspbian arranca el servidor SSH para poder trabajar por red.
Ahora, conectamos el cable de red (si no tenéis cable de red, tendréis que conectar un teclado y monitor a la Pi y trabajar en local), ponemos la microSD y arrancamos la Pi 4. Después de unos segundos, podréis mirar en vuestro router para ver la IP que tiene para acceder por ssh (en windows podéis usar Putty).
Usuario por defecto “pi” y contraseña “raspberry”
Una vez dentro, comenzamos con lo siguiente.
Preparamos el SSD
Conectamos el SSD a la Raspberry (en mi caso no me ha funcionado bien en los puertos USB 3.0, por lo que lo puse en el USB 2.0).
Lo primero que tenemos que hacer es redimensionar la partición que será el root, ya que, nos cambia el identificador y no arrancará el sistema si lo hacemos a posteriori. Para ello, podemos hacerlo en la propia Raspberry con el comando “parted” o con “gparted” si estáis en un PC de escritorio.
Ejecutamos:
parted /dev/sda
Una vez que arranca escribimos:
Debemos ver las dos particiones:
Ahora escribimos:
resizepart
Nos pedirá la partición que queremos redimensionar, hay que elegir la que es de tipo ext4, en mi caso, pondría el 2. Ahora nos pide el tamaño, en la foto, como veis, aparece que el disco /dev/sda es de 60.0GB, por lo que en tamaño elegiría 60000 y pulsamos enter.
Si volvemos a escribir print, veremos que ahora la partición ocupa los 60GB o el tamaño de vuestro SSD. Escribimos quit para salir del parted y ahora tocaría hacer:
resize2fs /dev/sda2
Puede ser que nos pida hacer antes un fsck.ext4, en tal caso, copiáis la linea tal cual dice que tenéis que ejecutar, la ejecutáis y volvéis a lanzar la linea anterior.
Ahora, deberíamos tener la partición rootfs del máximo espacio, por lo que ya solo queda adaptar el sistema para que monte las particiones como se debe.
Configurando las particiones
Montamos la partición del boot del SSD:
sudo mount /dev/sda1 /mnt
Ahora, creamos el fichero ssh para que el sistema arranque con el ssh activado:
sudo touch /mnt/ssh
Vamos a hacer una copia del boot original de la microSD para poder restaurarlo en caso de que el sistema no arranque:
sudo cp /boot /home/pi -a
Vamos a eliminar el script de redimensionado, editamos el fichero cmdline.txt:
sudo nano /mnt/cmdline.txt
Y debemos dejar la linea que aparece eliminando solo la parte final:
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=c47f6ac5-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet init=/usr/lib/raspi-config/init_resize.sh
a esto (dejando un espacio al final de la última letra):
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=c47f6ac5-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet
Y ahora copiaremos el boot del ssd a la microsd:
sudo cp /mnt/* /boot/ -a
Comprobamos que tenemos el fichero ssh dentro de /boot :
sudo ls /boot/
y en caso de que si, reiniciamos:
sudo reboot
Ahora el sistema debería arrancar desde el SSD, pica en la microSD pero comienza el arranque del sistema desde el disco. Si vuestro router le asigna la misma IP, os dará un error de seguridad la key de ssh porque el sistema es otro, habrá que borrar la key. Si no le da la misma key, habrá que buscar en nuestro router la nueva.
Una vez dentro de nuevo, ya solo nos queda un paso, hacer que la partición de boot sea la de la microSD en lugar de la del SSD ya que, es desde donde empieza la Raspberry a leer, para eso ejecutamos:
sudo blkid
Nos debe mostrar la salida tal que así:
necesitamos coger la partición boot de la microSD (mmcblk0p1) y copiamos el PARTUUID, en la salida de antes, c47f6ac5-01. Ahora, con ese número copiado, editamos el fichero /etc/fstab y tenemos que cambiar el PARTUUID que está en la primera linea (asignada a /boot) por el que hemos copiado.
Guardamos el fichero y reiniciamos.
Ahora, ya debemos tener el arranque correcto y desde el SSD y montando el /boot de la microSD para posibles actualizaciones del kernel.
El tutorial es un poco largo y seguramente se me ha podido escapar algo, por lo que fallos que encontréis, podéis avisarlo en los comentarios o en el grupo de domótica de Telegram.
Si instalas berryboot en la microsd que es copiar y pegar todos los ficheros puedes arrancar e instalar múltiples sistemas operativos en un disco externo usb. Esta bastante guay.