hits counter
Este sitio web utiliza cookies para obtener estadísticas de navegación. Si sigue adelante, consideraremos que acepta su uso. Acepto | Más información

Trucos



Formatear y montar un disco externo USB

Para guardar ficheros (por ejemplo, las descargas de Transmission) lo más práctico es utilizar un disco externo USB (ya sea un HD o un SSD) debido a su velocidad de acceso y a su gran capacidad de almacenamiento. Con ello, además, evitaremos saturar la tarjeta microSD tanto de datos como de carga de trabajo, aparte de que podremos llevar los ficheros de un ordenador a otro sin tener que apagar la Raspberry. Veamos el proceso para formatear y montar un disco HD/SSD en ella y hacer que se monte luego automáticamente cada vez que iniciemos el sistema.


Formateo

Lo primero que tenemos que hacer es conectar la unidad externa a uno de los puertos USB y averiguar el nombre del dispositivo, es decir, la referencias física que le asigna Linux (Raspberry Pi OS en este caso). Lo haremos con este comando:

sudo fdisk -l

que nos mostrará una imagen similar a esta:

Al final (en la parte de abajo de la pantalla) aparecerá el nombre. Si no tenemos ninguna otra unidad USB conectada, muy probablemente será /dev/sda1. Las tres letras (sda) corresponden al nombre del dispositivo y el 1 indica el número de la partición. Lo normal es que sólo haya una partición (es decir, sda1) y así no tendremos que preocuparnos de nada más. Pero si no hay ninguna (en este caso sólo aparecerá sda), habrá que crear una partición; y en el caso de que haya varias (sda1, sda2, sda3,...), las eliminaremos todas y luego crearemos sólo una, como se muestra en los puntos 3, 4 y 5 de este apartado.

A continuación formatearemos el disco. Este proceso sólo puede realizarse si el dispositivo está desmontando (si no lo estuviera, lo desmontamos con el comando sudo umount /dev/sda1). Para usarlo con Raspberry Pi OS, o cualquier otra distribución de Linux, lo mejor es formatearlo con el sistema de ficheros ext4. Podemos realizar esto fácilmente desde la propia consola de comandos con la siguiente orden:

sudo mkfs.ext4 /dev/sda1

Montaje

Concluido el formateo, hay que crear un punto de montaje para nuestro HD/SSD, que será la carpeta desde la que accederemos a él. Para ello, crearemos un carpeta llamada, por ejemplo, hdusb dentro del directorio /media:

cd /media
sudo mkdir hdusb

En este momento ya podemos montar el disco en dicha carpeta con este comando:

sudo mount /dev/sda1 /media/hdusb

Pero para no tener que hacer esto cada vez que iniciemos el sistema, lo mejor es lograr que se monte automáticamente al arrancar la Raspberry. Para conseguirlo tenemos que modificar el fichero /etc/fstab:

sudo nano /etc/fstab

Añadiremos al final del mismo una nueva línea, en la que indicaremos el nombre del dispositivo, la carpeta de montaje y el sistema de ficheros usado (los espacios se insertan con el tabulador):

/dev/sda1        /media/hdusb        ext4        defaults        0        0

El contenido del fichero debe quedar así:

Lo guardamos (Ctrl+o, Intro, Ctrl+x) y reiniciamos el sistema:

sudo reboot

A partir de ahora, cada vez que el sistema se inicie, el disco se montará automáticamente en la carpeta indicada.

Una vez hecho lo anterior, ya podemos crear todas las subcarpetas que necesitemos dentro de la carpeta /media/hdusb. Así pues, nos situamos en ella y creamos, por ejemplo, una carpeta para guardar los ficheros que descarguemos, a la que le daremos todos los permisos para que cualquier usuario pueda acceder a ella:

cd /media/hdusb
sudo mkdir descargas
sudo chmod 777 descargas

Montaje mediante UUID

El UUID (Universally Unique IDentifier) es un identificador único para cada sistema de ficheros. Cuando montamos varios dispositivos USB en la Raspberry es mucho mejor usar el UUID en lugar de la referencia física de la conexión (/dev/sdxx), ya que esta referencia puede variar durante el arranque o el reinicio haciendo que se relacionen de forma incorrecta el dispositivo con su carpeta de montaje correspondiente, lo que podría causar graves problemas en el sistema de ficheros.

El comando sudo blkid nos mostrará los dispositivos y el UUID que corresponde a cada uno:

Luego, editamos el fichero /etc/fstab:

sudo nano /etc/fstab

e incluimos el UUID de cada dispositivo conectado (sin las comillas), como se ve en la siguiente imagen:


Posible problema con el arranque del disco

Puede ocurrir que, durante el arranque del sistema, el disco tarde demasiado en estar disponible y la Raspberry no lo detecte a tiempo, lo que muy posiblemente hará que el sistema se quede colgado. Si se diera el caso, para solucionar esto debemoss añadir dos parámetros extra, de la siguiente forma:

/dev/sda1     /media/hdusb     ext4     defaults,nofail,x-systemd.device-timeout=30     0     0

Con x-systemd.device-timeout le decimos que espere un tiempo (en segundos) antes de montar el disco; mientras que nofail lo que hace es que si el disco no es detactado en ese tiempo, la Raspberry arrancará sin montarlo, con lo que evitamos que el sistema se cuelgue.





Hacer backup de la tarjeta SD en Windows

Cuando tengamos la Raspberry configurada a nuestro gusto y todo funcione correctamente, es el momento perfecto de hacer un backup o copia de seguridad de la tarjeta microSD. Así, si el sistema deja de funcionar bien o la tarjeta se estropea, podremos coger otra y volcar en ella la copia de seguridad, de manera que en unos minutos tendremos nuestro sistema funcionando de nuevo con todas las aplicaciones ya instaladas y configuradas, tal y como estaba en el momento de hacer la copia.

Para ello vamos a emplear la utilidad Win32 Disk Imager, cuyo aspecto es el siguiente:

El proceso completo, paso a paso, lo haremos del siguiente modo:

  1. 1.) Insertamos la tarjeta microSD de la Raspberry en el lector de tarjetas de nuestro PC.
  2. 2.) Creamos un fichero vacío con extensión img (por ejemplo, backupSD.img) en una carpeta del PC.
  3. 3.) Arrancamos el programa Win32 Disk Imager como administrador. Nos aparecerá la ventana de la aplicación, igual a la de la imagen anterior.
  4. 4.) En Device debemos seleccionar la letra de la unidad que se corresponde con la tarjeta microSD.
  5. 5.) En Image File buscamos y seleccionamos el fichero con extensión img que hemos creado en el paso 2.
  6. 6.) Pulsamos en el botón Read y empezará el proceso de copia de la imagen de la tarjeta microSD en el fichero.
  7. 7.) Terminado el proceso, pulsamos en Exit para salir del programa.
  8. 8.) Ya sólo nos queda desmontar el lector y extraer la tarjeta.

En el fichero backupSD.img tendremos guardada ahora una imagen de la tarjeta microSD tal y como estaba en el momento de hacer el backup, lista para recuperarla cuando lo necesitemos.




Hacer backup de la tarjeta SD desde la RPi

Realizar una copia de seguridad de la tarjeta SD, con el sistema ya instalado y configurado a nuestro gusto, es algo que puede hacerse sin desconectar nuestra placa. Realizaremos la copia en un dispositivo USB conectado a la Raspberry Pi (en este caso, un pendrive) que montaremos en /media/pen (si no lo tenemos instalado, aquí se explica cómo formatearlo y montarlo). Ahí crearemos una carpeta llamada backups para guardar las copias de seguridad. El proceso lo haremos desde la propia Raspberry, sin necesidad de apagarla ni desmontar el sistema operativo.

Vamos a hacer el backup recurriendo al comando dd, que usa varios argumentos: if (el origen de la copia), of (el destino) y bs (el tamaño de los bloques). Añadiremos al final status=progress para que nos muestre el progreso de la copia:

sudo dd if=/dev/mmcblk0 of=/media/pen/backups/raspbian.img bs=1M status=progress

Iremos viendo la evolución del proceso y, una vez terminado, en el directorio /media/pen/backups tendremos una copia de seguridad del sistema (raspbian.img), lista para usar cuando la necesitemos.

Cuando queramos recuperar e instalar el backup, sólo tendremos que recurrir de nuevo al comando anterior, pero teniendo en cuenta que ahora el proceso será inverso:

sudo dd if=/media/pen/backups/raspbian.img of=/dev/mmcblk0 bs=1M status=progress

Para trabajar con la copia de seguridad recuperada, debemos reiniciar antes la Raspberry:

sudo reboot



Enviar correos desde la línea de comandos

Ya que utilizamos la Raspberry casi siempre desde la terminal, en modo texto, puede que en algún momento nos interese enviar un correo a alguien sin tener que recurrir al modo gráfico, haciéndolo directamente desde la propia línea de comandos. Vamos a mostrar dos formas diferentes de conseguirlo: una primera más simple y sencilla, y luego otra algo más compleja, pero también más completa.


1.- Mediante ssmtp

Instalación y configuración

Primero instalamos estos dos paquetes:

sudo apt install ssmtp mailutils

En segundo lugar nos convertirmos en root de forma permanente:

sudo su

Haremos previamente una copia de seguridad del fichero que vamos a editar:

cp /etc/ssmtp/ssmtp.conf /etc/ssmtp/ssmtp.conf.backup

Y ahora editamos el fichero de configuración para el envío de los correos:

nano /etc/ssmtp/ssmtp.conf

Comentamos todas las líneas e incluimos al final lo siguiente:

root=micorreo@servidor.com
mailhub=smtp.server.com:587
FromLineOverride=YES
AuthUser=micorreo@servidor.com
AuthPass=contraseña
UseSTARTTLS=YES

Lo que se ha destacado en negrita debemos cambiarlo, lógicamente, por los datos concretos de nuestra cuenta.

NOTAS IMPORTANTES:

  1. 1.- Este sistema no funciona con todos los proveedores de correo debido a las estrictas limitaciones que imponen para su uso. Por ejemplo, las cuentas de correo de Gmail no funcionarán a no ser que vayamos a la configuración de la cuenta y activemos el Acceso de aplicaciones poco seguras. En cambio, si poseemos un dominio propio con cuenta/s de email, es muy posible que sí funcione.
  2. 2.- Si el puerto que utiliza el servicor de correo saliente es el 465 en lugar del 587, habrá que usar UseTLS=YES en lugar de UseSTARTTLS=YES.

A continuación editamos este otro fichero:

nano /etc/ssmtp/revaliases

y al final del mismo incluimos esta línea (sustituyendo las negritas por los mismos datos de antes):

piuser:micorreo@servidor.com:smtp.server.com:587

Ya podemos dejar de ser root y volver al usuario normal:

exit

Enviar correos

A partir de ahora, cuando queramos enviar un correo, sólo tenemos que teclear lo siguiente:

echo "Texto del mensaje" | mail -s "Asunto" receptor@dominio.com

Si necesitamos enviar un mensaje más extenso, que incluya saltos de línea, tendremos que crear un archivo con el editor de textos. Por ejemplo:

nano correo.txt

Escribimos en este archivo el contenido del mensaje y lo guardamos. Después lo enviamos así:

cat correo.txt | mail -s "Asunto" receptor@dominio.com

Si deseamos enviar el correo a varios destinatarios, sólo tenemos que separar al final las distintas direcciones de email por comas.


Enviar ficheros adjuntos

Si necesitamos adjuntar algún fichero al correo, tendremos que instalar mpack:

sudo apt install mpack

Lo usaremos indicando la ruta (si no estamos situados ya en ella) y el nombre del fichero que deseamos enviar, así:

mpack -s "Asunto" /home/piuser/fichero receptor@dominio.com

2.- Mediante Mutt

Instalación y configuración

Instalamos el paquete:

sudo apt install mutt

Como lo vamos a usar con nuestro usuario habitual, creamos en la ruta correspondiente dos directorios y un fichero:

mkdir –p ~/.mutt/cache/headers
mkdir –p ~/.mutt/cache/bodies
touch ~/.mutt/certificates

Ahora pasamos a crear el fichero de configuración:

nano ~/.mutt/muttrc

y lo editamos siguiendo esta guía, pero con modificaciones para hacerlo más simple y corregir algún pequeño error. Cambiaremos lo que aparece en negrita por los datos de nuestra cuenta de correo:

#================ IMAP ====================
set imap_user = "micorreo@servidor.com"
set imap_pass = "contraseña"
set spoolfile = "imaps://imap.server.com/INBOX"
set header_cache = "~/.mutt/cache/headers"
set message_cachedir = "~/.mutt/cache/bodies"
set certificate_file = "~/.mutt/certificates"
#================ SMTP ====================
set smtp_url = "smtp://micorreo@servidor.com@smtp.server.com:587/"
set smtp_pass = $imap_pass
#set ssl_force_tls = yes           # puede usarse esta línea o la siguiente
set ssl_starttls = yes
#=============== Composición ================
set editor = "nano"
set edit_headers = yes
set charset = UTF-8           # value of $LANG; also fallback for send_charset
# Sender, email address and sign-off line must match
unset use_domain
set realname = "Mi nombre real"
set from = "micorreo@servidor.com"
set use_from = yes
set timeout = 30
#========================================

Una ventaja de mutt es que podemos configurarlo para que use el conjunto de caracteres UTF-8, por lo que podremos escribir usando acentos y la letra ñ.

Hemos de tener en cuenta que aquí se aplica también lo que dijimos antes en la NOTA 1.- del subapartado anterior.


Enviar correos

Para enviar un correo escrbiremos lo siguiente:

echo "Cuerpo del mensaje" | mutt -s "Asunto" receptor@dominio.com

Si necesitamos adjuntar un fichero, usaremos al final el parámetro -a indicando la ruta, si no estamos situados ya en ella:

echo "Cuerpo mensaje" | mutt -s "Asunto" receptor@dominio.com -a "/home/piuser/fichero"

Mutt como aplicación

Otra manera de usar mutt es ejecutando el comando del mismo nombre:

mutt

Nos preguntará si deseamos crear el directorio /home/piuser/Mail. Contestamos que y se abrirá una ventana con diversas opciones de menú:

Desde aquí podremos escribir un correo (con el editor nano) pulsando m. Se nos pedirá que escribamos el destinatario y el asunto. Es posible abortar la composición del mismo con la combinación de teclas Ctrl+c o, una vez en el editor, con Ctrl+x:

Como se observa en el menú superior de la siguiente imagen, pulsando a podremos adjuntar un archivo y finalmente enviaremos el correo pulsando y:




Encender un ordenador con Wake on LAN

Si disponemos en casa de un PC al que necesitamos acceder de vez en cuando para guardar o descargar cosas, tenerlo encendido las 24 horas supondría un gasto energético elevado e innecesario. La solución más fácil y eficiente sería arrancarlo sólo cuando necesitemos acceder a él. Si estamos en casa, eso no supone ningún problema; el problema es hacerlo a distancia, cuando estamos fuera de casa. Para realizarlo de este último modo necesitamos recurrir a Wake on LAN, que nos permite encender un ordenador por medio de su propio adaptador de red Ethernet. Aunque esto es posible hacerlo desde Internet (a través de una app del móvil, por ejemplo), resulta algo problemático, pues depende de ciertas características del router (abrir los puertos 7 y 9 UDP + crear una entrada ARP) que no todos ellos poseen o son tareas complejas de realizar. Así pues, para obviar dichas complicaciones, lo haremos desde otro dispositivo de nuestra red local (LAN), como por ejemplo una Raspberri Pi, a la que accederemos por SSH a través de Internet.


Requisitos previos

Para llevar a cabo esta tarea es preciso tener en cuenta estas tres cosas:

  1. 1.) Raspberry Pi: tener nuestra placa siempre encendida (algo que podemos permitirnos debido a su bajo consumo energético) y conectarnos a ella por SSH. Para ello tendremos que tener previamente instalado en la Raspberry un servicio DDNS que nos permita el acceso desde Internet.
  2. 2.) BIOS: que el ordenador que deseamos arrancar tenga la posibilidad de encendido a través de Wake on LAN y habilitar dicha opción en la BIOS del dispositivo. Para lograr esto, normalmente habrá que cambiar algunas opciones en la BIOS: dependiendo del modelo, puede que en el apartado ACPI o AHCI haya que activar el encendido de los dispositivos PCIe y luego habilitar el arranque mediante LAN. En otros modelos de BIOS puede que baste con activarlo en Opciones avanzadas -- Chipset Configuration -- Boot From Onboard LAN o algo similar. El manual de la placa nos será muy útil para averiguarlo en cada caso.
  3. 3.) Sistema Operativo: si el PC que deseamos encender a distancia usa Linux, normalmente no es necesario hacer nada más. En cambio, con Windows la cosa se complica. En este caso iremos al Panel de Control - Hardware y sonido - Dispositivos e impresoras - Administrador de dispositivos - Adaptadores de red. Elegimos el adaptador Ethernet y con el botón derecho abrimos sus Propiedades. En la pestaña Opciones avanzadas buscamos una opción que diga "Activación con LAN apagado", "Reactivar con Magic Packet", "Remote wake-up", "Wake Up...", "Power up by LAN"... (o algo similar, dependiendo del fabricante del dispositivo) y la activamos. Luego vamos a la pestaña Administrador de energía y desmarcamos la casilla "Permitir que el equipo apague este dispositivo para ahorrar energía"; debajo, marcamos las casillas "Permitir que este dispositivo reactive el equipo" y "Permitir un Magic Packet para reactivar el equipo". Aceptamos y salimos.


Hacer Wake on LAN

Habiendo tenido en cuenta todo lo anterior, para poder hacer Wake on LAN deberemos tener instalado previamente en la Raspberry el servicio adecuado que se encargue de ello, así que nos conectamos por SSH y lo instalamos:

sudo apt install wakeonlan

Ahora necesitamos conocer la dirección MAC del ordenador que queremos poner en marcha. En Linux, para conocer la dirección MAC de los adaptadores de red que posee un ordenador, podemos escribir el comando ifconfig. Si al lanzar este comando obtenemos un error, habrá que instalar previamente otro paquete (sudo apt install net-tools). En el caso de Windows, escribiremos ipconfig /all en la ventana del Símbolo del sistema.

Para realizar el Wake on LAN, entramos remotamente en la Raspberry por SSH y le pasamos la dirección MAC del ordenador de nuestra LAN que queremos encender. Entonces la Raspberry mandará un magic packet (paquete mágico) vía broadcast que será recibido por la máquina destino y se procederá a su arranque. Por ejemplo:

wakeonlan 0e:61:a2:37:4c:5f                [cambiamos esta MAC por la de nuestro dispositivo]

Recordar la MAC

Para que no se nos olvide la MAC del ordenador que deseamos arrancar, podemos crear un fichero de script en nuestra carpeta de usuario (/home/piuser) que incluya dicha dirección MAC. Así que primero creamos el archivo:

nano wol.sh

Y en él incluimos el siguiente contenido:

#!/bin/bash
wakeonlan 0e:61:a2:37:4c:5f

Una vez guardado, le damos permiso de ejecución:

chmod u+x wol.sh

Y ya sólo tenemos que ejecutarlo cuando lo necesitemos:

./wol.sh

Finalmente, añadir que si queremos automatizar esta tarea para que la orden de encendido se ejecute, por ejemplo, todos los días a una determinada hora, podemos añadir el script a cron, cuyo uso se explica detalladamente aquí.




Aumentar el tamaño de la memoria swap

La memoria swap (o memoria de intercambio, en español) la utiliza el sistema operativo, a modo de memoria auxiliar, cuando ha agotado toda la memoria RAM del sistema, reservando para ello una parte del espacio de la tarjeta microSD. Raspberry Pi OS, por defecto, sólo reserva 100 MB para este propósito. Esta cantidad resulta insuficiente para la mayoría de los casos, sobre todo si instalamos muchas aplicaciones en nuestra Raspberry, por lo que se quedará escasa.

Para aumentar su tamaño editamos el correspondiente fichero de configuración:

sudo nano /etc/dphys-swapfile

Buscamos la línea CONF_SWAPSIZE=100 y escribimos al final la cantidad de memoria (en MBs) que deseemos. Por ejemplo:

CONF_SWAPSIZE=1024

Para aplicar los cambios, podemos reiniciar el sistema (sudo reboot) o bien actualizar la propia swap. Si optamos por esto último, haremos lo siguiente:

sudo dphys-swapfile setup
sudo dphys-swapfile swapon

Comprobamos que los cambios se han aplicado correctamente con este comando:

cat /proc/meminfo | grep Swap

Con lo que obtendremos algo similar a esto:

SwapCached:                       0 kB
SwapTotal:               1048572 kB
SwapFree:                1048572 kB

Otra forma de comprobarlo es mediante el comando free, que nos muestra tanto el uso de la memoria RAM como de la memoria swap.

Opcionalmente, podemos aprovechar para ajustar los valores de la memoria swap. Para ello editamos el fichero

sudo nano /etc/sysctl.conf

y al final del todo añadimos estas líneas:

vm.swappiness=10
vm.vfs_cache_pressure=50
vm.watermark_scale_factor=200
vm.dirty_ratio=3

Los nuevos ajustes se activarán cuando reiniciemos el sistema:

sudo reboot



Aumentar el amperaje de los puertos USB

Es posible aumentar la potencia eléctrica de salida de los puertos USB de la Raspberry Pi, lo que puede ser útil para conectar un disco duro, especialmente si es un disco de gran capacidad (más de 1 TB). Hacer esto es muy sencillo; tan sólo hemos de modificar un fichero:

sudo nano /boot/config.txt

y añadir esta línea al final:

max_usb_current=1

Guardamos los cambios y reiniciamos el sistema:

sudo reboot

De esta forma, el puerto USB dará 1,2A en lugar de 0,6A, que es lo que da defecto. Pero esos 1,2A se repartirán entre los 4 puertos USB, así que para beneficiarse de esto, sólo debemos usar uno de ellos.

Aparte de este cambio, es imprescindible utilizar un cargador o fuente de alimentación que dé suficiente amperaje: mínimo 3A, y si es de 3,5A o 4A, mucho mejor.




Conexión remota mediante un cliente VNC

Si tenemos instalado Raspberry Pi OS Desktop, podremos acceder al escritorio y utilizar la Raspberry de forma gráfica mediante al servidor VNC que viene ya instalado y activado por defecto. No obstante, para comprobar que efectivamente el servidor está activado, vamos a entrar en la configuración del sistema escribiendo el siguiente comando:

sudo raspi-config

Aparecerá una ventana como la de la figura de abajo para configurar determinados aspectos del sistema:


En la opción de menú 3 Interface Options podremos activar/desactivar, entre otros servicios, el que corresponde al servidor VNC. Además, es posible elegir el nivel de la resolución de pantalla en la opción de menú 2 Display Options - D3 VNC Resolution.

Ya podemos acceder a la Raspberry desde cualquier dispositivo de nuestra red local utilizando un cliente VNC, como el conoccido RealVNC u otro diferente, como por ejemplo, TigerVNC:

En este último, después de escribir la IP local de la Raspberry, pulsamos en el botón Conectar y se nos pedirá un nombre de un usuario y su correspondiente contraseña. Luego saldremos con F8.




Mover el SO a un dispositivo USB

La Raspberry Pi está diseñada para funcionar con el sistema operativo instalado en el lector de tarjetas microSD que incorpora. Pero podemos lograr que el sistema operativo se ejecute también en un dispositivo USB. Para ello es necesario hacer una serie de modificaciones. Este procedimiento es válido para los modelos 1B, 2B, 3B y 3B+. Para la RPi 4 usaremos las instrucciones que se detallan en el apartado siguiente. Una vez aclarado esto, vamos a mostrar las dos formas de hacerlo.


Método 1

La opción de arrancar el Sistema Operativo desde un USB viene deshabilitada de fábrica. Para habilitarla, modificaremos un bit del SOC de la memoria OTP (One Time Programmable). A partir de que hagamos esta configuración, la Raspberry Pi será capaz de arrancar siempre desde USB. Le dirá que el dispositivo que debe arrancar es una unidad de USB, y si no la encuentra, entonces debe arrancar desde la tarjeta microSD. O sea, que si no funciona no pasaría absolutamente nada: la placa va a seguirá arrancando dsede la microSD igual que antes.

Lo primero que tenemos que hacer es actualizar el sistema:

sudo apt update
sudo apt upgrade -y

Luego ejecutamos este comando:

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

Con esto hemos preparado el fichero de configuración de arranque para hacer la operación. Para programar el sector de arranque, reiniciamos:

sudo reboot

A continuación comprobamos que se ha configurado bien con el siguiente comando:

vcgencmd otp_dump | grep 17:

Justo en la línea de debajo tenemos que ver el siguiente valor:

17:3020000a

El problema es que este método no funciona con todos los dispositivos USB. Para comprobarlo, no tenemos más que grabar la imagen al USB con la utilidad Raspberry Pi Imager. Si el resultado es que no funciona, tendremos que pasar al método 2 que explicamos a continuación.

NOTA: al arrancar mediante un dispositivo USB, el led verde de la Raspberry parpadea constantemente. Esto se debe a que el sistema está comprobando continuamente si hay una microSD insertada. Para evitarlo tenemos dos opciones: colocar una tarjeta microSD vacía para que el SO la detecte y deje de hacer comprobaciones, o bien editar el fichero /boot/config.txt y añadir al final del mismo la línea dtparam=sd_poll_once. Después de reiniciar, comprobaremos que se ha solucionado el problema.


Método 2

Esta manera de hacerlo es bastante más compleja que el método anterior, pero tiene la ventaja de que funciona en todos los dispositivos USB que queramos usar, independientemente del tipo, marca o modelo del mismo.

  1. 1.) Insertamos la tarjeta en la Raspberry, conectamos a ella el dispositivo USB (Pendrive, HD o SSD), la encendemos y accedemos por SSH.
  2. 2.) Escribimos el siguiente comando:
    sudo fdisk -l
    y nos aparecerá algo parecido a esto:

    En la imagen, /dev/mmcblk0p2 es donde se halla ahora el sistema operativo, mientras que /dev/sda es la unidad USB que hemos conectado.
  3. 3.) Vamos a preparar nuestro USB externo para copiar en él el sistema operativo, así que tecleamos esto:
    sudo fdisk /dev/sda
    En la línea de comandos pulsamos p para ver la lista de particiones y obtendremos esta imagen:

    Pulsamos d para borrar la primera partición (/sda1). Si hay más particiones, repetimos el proceso para borrarlas todas.
  4. 4.) A continuación escribimos n para crear una nueva partición, luego p para que sea una partición primaria, escribimos 1 para indicar la primera partición y finalmente pulsamos Intro dos veces para aceptar los sectores inicial y final propuestos, con lo que la partición ocupará todo el espacio disponible en la unidad externa:

    Para salir y guardar los cambios, escribimos w.
  5. 5.) Ahora formatearemos la partición que hemos creado:
    sudo mkfs.ext4 /dev/sda1
  6. 6.) Crearemos una carpeta en el directorio /media en la que montar la unidad USB:
    sudo mkdir /media/hdd
    Como en nuestro caso se trata de un disco duro, la hemos llamado hdd, pero podemos usar cualquier nombre que resulte identificativo.
  7. 7.) Montamos la partición en su carpeta:
    sudo mount /dev/sda1 /media/hdd
  8. 8.) Copiamos el contenido de la partición root (/) de la tarjeta microSD en la carpeta donde hemos montado la unidad USB:
    sudo rsync -avx / /media/hdd
  9. 9.) Editamos el fichero /etc/fstab de la unidad USB:
    sudo nano /media/hdd/etc/fstab

    y cambiamos la partición / de la microSD por la del dispositivo USB. Para ello, comentamos la partición 02 de la tarjeta y ponemos en su lugar /dev/sda1, como se muestra en la imagen:


  10. 10.) Finalmente modificaremos este fichero de la microSD:
    sudo nano /boot/cmdline.txt
    y sustituimos lo que hay justo a continuación de root= (que será la partición 02 de la tarjeta) por /dev/sda1, de manera que quede así (como se muestra en negrita):
    ... console=tty1 root=/dev/sda1 rootfstype=ext4 ...
  11. 11.) Guardamos los cambios y reiniciamos la Raspberry:
    sudo reboot

Con el comando df -h podremos ver que el SO (/dev/root) se encuentra ahora en la unidad USB, que se corresponde con la raíz /, mientras que la tarjeta (/dev/mmcblk0p1) contiene la partición de arranque /boot.

Como el disco duro externo incluye ahora la partición donde está instalado Raspberry Pi OS, es necesario que este dispositivo esté siempre conectado a la placa. Y lo mismo ocurre con la tarjeta microSD: hay que tenerla insertada para que se pueda realizar el arranque, pues la partición /boot, como hemos comprobado, se encuentra en la tarjeta. La Raspberry sólo va a usar esta partición para iniciar el sistema, haciendo una lectura muy breve durante el arranque, y además va a ocupar muy poco espacio, por lo que podemos utilizar cualquier tarjeta antigua para esta partición. Debido a su mínimo uso, es muy improbable que se estrope; pero conviene tener una copia de seguridad por si acaso.




Mover el SO a un USB (en la Pi 4)

Dependiendo de la fecha de fabricación, hay unidades que vienen preparadas para arrancar por USB, mientras que en otras hay que activarlo manualmente. Para comprobar si nuestra máquina lo tiene activado, el bootloader debe tener una fecha igual o superior a 3 de Sep 2020. Si es así, no tenemos que hacer nada más que grabar la imagen al USB con el programa Raspberry Pi Imager. Pero si es anterior, tendremos que actualizar el bootloader antes de usar esta aplicación.

Para saber si nuestra Rasberry Pi 4 tiene el bootloader actualizado, debemos usar este comando:

sudo rpi-eeprom-update

Si no está actualizado para poder arrancar desde un USB, se nos indicará en CURRENT una fecha anterior a 3 de Sep 2020 y que hay una actualización disponible.

Si necesitamos actualizar el bootloader, lo primero que debemos hacer es actualizar el sistema para obtener la última versión del paquete rpi-eeprom:

sudo apt update
sudo apt upgrade -y

Luego el proceso lo podemos hacer de dos formas:

Primera forma: esta primera, que es la recomendada, se hace usando la utilidad de configuración del sistema:

sudo raspi-config

Vamos a Advanced Options y después a Bootloader Version. Aquí elegimos la opción Latest y luego para confirmar. Salimos con Finish y confirmamos que deseamos reiniciar.

Una vez entremos de nuevo, comprobamos la versión del bootloader que se nos ha instalado:

sudo rpi-eeprom-update

Si está actualizada a la última versión, deberíamos de ver algo así:


Segunda forma: la otra manera de realizar la actualización es recurriendo al mismo comando que usamos antes para conocer la versión, pero añadiendo al final el parámetro -a:

sudo rpi-eeprom-update -a

Luego reiniciamos:

sudo reboot

Y comprobamos el resultado:

sudo rpi-eeprom-update

NOTA: en las primeras versiones del bootloader, al arrancar mediante un dispositivo USB, solía aumentar el consumo de CPU. Además, el led verde de la Raspberry parpadeaba constantemente. Ambas cosas se deben a que el sistema está comprobando continuamente si hay una microSD insertada. Es posible que esto ya se haya solucionado en las últimas versiones. Pero si no es así, para evitarlo hay dos opciones: insertar una tarjeta microSD vacía para que el SO la detecte y deje de hacer comprobaciones, o bien editar el fichero /boot/config.txt y añadir al final del mismo la línea dtparam=sd_poll_once. Después de reiniciar, comprobaremos que se ha solucionado el problema.




Solución para los paquetes retenidos

Algunas veces, cuando actualizamos el sistema operativo Raspberry Pi OS mediante los comandos

sudo apt update
sudo apt upgrade

obtenemos un mensaje que nos indica que ciertos paquetes están retenidos:

Los siguientes paquetes se han retenido:
   <lista de paquetes>

La razón suele ser que algunos de los paquetes que hemos instalado recientemente tienen dependencias nuevas y necesitan ser actualizadas, pero esto no puede lograrse con un simple sudo apt upgrade.


Solución 1

La solución en algunos casos es teclear el siguiente comando, que actualiza completamente la distribución:

sudo apt dist-upgrade

Una vez hecho, puede que ya no tengamos ningún paquete retenido.

Cuando ocurre esto, normalmente también encontramos uno o varios paquetes autoinstalados que ya no son necesarios. Si es el caso, podemos deshacernos de ellos con

sudo apt autoremove

Solución 2

Si el método anterior no funciona, siempre podemos instalar manualmente los paquetes que se han retenido, separando sus nombres por espacios:

sudo apt install paquete1 paquete2 paquete3

Esto debería instalar también las dependencias necesarias.