Respaldo de Servidores Locales: Soluciones Eficientes para Evitar la Pérdida de Datos

En este artículo, exploramos cómo configurar un respaldo automático en un servidor Ubuntu utilizando un Raspberry Pi y un NAS. Aprende a proteger tus datos con estrategias efectivas de respaldo diario, asegurando la integridad y disponibilidad de tu información.

Respaldo de Servidores Locales: Soluciones Eficientes para Evitar la Pérdida de Datos
Buffalo NAS que utilizo junto con un Raspberry para mantener a salvo mi servidor Local.

Introducción

En la era digital, la seguridad de los datos es más crucial que nunca. Imagina perder toda la información de tu servidor local debido a un fallo técnico o un ataque cibernético. Este tipo de situaciones puede resultar en la pérdida de datos valiosos y tiempo invertido. Es por esto que realizar copias de seguridad regulares no es solo una buena práctica, sino una necesidad. En este artículo, exploraremos cómo puedes configurar un sistema de respaldo diario para tu servidor Ubuntu usando un Raspberry Pi 5 y un servidor NAS (Network Attached Storage) en tu hogar. Este enfoque no solo te ahorrará tiempo, sino que también garantizará que tu contenido esté siempre seguro.

Preparativos

Raspberry Pi 5 con 8 GB de RAM y una Memoria de 128 GB

Requisitos

Objetivos

Configurar un script de respaldo que se ejecute automáticamente todos los días a la medianoche, guardando una copia de seguridad comprimida de tu servidor en el NAS. Este objetivo nace de la necesidad de proteger tus datos contra posibles fallos del sistema, ataques cibernéticos o errores humanos. Al realizar copias de seguridad diarias, aseguras que siempre tendrás una versión reciente de tu información, minimizando la pérdida de datos en caso de un imprevisto. Además, automatizar este proceso te permite ahorrar tiempo y esfuerzo, eliminando la necesidad de realizar respaldos manualmente. Este sistema de respaldo no solo te brinda tranquilidad, sino que también garantiza la continuidad de tus operaciones y la integridad de tu información.

Paso 1: Montar la Carpeta Compartida en el NAS

Primero, necesitamos asegurarnos de que nuestro servidor Ubuntu puede acceder a la carpeta compartida en el NAS que estamos utilizando en la red local.

  1. Crear la carpeta local donde voy a montar la ubicación de Red en mi Servidor NAS.
sudo mkdir /mnt/remote_backup/
  1. Editar el archivo fstab: Este archivo controla cómo se montan los sistemas de archivos en el arranque.
sudo nano /etc/fstab

  1. Agregar la entrada para la carpeta compartida: Añade la siguiente línea al archivo fstab para montar la carpeta compartida automáticamente al iniciar el sistema.
//NAS/server /mnt/remote_backup cifs username=admin,password=miclave,iocharset=utf8,vers=3.0 0 0

Asegúrate de reemplazar NAS, server, admin, y miclave con los valores correspondientes a tu configuración.

  1. Montar la carpeta compartida:
sudo mount -a
  1. Verifica que la carpeta se haya montado correctamente:
ls /mnt/remote_backup

Paso 2: Crear el Script de Respaldo

Ahora que tenemos acceso a la carpeta compartida, crearemos el script de respaldo.

  1. Crear el archivo del script y la carpeta temporal donde se guardaran los logs:

Creamos la carpeta, en mi caso le doy acceso a todos los usuarios eso podría no ser idóneo en tu entorno por lo que deberías elegir correctamente que permiso vas a dar.

sudo mkdir -p /var/log/hdd_backup
sudo chmod 777 /var/log/hdd_backup

Luego creo el archivo de mi script.

sudo nano /usr/local/bin/hdd_backup.sh
  1. Pegar el siguiente código en el archivo del script:
#!/bin/bash

TIMESTAMP=$(date +%Y-%m-%d_%H-%M-%S)
BACKUP_DIR="/mnt/remote_backup/backup"
IMAGE_PATH="/mnt/remote_backup/image_$TIMESTAMP.img"
VERSION_FILE="/mnt/remote_backup/version_note.txt"
LOG_FILE="/var/log/hdd_backup/hdd_backup.log"
REMOTE_DIR="//LS710D98B/server"
MOUNT_POINT="/mnt/remote_backup"

# Verificar si la carpeta de red está montada, y montarla si no lo está
if ! mountpoint -q $MOUNT_POINT; then
    echo "Mounting remote directory at $(date)" >> $LOG_FILE
    sudo mount -t cifs $REMOTE_DIR $MOUNT_POINT -o username=usuario_de_red,password=clave_de_red,iocharset=utf8,vers=3.0
    if [ $? -ne 0 ]; then
        echo "Failed to mount remote directory" >> $LOG_FILE
        exit 1
    fi
else
    echo "Remote directory already mounted at $(date)" >> $LOG_FILE
fi

# Crear el directorio de respaldo si no existe
mkdir -p $BACKUP_DIR

# Usar rsync para realizar la copia de seguridad incremental excluyendo directorios especiales
echo "Starting rsync at $(date)" >> $LOG_FILE
sudo rsync -aAXv --delete --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} / $BACKUP_DIR >> $LOG_FILE 2>&1
echo "Finished rsync at $(date)" >> $LOG_FILE

# Crear una imagen comprimida del directorio de respaldo
echo "Starting tar at $(date)" >> $LOG_FILE
sudo tar -cvpzf "$IMAGE_PATH.tar.gz" -C $BACKUP_DIR . >> $LOG_FILE 2>&1
if [ $? -eq 0 ]; then
    echo "Image created successfully" >> $LOG_FILE
else
    echo "Error creating image" >> $LOG_FILE
fi
echo "Finished tar at $(date)" >> $LOG_FILE

# Registrar la fecha de la última salva completada en el archivo de nota de versión
echo "Última salva completada: $TIMESTAMP" > $VERSION_FILE

# Confirmación
echo "Backup and image creation completed successfully at $TIMESTAMP"

En el script antes mencionado utilizamos una redundancia para verificar si la carpeta de red esta montada en nuestro servidor. Si es así continua con la ejecución del script, en caso de que la carpeta de red no este montada entonces va a proceder a realizar el montaje para que la salva se realice correctamente. Debes cambiar en el script el usuario_de_red y la clave_de_red.

  1. Hacer el script ejecutable:
sudo chmod +x /usr/local/bin/hdd_backup.sh
  1. Probar el funcionamiento del script
nohup sudo /usr/local/bin/hdd_backup.sh >> /var/log/hdd_backup/hdd_backup.log 2>&1 &
  1. Verificar si se está ejecutando correctamente en nuestro sistema.
ps aux | grep hdd_backup.sh

Si hasta este paso todo ha funcionado correctamente y la salva se esta realizando con exitos entonces podemos proceder a la automatización de la tarea para que se ejecute todos los días a las 12 de la noche o con la frecuencia deseada.

Paso 3: Automatizar la Ejecución del Script

Para asegurarnos de que el script se ejecute automáticamente todos los días a la medianoche, configuraremos una tarea cron.

  1. Editar las tareas cron, en este caso como la tarea necesita permisos vamos a crear la tarea en el usuario root:
sudo crontab -e
  1. Agregar la siguiente línea al archivo de cron al final:
0 0 * * * nohup /usr/local/bin/hdd_backup.sh >> /var/log/hdd_backup/hdd_backup.log 2>&1 &

Esta línea configura cron para ejecutar el script cada día a la medianoche y registrar la salida en un archivo de log.

Restauración de Datos Utilizando la Copia de Seguridad

1. Preparativos Iniciales

Antes de comenzar con la restauración, asegúrate de tener acceso físico o remoto al servidor y a la red donde se encuentra almacenada la copia de seguridad. Verifica que la unidad de red donde se almacenan las copias de seguridad esté correctamente montada en tu servidor.

2. Acceso a la Copia de Seguridad

Accede al directorio donde se encuentran almacenadas las imágenes de respaldo. Esto generalmente se realiza a través de la unidad de red montada en tu servidor. Utiliza el siguiente comando para navegar al directorio de respaldo:

cd /mnt/remote_backup

3. Identificación de la Imagen de Respaldo

Lista los archivos en el directorio para identificar la imagen de respaldo más reciente o la que deseas restaurar. Esto te ayudará a asegurarte de seleccionar la copia de seguridad correcta para la restauración. Puedes usar el comando ls -lh para listar los archivos y verificar las fechas.

4. Restauración de la Imagen de Respaldo

Para restaurar los datos desde la imagen de respaldo, utiliza el siguiente comando tar ajustado para tu configuración específica. Asegúrate de tener los privilegios adecuados para ejecutar este comando:

sudo tar -xvpzf image_YYYY-MM-DD_HH-MM-SS.img.tar.gz -C /

Reemplaza image_YYYY-MM-DD_HH-MM-SS.img.tar.gz con el nombre de archivo exacto de la imagen de respaldo que deseas restaurar, utilizando la fecha y hora correspondiente al momento deseado.

5. Verificación y Ajuste de Permisos

Después de completar la restauración, verifica que todos los archivos y directorios tengan los permisos correctos. Puedes ajustar los permisos si es necesario utilizando los siguientes comandos:

sudo chown -R root:root /
sudo chmod -R 755 /path/to/important/directory

6. Reinicio del Sistema

Una vez que hayas restaurado los archivos desde la copia de seguridad y ajustado los permisos necesarios, reinicia tu servidor para asegurar que todos los servicios se inicien correctamente y que el sistema funcione con normalidad:

sudo reboot

Conclusión

En la elaboración de este artículo, mi objetivo principal fue encontrar una manera efectiva de proteger los datos más importantes que administro, como servidores web, blogs y programas esenciales. Mi motivación radica en proporcionar una guía clara y práctica que pueda ayudar a otros usuarios a asegurar su trabajo y mantener la continuidad de sus operaciones en situaciones adversas. La restauración de datos mediante copias de seguridad es crucial para mitigar los riesgos de pérdida total o parcial de información crítica. Es fundamental establecer y mantener procedimientos de respaldo sólidos, junto con pruebas periódicas de restauración, para garantizar que los datos estén protegidos y accesibles cuando más se necesiten.