Copias de seguridad incrementales en un VPS usando rsync y cron | INTROSERV
EUR
european

EUR

usa

USD

Spanish Es
Ex. VAT Ex. VAT 0%

Copias de seguridad incrementales en un VPS usando rsync y cron

Introducción

Las copias de seguridad son esenciales para cualquier VPS. Te protegen de eliminaciones accidentales, errores de configuración, corrupción de datos o compromisos del servidor.

Este manual explica cómo configurar copias de seguridad incrementales usando:

  • rsync — herramienta eficiente de copia de archivos
  • enlaces duros — para evitar datos duplicados en cada copia de seguridad
  • cron — para programar copias de seguridad automáticas

Resultado: cada instantánea parece una copia de seguridad completa, pero solo los archivos cambiados ocupan espacio adicional. Este enfoque es simple, confiable y adecuado para la mayoría de las configuraciones comunes de VPS.

Cómo funcionan las copias de seguridad incrementales con rsync

rsync proporciona dos características clave:

  1. Sincronización de solo archivos cambiados
  2. Opción --link-dest: crea enlaces duros para archivos no cambiados, permitiendo múltiples directorios de copia de seguridad "completos" sin consumir espacio adicional.

Ejemplo de estructura de directorios:

/backups/ daily.0/ - copia de seguridad de hoy daily.1/ - copia de seguridad de ayer daily.2/ - copia de seguridad de hace 2 días

Cada carpeta aparece como una copia de seguridad completa, pero solo las diferencias ocupan espacio.

Requisitos previos

En el VPS:

  • Instalación de Linux
  • Acceso como root o usuario con sudo
  • Suficiente espacio en disco para instantáneas de copia de seguridad
  • Opcional: almacenamiento remoto si se realiza una copia de seguridad en otro servidor

Instala rsync si es necesario:

sudo apt update

sudo apt install rsync

Info

Advertencia: Detén tus servidores de bases de datos o excluye sus directorios de datos de la copia de seguridad. La copia de seguridad de bases de datos en línea a través de rsync puede causar una copia de seguridad de base de datos corrupta.

Creación de los directorios de copia de seguridad

Elige una ubicación para las copias de seguridad. Usualmente:

  • Sistema de archivos local: /backups/
  • Disco externo: /mnt/storage/backups/
  • Servidor remoto vía SSH: user@backup-server:/data/backups/

Ejemplo (local):

sudo mkdir -p /backups

sudo chmod 700 /backups

Comando básico de rsync para copias de seguridad incrementales

A continuación se muestra el comando clave de rsync:

rsync -a --delete \ --link-dest=/backups/daily.1 \ /source/data/ \ /backups/daily.0/

Explicación:

  • -a — modo archivo (preserva permisos, propietarios, marcas de tiempo, enlaces simbólicos)
  • --delete — elimina archivos eliminados en la fuente
  • --link-dest — crea enlaces duros a archivos no cambiados en la instantánea anterior
  • /source/data/ — directorio que deseas respaldar
  • /backups/daily.0/ — instantánea de hoy

Script de rotación para instantáneas diarias

Crea un script para:

  1. Rotar copias de seguridad existentes
  2. Crear una nueva copia de seguridad incremental
  3. Mantener N días (ejemplo: 7)

Crea el archivo:

sudo nano /usr/local/bin/backup_daily.sh

Pega:

#!/bin/bash BACKUP_DIR="/backups/" SOURCE="/" EXCLUDE="/etc/backup-exclude.txt" DAYS="7" #REMOTE_USER="<YOUR_REMOTE_USER>" #REMOTE_SERVER="<YOUR_REMOTE_SERVER>" REMOTE_DIR="/backups/" # Rotar for ((i=DAYS-1; i>=0; i--)); do if [ -d "$BACKUP_DIR/daily.$i" ]; then rm -rf "$BACKUP_DIR/daily.$((i+1))" mv "$BACKUP_DIR/daily.$i" "$BACKUP_DIR/daily.$((i+1))" fi done # Preparar directorios de copia de seguridad mkdir -p "$BACKUP_DIR/daily.0" if [ ! -d "$BACKUP_DIR/daily.1" ]; then mkdir -p "$BACKUP_DIR/daily.1" fi # Realizar copia de seguridad incremental rsync -a --delete \ --link-dest="$BACKUP_DIR/daily.1" \ --exclude-from="$EXCLUDE" \ "$SOURCE" "$BACKUP_DIR/daily.0" if [ -n "$REMOTE_USER" ] && [ -n "$REMOTE_SERVER" ] && [ -n "$REMOTE_DIR" ]; then rsync -azv --delete "$BACKUP_DIR" "$REMOTE_USER@$REMOTE_SERVER:$REMOTE_DIR" fi

Guarda y sal. Hazlo ejecutable:

sudo chmod +x /usr/local/bin/backup_daily.sh

Puedes cambiar las variables en la parte superior del script para ajustarlo a tus necesidades. Cambia SOURCE a un directorio específico si no necesitas una copia de seguridad completa del sistema de archivos raíz, por ejemplo.

Excluyendo directorios innecesarios

Crea un archivo de exclusión:

sudo nano /etc/backup-exclude.txt

Exclusiones típicas:

  • /proc
  • /sys
  • /tmp
  • /run
  • /dev
  • /mnt
  • /media
  • /var/cache
  • /backups

Programando copias de seguridad con cron

Edita crontab:

sudo crontab -e

Agrega (copia de seguridad a las 03:00 diariamente):

0 3 * * * /usr/local/bin/backup_daily.sh >/var/log/backup.log 2>&1

Esto asegura instantáneas automáticas regulares.

Realizando copias de seguridad en un servidor remoto (opcional)

Si deseas una copia de seguridad fuera del sitio, sigue los siguientes pasos. Crea una carpeta de destino en el servidor objetivo:

mkdir -p /backups

Asegúrate de que las claves SSH estén configuradas. Ejecuta el siguiente comando para generar tu clave SSH:

ssh-keygen

Reemplaza <YOUR_REMOTE_USER> con tu nombre de usuario en el servidor remoto, <YOUR_REMOTE_SERVER> con el nombre de dominio de tu servidor remoto y ejecuta el siguiente comando para copiar tu clave SSH al servidor remoto:

ssh-copy-id <YOUR_REMOTE_USER>@<YOUR_REMOTE_SERVER>

Descomenta las variables REMOTE_USER, REMOTE_SERVER en la parte superior de tu backup_daily.sh, reemplaza <YOUR_REMOTE_USER> con tu nombre de usuario en el servidor remoto, <YOUR_REMOTE_SERVER> con el nombre de dominio de tu servidor remoto y guarda backup_daily.sh para habilitar la copia de seguridad remota.

Subiendo copias de seguridad a INTROSERV CloudBox

INTROSERV proporciona almacenamiento en línea que te permite guardar automáticamente o manualmente copias seguras de tus archivos y datos importantes en servidores remotos. Para usarlo como tu almacenamiento de copia de seguridad remota, inicia sesión en la interfaz web de CloudBox y agrega tu clave ssh pública al perfil. Los ajustes del perfil se encuentran en la esquina superior derecha.

Configuración del perfil de CloudBox

Inserta tu clave SSH pública en la sección "Claves públicas" para subir tu clave al servidor.

Sección de clave SSH pública de CloudBox

Descomenta las variables REMOTE_USER, REMOTE_SERVER en la parte superior de tu backup_daily.sh, reemplaza <YOUR_REMOTE_USER> con tu nombre de usuario en el servidor CloudBox, <YOUR_REMOTE_SERVER> con el nombre de dominio de tu servidor CloudBox y guarda backup_daily.sh para habilitar la copia de seguridad remota.

Probando las copias de seguridad

Antes de confiar en tu sistema, prueba las copias de seguridad.

  1. Ejecuta el script manualmente: sudo /usr/local/bin/backup_daily.sh
  2. Verifica los tamaños: du -sh /backups/*. Debe haber solo una copia de seguridad grande.
  3. Verifica la integridad de los archivos: ls -l /backups/daily.0/etc/

Restaurando datos

Puedes restaurar cualquier archivo individual:

cp /backups/daily.2/etc/nginx/nginx.conf /etc/nginx/

O restaurar todo:

sudo rsync -a /backups/daily.0/ /

Info

Advertencia: Restaurar directorios del sistema sobrescribe los archivos actuales.

Consideraciones de seguridad

  • Usa permisos estrictos en los directorios de copia de seguridad (chmod 700).
  • Si usas SSH, desactiva el inicio de sesión con contraseña, usa solo claves.
  • No almacenes copias de seguridad en el mismo disco que el servidor si es posible.
  • Encripta las copias de seguridad remotas usando LUKS o almacenamiento encriptado si es necesario.

Monitoreo y registro

El registro ya está agregado en cron: /var/log/backup.log

Revisa regularmente:

tail -f /var/log/backup.log

Conclusión

Usar rsync con cron ofrece:

  • Copias de seguridad incrementales rápidas
  • Uso eficiente del disco a través de enlaces duros
  • Proceso de restauración simple
  • Programación completamente automatizada

Este método es confiable y fácil para administradores novatos y funciona perfectamente en configuraciones de VPS con Linux.

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA