Blog Tinux Net

rsync-backup-incremental

Todas las publicaciones etiquetadas rsync-backup-incremental por Blog Tinux Net
  • Publicado en

    Rsync: Copias Incrementales

    El desarrollo de esta script es para hacer copias de seguridad que ademas cada cierto tiempo haga una copia completa y guarde un numero especifico de completas, eliminando las mas antiguas., pero también hacer como git en control de versiones pero sin ramificaciones.

    0.- Creamos una variable del path que queremos hacer la copia de seguridad. printenv para ver variables printenv HOME devuelve el path home

    1.- Creamos un directorio para la copia de seguridad:

    mkdir /mnt/backup
    

    dentro de ella creamos la main para la copia maestra

    mkdir /mnt/backup/main
    

    y otra para las incrementales

    mkdir /mnt/backup/incrementals
    

    2.- Utilizaremos varios parámetros de rsync para hacer una copia de seguridad distinta. Usa el comando rsync con las siguientes opciones clave:

    • -a: modo de archivo, preserva enlaces simbólicos, permisos, propietario, grupo, etc.
    • -b: hace una copia de seguridad de los archivos antes de actualizarlos.
    • --backup-dir: especifica el directorio donde se almacenarán las versiones anteriores de los archivos.
    • -u: actualiza solo archivos que han cambiado.
    • --delete: elimina archivos en el destino que ya no existen en el origen.
    • --exclude Los directorios o archivos que no queremos que se hagan copia de seguridad como por ejemplo los .git o los modules. Recomendable es crear un archivo de ficheros y/o directorios de exclusión exclude.txt Hay que tener cuidado con este Tip: si la ruta de destino no existe, rsync, la creará si tiene permisos, si se omite la barra al final del directorio «/», rsync, copiará el directorio de origen dentro del directorio de destino.

    Preparando el directorio para las incrementales:

    mkdir $(date +'%Y-%m-%d:%H%M')
    

    Comando date para generar el directorio con la fecha y la hora como versión. Luego inyectar al comando mkdir para crear con la fecha: Quedaría algo parecido a: 2024-07-05:0914

    Para respaldar el origen de la copia de seguridad. Podemos utilizar una variable para guardar la extensión del archivo y del directorio:

    dateincr=$(date +'%Y-%m-%d:%H%M')
    

    Para respaldar el directorio /home/origen/ al directorio /mnt/backup/ y almacenar versiones anteriores en un subdirectorio con la fecha:

    rsync -ab --backup-dir=/mnt/backup/`date + %F%H%M`
     -u --delete
     --exclude=/mnt/backup/ /home/origen/
     /mnt/backup/incrementales/
    

    Script final en zsh:

    #!/bin/zsh
    # 
    # Black        0;30     Dark Gray     1;30
    # Red          0;31     Light Red     1;31
    # Green        0;32     Light Green   1;32
    # Brown/Orange 0;33     Yellow        1;33
    # Blue         0;34     Light Blue    1;34
    # Purple       0;35     Light Purple  1;35
    # Cyan         0;36     Light Cyan    1;36
    # Light Gray   0;37     White         1;37
    
    # Regular Colors
    Black='\033[0;30m'        # Black
    Red='\033[0;31m'          # Red
    Green='\033[0;32m'        # Green
    Yellow='\033[0;33m'       # Yellow
    Blue='\033[0;34m'         # Blue
    Purple='\033[0;35m'       # Purple
    Cyan='\033[0;36m'         # Cyan
    White='\033[0;37m'        # White
    Orange='\033[1;33m'     #Yellow        1;33
    
    clear
    BackupSource=$(printenv PWD)/Source/;
    BackupMain=$(printenv PWD)/main/;
    BackupIncrementals=$(printenv PWD)/incrementals/;
    BackupDateIncrementals=$(date +'%Y-%m-%d:%H%M')
    
    echo "La mecaniva de este script es la siguiente:";
    echo "Del archivo Fuente (Source) hace previamente una copia inicial de diferencianasnteriores al archivo de incrementales de los archivos que se han detectado como Modificado ";
    echo "Luego hace una actualizacion el archivo main con los nuevos cambios que se han detectado en el Source";
    echo "la primera copia se denomina Full Backup";
    
    echo '***************************************************';
    echo '*                                                 *';
    echo '*                                                 *';
    echo "*     ${Green} Sistema de copia de Seguridad Incremental ${White}   *";
    echo '*                                                 *';
    echo "*    ${Purple}El directorio Origen:                        *";
    echo "*     ${Cyan}$BackupSource            *";
    echo '*                                                 *';
    echo '*                                                 *';
    echo '*    El directorio Main:                          *';
    echo "*     $BackupMain              *";
    echo '*                                                 *';
    echo '*                                                 *';
    echo '*    El directorio de Incrementales:              *';
    echo "*     ${Orange}$BackupIncrementals      *";
    echo '*                                                 *';
    echo '*                                                 *';
    echo '***************************************************';
    
    echo 'Archivos en el directrio Fuente';
    eza --color $BackupSource
    echo 'Archivos en la Copia Main del Backup';
    eza --color $BackupMain;
    echo '______________________________________________________';
    echo '\n';
    echo 'Variable de generacion del la version de la Incremental';
    echo 'BackupDateIncrementals: '$BackupDateIncrementals;
    echo '\n';
    echo 'Ejemplo de posible script hecho con la devolucion de variables:';
    echo 'Crea el directorio para la Incremental:'
    mkdir $BackupIncrementals/Backup-$BackupDateIncrementals;
    rsync -avhb --delete --backup-dir=$BackupIncrementals/Backup-$BackupDateIncrementals $BackupSource $BackupMain;
    # rsync -avhb --delete --backup-dir=/ruta/destino/copia_$(date +%d%m%Y%H%M) /ruta/origen/ /ruta/destino/ 
    echo '\n';
    echo 'Listado de directorio creados'
    eza -al $BackupIncrementals;
    
    echo 
    echo '***************************************************';
    echo '*                                                 *';
    echo '*                                                 *';
    echo '*                                                 *';
    echo "*    ${Purple}Ficheros en Origen:                 *";
    echo "*     ${Cyan}$BackupSource                       *";
    echo "*      $(eza $BackupSource)                        *"; 
    echo '*                                                 *';
    echo '*                                                 *';
    echo '*    Ficheros en la main del Backup:              *';
    echo "*     $(eza  $BackupMain)                         *";
    echo '*                                                 *';
    echo '*                                                 *';
    echo '*    Los ficheros Incrementados:              *';
    echo "* $(eza $BackupIncrementals"Backup"-$BackupDateIncrementals )                  *";
    echo '*                                                 *';
    echo '*                                                 *';
    echo '***********************