Copia De Seguridad y Restauración De Tu Raspberry Pi (Guía)


Si como yo, haces muchos cambios en tu Raspberry Pi, puede ser una buena idea crear copias de seguridad.
Y lo que es aún mejor es asegurarse de que las copias de seguridad son recuperables 🙂
Sí, pero entonces ¿cómo hacer una copia de seguridad de una Raspberry Pi y recuperarla? Eso es lo que veremos en esta completa guía.

La mejor manera de crear una copia de seguridad de una Raspberry Pi es utilizar una herramienta como rsync, y copiar los archivos importantes a otra ubicación en la red.
También es posible crear copias de seguridad completas de la tarjeta SD, para asegurarse de que todo está asegurado.

Como casi siempre, no hay una sola manera de hacer esto. Depende en gran medida de cómo utilices tu Raspberry Pi, y de lo que esté disponible en tu red para almacenar las copias de seguridad.
En este tutorial, te guiaré a través de varias soluciones:

  • Hacer una copia de seguridad sólo de los archivos importantes (configuración, documentos, bases de datos MySQL)
  • Hacer una imagen completa de la tarjeta SD en otro ordenador
  • O hacer una copia de seguridad completa de una Raspberry Pi mientras se ejecuta

A continuación veremos en detalle cómo hacer cada una de ellas.

Haz una copia de seguridad sólo de los archivos importantes

El primer método que puedes utilizar si tienes una instalación sencilla es hacer una copia de seguridad sólo de los archivos necesarios.

Por ejemplo, si usas tu Raspberry Pi para una cámara de seguridad, una vez que hagas una copia de seguridad del archivo de configuración, no necesitas hacer nada más.
Así que vamos a ver paso a paso :

  • Cómo crear un script para hacerlo
  • Cómo programar si se modifican los archivos
  • Cómo enviar el archivo a otro ordenador (en el script o manualmente)
  • Y por último, cómo restaurar los archivos

Guión

Antes de empezar a crear el script, tienes que identificar los archivos que necesitas guardar.
En mi script utilizaré un archivo y una carpeta que puedes adaptar a tus necesidades:

  • /etc/app1/file1.conf
  • /etc/app2

A continuación, tenemos que crear una carpeta de copia de seguridad para almacenar los archivos:
mkdir /home/pi/backups

Utiliza nano para crear el script:
nano /usr/local/bin/backup.sh

Y, por último, la primera versión de un script sencillo podría tener este aspecto:

#!/bin/bash
/bin/cp /etc/app1/file1.conf /home/pi/backups
/bin/cp /etc/app2 /home/pi/backups/ -r

Como puedes ver es un script básico, que sobreescribirá la antigua copia de seguridad cada vez.
Así que ahora vamos a mejorar este guión en varios puntos.

Utilización de variables

La primera buena práctica que utilizaremos para mejorar los scripts es añadir variables.

Por ejemplo, tienes 200 archivos para respaldar en /home/pi/backups y mañana quieres guardarlos en /media/nas/pi/.
Tendrás que editar 200 líneas en tu script para cambiar la carpeta de destino.

Una mejor manera de hacerlo es crear una variable al principio con la ruta de la carpeta de destino y usarla para cada línea.
También haré lo mismo con el comando “cp”, así que si quieres cambiarlo para usar rsync u otro comando, sólo tendrás que editar una línea.

Aquí hay un script mejor:

#!/bin/bash
DEST_FOLDER='/home/pi/backups/'
BACKUP_CMD='/bin/cp'

$BACKUP_CMD /etc/app1/file1.conf $DEST_FOLDER
$BACKUP_CMD /etc/app2 $DEST_FOLDER -r

El resultado será el mismo, pero será más fácil de actualizar

Comprimir archivos

La mayoría de las veces, utilizamos la compresión para las copias de seguridad o, al menos, para los archivos.
Usaré tar para archivar todos los ficheros en uno y gzip para comprimir este fichero.

Aquí está el nuevo script:

#!/bin/bash

DEST_FOLDER='/home/pi/backups/'
DEST_FILE='backup.tar'
BACKUP_CMD='/bin/tar -rvf'

/bin/rm $DEST_FOLDER/$DEST_FILE.gz
$BACKUP_CMD $DEST_FOLDER/$DEST_FILE /etc/app1/file1.conf 
$BACKUP_CMD $DEST_FOLDER/$DEST_FILE /etc/app2
/bin/gzip $DEST_FOLDER/$DEST_FILE

Agrego una nueva variable DEST_FILE para almacenar el nombre del archivo de la copia de seguridad.
“tar -rvf” permite añadir varios archivos a un archivo tar.
“gzip” permite comprimir todo el archivo tar.

Dejar de sobrescribir archivos

Como puedes ver en el último script, borramos la copia de seguridad anterior cada vez.
No es bueno hacerlo. Si hay un problema con la copia de seguridad, no podrás obtener una versión más antigua.

La buena práctica es nombrar el archivo de copia de seguridad con la fecha y hora actuales, así:

#!/bin/bash

DEST_FOLDER='/home/pi/backups/'
DEST_FILE="backup-$(date +'%F_%R').tar"
BACKUP_CMD='/bin/tar -rvf'
$BACKUP_CMD $DEST_FOLDER/$DEST_FILE /etc/app1/file1.conf 
$BACKUP_CMD $DEST_FOLDER/$DEST_FILE /etc/app2
/bin/gzip $DEST_FOLDER/$DEST_FILE

No ha cambiado nada, salvo que añadimos la fecha en la variable DEST_FILE, para que dejemos de borrar la copia de seguridad anterior.

Cada vez que el script se ejecute, creará un nuevo archivo y mantendrá todas las versiones anteriores.

Programar copias de seguridad

Una vez que hemos creado nuestro script, siguiendo los pasos anteriores, la mayor parte del trabajo está hecho.

Sólo tenemos que programar nuestro script para que se inicie cada día automáticamente.
Para ello, utilizaremos el crontab:

  • Abre el crontab del usuario:
    crontab -e
  • Pega esta línea al final del archivo:
    0 0 * * * /usr/local/bin/backup.sh
    Este cron ejecutará su script de copia de seguridad cada día a medianoche, pero puedes cambiarlo si lo deseas.
  • Guardar y salir (CTRL+O, Enter, CTRL+X)

Si realizas una copia de seguridad de archivos con acceso privilegiado, no olvides programar el script en el root crontab (sudo crontab -e).

Si no te sientes cómodo con esto, no dudes en leer mi tutorial sobre la programación de tareas en Raspberry Pi (en inglés).

Borrar archivos antiguos

Como puedes ver, cada día se creará un nuevo archivo, y nunca lo borraremos.
Lo que puedes hacer para liberar espacio en el disco es eliminar los archivos con más de ocho días de antigüedad (o más si es necesario).

Para configurar esto, puedes añadir este comando al final del script:
/usr/bin/find $DEST_FOLDER -mtime +8 -delete

Al añadir esto, tendrás en cualquier momento sólo ocho archivos de copia de seguridad del historial en tu carpeta de destino.
Siéntete libre de cambiar el número de archivos que deseas mantener.

Siempre es una buena idea guardar varios días de registro.
No puedes estar seguro de ver el problema con tus archivos el primer día.

Enviar la copia de seguridad a través de la red

Ahora tenemos una copia de seguridad con unos cuantos días de historial en la tarjeta SD, pero no es suficiente.
Si el día de mañana tu tarjeta SD ya no funciona, no servirá de nada tener archivos de respaldo en ella.
Hay que poner los archivos a salvo en otro ordenador para evitar este tipo de problemas.

A un ordenador Linux o a un NAS

Si tienes otro ordenador con Linux (o un NAS), puedes transferir los archivos de la copia de seguridad en él para mantenerlos a salvo.
Este método también funcionará para macOS.

Personalmente, estoy usando un 4 bay Synology NAS, que es genial para guardar grandes volúmenes de datos críticos. Es un poco caro, pero tienes una redundancia y una seguridad que es difícil de conseguir en un ordenador estándar (y también muchas herramientas incluidas).
Para datos menos importantes, también puedes convertir otra Raspberry Pi en un NAS (en inglés) y sincronizar tus archivos con ella (mira mi tutorial si quieres probar). No puedes instalar FreeNAS en la Raspberry Pi (en inglés), pero hay otras grandes opciones disponibles.

Manualmente

La primera forma de hacerlo es manualmente.
Si tus archivos no cambian nunca o si no son tan críticos, puedes hacerlo una vez a la semana o al mes para estar seguro.

Para transferir los archivos de la Raspberry Pi al ordenador con Linux, utilizaremos rsync.
Así que tienes que instalarlo en ambas máquinas:
sudo apt-get install rsync

A continuación, cree una carpeta de copia de seguridad en su ordenador:
mkdir /home/[USER]/backups_pi

Entonces tienes dos formas de transferir archivos:

  • Desde tu ordenador:
    rsync -auzr pi@[RASPBERRY_IP]:/home/pi/backups/* /home/[USER]/backups_pi/
  • De la Raspberry Pi:
    rsync -auzr /home/pi/backups/* [USER]@[COMPUTER_IP]:/home/[USER]/backups_pi/

No olvides sustituir las variables por la dirección IP de la Raspberry Pi y tu nombre de usuario.
Y no dudes en eliminar los archivos antiguos antes o después de la transferencia en tu ordenador.

Automáticamente

Al igual que cuando se hace una copia de seguridad en la Raspberry Pi, siempre es una buena idea automatizar este tipo de tareas.
El problema que habrás visto es que se requiere una contraseña cuando se inicia la transferencia.
Para evitarlo, primero hay que hacer un intercambio de claves SSH entre las dos máquinas.

Para este paso, supondré que es tu ordenador el que activa la transferencia.
Si prefieres transferir en la otra dirección, tienes que hacer lo contrario (generar las claves en la Raspberry Pi y permitirlas en el PC).

Intercambio de llaves

  • En primer lugar, empieza por generar una clave en tu ordenador (si ya tienes una, no pasa nada, ve al siguiente paso):
    ssh-keygen -t rsa
    Pulsa Enter en cada pregunta, deja la frase de acceso vacía.
  • A continuación, transfiere la clave pública en la Raspberry Pi:
    rsync ~/.ssh/id_rsa.pub pi@[RASPBERRY_IP]:/home/pi/
    Es la última vez que necesitas introducir tu contraseña.
  • En la Raspberry Pi, añade la clave pública a las claves permitidas:
    cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
  • Intenta conectarte en ssh ahora. No debería pedirte una contraseña:
    ssh pi@[RASPBERRY_IP]

Ejemplo de script

Así que, ahora deberías ser capaz de poner el comando rsync en un script y que no te pida una contraseña.
La secuencia de comandos debería ser así:

#!/bin/bash
rsync -auzr pi@[RASPBERRY_IP]:/home/pi/backups/* /home/[USER]/backups_pi/
find /home/[USER]/backups_pi -mtime +8 -delete

A continuación, programa la secuencia de comandos añadiéndola al crontab como te he explicado antes.

Al ordenador con Windows

Si tu ordenador está en Windows, también puedes enviarle la copia de seguridad, de forma manual o automática.

Manualmente

Para transferir manualmente los archivos de la Raspberry Pi a tu ordenador Windows, la forma más fácil es instalar WinSCP en Windows.
Es un software gratuito para transferir archivos con SSH:

  • Una vez instalado, inicia WinSCP
  • Añadir un nuevo sitio con la información de Raspberry Pi
    winscp settings
  • Haz clic en Save, y conéctate
  • A la derecha, verás los archivos de la Raspberry Pi, y a la izquierda, los de tu ordenador.
    Ahora puedes transferir archivos de uno a otro con solo arrastrar y soltar.
    Ve a /home/pi/backups en la Raspberry Pi y descarga uno o todos los archivos.
    A continuación, puedes eliminar los archivos más antiguos de tu ordenador para conservar sólo los últimos ocho días, por ejemplo.
Automáticamente

No hay manera de programar una transferencia con WinSCP. Y no es fácil instalar SSH en Windows (para usarlo en un script al menos).
Así que tenemos que encontrar otro método.
Lo que te sugiero es compartir una carpeta en Windows y acceder a ella desde la Raspberry Pi.

Compartir una carpeta

Sigue estos pasos para compartir una carpeta en Windows:

  • Crea una nueva carpeta para almacenar sus copias de seguridad
  • Haz clic con el botón derecho del ratón en esta carpeta y selecciona Properties en el menú contextual
  • Ve a la pestaña Sharing (o Compartir) y haz clic en el botón Share o Compartir
  • Por defecto, tu usuario tendrá acceso a este recurso compartido, pero puedes añadir otros usuarios si lo deseas.
    Necesitarás un usuario con contraseña.
    Si tu usuario principal no tiene contraseña, entonces tendrás que crear una.
    Si lo prefieres puedes crear otra cuenta con contraseña.
  • Cuando termines, haz clic en el botón Share o Compartir
  • Terminado. Ahora estás compartiendo la carpeta en la red local
    Guarda la ruta de la red para utilizarla en el siguiente paso
    Para mí, fue algo así: \\[COMPUTER-NAME]\Users\[USER]\Desktop\share

Montar el recurso compartido en la Raspberry Pi

Ahora tenemos que conectar la Raspberry Pi a la carpeta compartida.
Para hacerlo de forma permanente, sigue estos pasos:

  • Crea una nueva carpeta para alojar el recurso compartido:
    sudo mkdir /media/share
  • Edita el archivo /etc/fstab:
    sudo nano /etc/fstab
    Este archivo gestiona todas las unidades y recursos compartidos en la Raspberry Pi.
  • Pega esta línea:
    //[COMPUTER-NAME]/Users/[USER]/Desktop/share /media/share cifs username=[USER],password=[PASSWORD],iocharset=utf8 0 0
    Debes reemplazar todas las variables con sus valores de entorno.
    También puede ser necesario sustituir el nombre de la carpeta en el primer valor.
    Ten en cuenta que utilizamos / y no \ en la ruta de la red.
  • Guardar y salir (CTRL+O, Enter, CTRL+X)
  • Monta la acción una vez:
    sudo mount /media/share

Tu carpeta compartida es ahora accesible en /media/share y si creas un archivo en esta carpeta, el archivo estará disponible en tu ordenador Windows:
sudo touch /media/share/test

Ejemplo de script

Ahora que el recurso compartido está disponible, puedes crear y programar un script para copiar los archivos de copia de seguridad en esta carpeta cada día, por ejemplo:

#!/bin/bash
cp /home/pi/backups/* /media/share/
find /media/share -mtime +8 -delete

Restaurar

Esta copia de seguridad es la más fácil de restaurar.
Sólo tienes que extraer los ficheros del archivo y devolverlos a la carpeta original.

De Linux

En Linux, puedes utilizar el software de exploradors de archivos por defecto de tu distribución.
Por ejemplo, en Ubuntu, haz doble clic en el archivo de copia de seguridad para abrirlo y ver los archivos que contiene.
Y luego haz clic en “Extract”.

Una vez que obtengas los archivos necesarios, envíalos a la Raspberry Pi con rsync como se ve arriba.

Desde Windows

En Windows, no estoy seguro de que la herramienta por defecto pueda abrir un archivo .tar.gz, pero puedes intentarlo.
Si no, tienes que instalar un software como 7zip o WinRAR.

Extrae los archivos con esta herramienta y transfiérelos a la Raspberry Pi con WinSCP como se ve arriba.

Pruébalo

Es una buena idea seguir este procedimiento de restauración al menos una vez.
Así puedes estar seguro de que funciona y de que sabes cómo hacerlo.

Monitorización

Con este método, es fácil comprobar que la copia de seguridad está bien hecha cada día como se esperaba.

Podrías crear un script para comprobar que tienes archivos recientes en la carpeta de copias de seguridad.
Algo así:

#!/bin/bash

if [[ $(find /home/pi/backups -type f -mtime -1) ]]; then
    echo "Backup OK"
    //DO NOTHING
else
    echo "Backup KO"
    //DO SOMETHING (MAIL ?)
fi
¡Hola!
Inscríbete para recibir mis últimos tutoriales cada semana.

Exportar datos de MySQL

Si tienes bases de datos MySQL en tu Raspberry Pi, el procedimiento es un poco diferente.

Copia de seguridad

La mejor práctica para la copia de seguridad de los datos de MySQL es primero exportar y luego guardar esta exportación.

Exporta la base de datos con esta línea de comandos:
mysqldump -uroot -p[PASSWORD] [DATABASE-NAME] > export-[DATABASE-NAME].sql

Este comando creará un archivo con todas las consultas SQL necesarias para recrear la base de datos desde cero.

Puedes seguir los mismos pasos vistos anteriormente para:

  • crear un script
  • programarlo
  • transferir archivos a otro ordenador

Si tienes más de una base de datos de la que hacer una copia de seguridad, pon tantas líneas como sea necesario en tu script y cambia el nombre de la base de datos y el nombre del archivo en cada línea.

Restaurar

Para recuperar una base de datos perdida hay que seguir los mismos pasos que para la copia de seguridad de archivos.

Una vez que el archivo .sql está de vuelta en la Raspberry Pi, puedes utilizar este comando para importar los datos a una base de datos fresca:
mysql -uroot -p[PASSWORD] [DATABASE-NAME] < [BACKUP-FILE].sql

La base de datos debe estar vacía para iniciar la importación.
Así que, dependiendo de la situación, debes seguir uno de estos dos métodos:

  • Importar la copia de seguridad a una base de datos con otro nombre (y luego copia sólo lo que le interesa)
  • O cambiar el nombre de la base de datos corrupta, volver a crearla (vacía) y luego importar el archivo de copia de seguridad

Al igual que con la copia de seguridad de los archivos, considera la posibilidad de probar este procedimiento al menos una vez.

Crear una imagen de la tarjeta SD

En los párrafos anteriores vimos cómo guardar algunos archivos en una Raspberry Pi.
Ahora bien, ¿cómo hacer si tienes una instalación compleja de la que quieres hacer una copia de seguridad completa?

Copia de seguridad

El objetivo de este método de copia de seguridad es crear una imagen con todos tus archivos de Raspberry Pi en ella.
Entonces puedes flashear esta imagen a otra tarjeta SD para recuperar la Raspberry Pi en el mismo estado.

Linux

En Linux, puedes utilizar el comando dd para crear una imagen de un dispositivo:

  • Saca la tarjeta SD de la Raspberry Pi
  • Inserta la tarjeta SD en su ordenador
  • Encuentra el nombre del dispositivo:
    sudo fdisk -l
    Este comando mostrará todos los dispositivos de almacenamiento de tu ordenador.
    Deberías ver tu disco duro, y al final de la lista tu tarjeta SD.
    Anota el nombre del dispositivo (generalmente /dev/sdX o /dev/mmcblk0).
  • Crea la imagen (sustituir el nombre del dispositivo) :
    sudo dd bs=4M if=/dev/mmcblk0 of=backup.img

Después de unos minutos, obtendrás la imagen completa de la copia de seguridad de tu Raspberry Pi.

Este comando también debería funcionar en macOS, sustituyendo 4M por 4m en el último comando.

Windows

En Windows, el mejor software para hacer esto es Win32 Disk Imager:

  • Descarga Win 32 Disk Imager, instálalo y ejecútalo
  • Debería aparecer una ventana como la siguiente
  • Introduce la carpeta de destino de la imagen y el nombre del archivo (.img)
  • Selecciona la letra de la tarjeta SD en la lista de dispositivos
  • Haz clic en “Read”
  • Esta herramienta creará la imagen en la carpeta seleccionada

Restaurar

La forma más fácil de restaurar esta copia de seguridad es flashear la imagen en otra tarjeta SD con Etcher:

  • Descargar Etcher desde el sitio web oficial
  • Instala y ejecuta
  • Elige la imagen de respaldo a la izquierda
  • Elige tu tarjeta SD
  • Haz clic en el botón “Flash”.

Obtendrás una nueva tarjeta SD con el sistema en el mismo estado que durante la copia de seguridad.

En Linux / Mac también puedes usar dd para flashear la tarjeta SD:
sudo dd bs=4M if=backup.img of=/dev/mmcblk0
Si tienes una tarjeta SD vacía, no dudes en probar este procedimiento para asegurarte de que funciona en tu caso.

Clonar una Raspberry Pi en funcionamiento (copia de seguridad en caliente)

Esta última forma es la misma idea que la anterior, pero para una instalación crítica.
Si no puedes detener su Raspberry Pi para hacer la copia de seguridad completa en una imagen, tienes que seguir este procedimiento.

Requisitos previos

Te voy a presentar dos formas de hacer una copia de seguridad completa de tu Raspberry Pi en funcionamiento (desde una herramienta de escritorio o con líneas de comando).
En ambos casos, tendrás que conectar una segunda tarjeta SD en la Raspberry Pi para copiar la tarjeta SD en funcionamiento a otra.

Si aún no tienes uno, te recomiendo que compres un adaptador USB barato en Amazon como este.
Prefiero un adaptador con un cable corto (el cable largo no es necesario, y el formato de llave USB puede obstruir el acceso a otros enchufes). Entonces, el que enlazo es perfecto para esto.
Si necesitas más detalles, explico cómo utilizar un lector de tarjetas SD USB en tu Raspberry Pi (en inglés) en este artículo.

PiClone (versión de escritorio)

Si tu Raspberry Pi está ejecutando la versión de escritorio, hay una herramienta llamada PiClone que puede utilizar para esto.
El nombre en el menú principal es “SD Card Copier”.
Se encuentra en el submenú Accessories .

El uso de este software es sencillo:

  • Elige tu tarjeta SD principal en la lista “Copy From Device”.
  • Elige tu tarjeta SD de copia de seguridad en la lista “Copy To Device”.
  • Clickea Start para iniciar la transferencia
  • Espera unos minutos y extrae la tarjeta SD de respaldo

No dudes en probar esta tarjeta SD de respaldo en otra Raspberry Pi para comprobar que funciona correctamente.

Guión (versión Lite)

Si estás ejecutando la versión Raspberry Pi OS Lite o si deseas crear un script, hay un script de shell disponible para hacer esto.

Voy a explicar los fundamentos para utilizar este script.
Pero puedes encontrar toda la información en la página de página de Github si necesitas más.

  • Tendrás que instalar Git para descargar los archivos:
    sudo apt-get install git
  • Comienza descargando e instalando el script:
    cd ~/Downloads
    git clone https://github.com/billw2/rpi-clone.git
    cd rpi-clone
    sudo cp rpi-clone rpi-clone-setup /usr/local/sbin
  • A continuación, utiliza fdisk para obtener el nombre de la tarjeta SD de copia de seguridad:
    sudo fdisk -l
    Deberías ver la tarjeta SD actual: sda o mmcblk0 la mayoría de las veces.
  • Y debajo de la tarjeta SD de respaldo: sdb o mmcblk1 generalmente
  • Y por último, utilice rpi-clone:
    sudo rpi-clone sdb -v
    Reemplaza sdb por el nombre de tu tarjeta SD de respaldo.

Conclusión

Eso es todo.
Ya sabes cómo hacer copias de seguridad de tu Raspberry Pi de varias maneras.

Intenta programarlas o, si no es posible, trata de hacerlas regularmente.
Además, intenta revisarlos de vez en cuando.

No hay nada peor que una copia de seguridad que no ha funcionado o que es inutilizable porque nunca se ha probado que haya funcionado como se esperaba.

Patrick FROMAGET

Hola, soy Patrick. Soy administrador de sistemas Linux, y me apasiona la Raspberry Pi y todos los proyectos sobre este tema. He creado este sitio para compartir con ustedes lo que he aprendido al respecto.

Últimos artículos