- Publicado en
- • Shells commands (bash, zash)
Crear Backup incremental con rsync
- Autor
-
-
- Usuario
- tinux
- Publicaciones de este autor
- Publicaciones de este autor
-
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 '***********************