Sincronización HOME en NAS WD (tr_rsynt_to_wd.sh)
Limpieza de archivos y directorios (tr_limpieza.sh)
Backup documentación importante en la nube (tr_backup_important.sh)
Información a proporcionar de cada backup
Funcionamiento de _backup_dirs
Es sistema de mantenimiento está compuesto por los siguientes script,s:
tr_cron.sh
tr_backup_important.sh
tr_check_backup_deja_dup.sh
tr_limpieza.sh
tr_rsync_to_wd.sh
Es el encargado de lanzar las tareas de mantenimiento, se lanza desde el
crontab del usuario:
@reboot bash /home/juanp/script_juanp/00_estudio_1/tr_cron.sh
Este script realiza una copia de seguridad cifrada en la nube de los direc-
torios que se le indiquen con el intervalo establecido.
Revisa e informa de la última fecha/hora en la que se realizó la copia de
seguridad programada en Deja-dup.
Este script elimina los archivos antiguos y directorios vacíos de los direc-
torios que se le indican.
Este script sincroniza HOME en el NAS WD con las exclusiones indicadas en
el archivo de exclusiones.
Este script sincroniza HOME en el NAS WD con las exclusiones indicadas en el
archivo de exclusiones.
El comando que se ejecuta es:
rsync -rtv \
--delete-after \
--max-delete=8000 \
--modify-window=2 \
--exclude-from="$FILE_EXCLUDES"
"$ORIGEN" "$DESTINO" \
2> "$FILE_LOG_ERROR" | _log_add
r: Copia directorios y su contenido de forma recursiva.
t: Mantiene la fecha y hora de modificación de los archivos copiados.
v: Muestra en pantalla los archivos que se van copiando.
delete-after: Elimina en el destino los archivos que ya no existen en el
origen después de terminar la transferencia.
max-delete=8000: Limita a 8000 archivos eliminados por ejecución.
Si se supera ese número, rsync se detiene.
Sirve como medida de seguridad ante borrados masivos accidentales.
modify-window=2: Permite una diferencia de hasta 2 segundos en la compa-
ración de fechas de modificación. El FS de NAS WD no distingue/soporta
diferencias menores.
No se copian de ninguna forma los symlinks, no se usa:
l [--links]: preservar symlinks porque el NAS WD está montado con SMB/CIFS
y el FS no los soporta.
L [--copy-links]: seguir symlinks porque genera errores con los enlaces
rotos (code 23).
-h --help: Muestar esta ayuda
-v --version: Muestra la versión del script
-i --informacion: Muestar información del script
-f --force: Ejecuta el script con independencia del tiempo transcurrido
desde la última vez que se hizo.
-d --dry-run: Se ejecuta en modo simulación.
Se ha de establecer un valor para:
Para rsync:
ORIGEN: Origen de la sincronización. Si no finaliza con contrabarra
se le añadirá.
DESTINO: Destino de la sincronización. Si no finaliza con contrabarra
se le añadirá.
FILE_EXCLUDES: Archivo con las exclusiones
Para comprobar que el destino esté montado correctamente:
SOURCE: Origen del punto de montaje
TARGE: Destino del punto de montaje
Otros:
NUM_DIAS_LOGS: Número de días que se mantendrán los log,s. Es-
tablecido en 30.
INTERVALO: Número de horas que han de pasar entre una copia y
la siguiente. Establecido en 12 horas.
El archivo de exclusiones debe encontrase en el directorio de configuración
del script.
Los archivos/carpetas a excluir han de indicarse respecto a la carpeta
raíz de la sincronización. Han de comenzar por contrabarra o un símbolo
de comodín.
Las carpetas han de finalizar con contrabarra /
Si se incluye una carpeta/archivo a excluir del que se haya hecho ya copia
de seguridad, hay que eliminarlo de la copia manualmente. Incluir archivos
y/o carpetas en exclusiones, no implica que sean borradas de la copia de
seguridad si ya se hubiera realizado una copia.
Este script elimina los archivos antiguos y directorios vacíos de los direc-
torios que se le indican.
-h --help: Muestar esta ayuda
-v --version: Muestra la versión del script
-i --informacion: Muestar información del script
-f --force: Ejecuta el script con independencia del tiempo transcurrido
desde la última vez que se hizo.
-d --dry-run: Se ejecuta en modo simulación.
Se ha de establecer un valor para:
NUM_DIAS_LOGS: Número de días que se mantendrán los log,s. Es-
tablecido en 30.
INTERVALO: Número de horas que han de pasar entre una copia y
la siguiente. Establecido en 12 horas.
Los directorios a tratar se indican en el siguiente array:
A_DIR_TO_CLEAN=(
"$HOME/Descargas;15;*"
"$HOME/temporal;30;*"
"$HOME/Imágenes/Capturas de pantalla;30;*"
"$HOME/Descargas;1;torrent"
"$PATHSCRIPT/files/files_logs;30;*"
"$PATHSCRIPT/files/files_log_error;30;*"
"$PATHSCRIPT/files/files_pid;30;*"
De cada directorio a tratar se indica:
Path absoluto
Número de días de antigüedad a partir de la que se eliminarán los archivos.
Extensión de los archivos a eliminar. El patrón * eliminará hará que la
tarea se aplique a todos los archivos.
Este script realiza una copia de seguridad cifrada en la nube de los directo-
rios que se le indiquen con el intervalo establecido.
La nube usada es MEGA y se usa el paquete megacmd para el acceso a la misma.
Puede realizar uno o varios backup,s.
El script puede recibir:
-f [--force]: Hará que se realice el backup con independencia del intervalo
transcurrido y de que no haya modificaciones.
-h [--help]: Mostrará la ayuda
-i [--informacion]: Muestra información del script
-v [--version]: Mostrará la versión/fecha del script
Se ha de establecer un valor para:
NUM_DIAS_LOGS: Número de días que se mantendrán los log,s.
Archivo que contiene la lista de los directorios de los que se realiza-
ra el backup.
Este archivo puede contener líneas de comentarios precedidas por el sím
bolo #. Las líneas que contienen los directorios a incluir en el
backup no deben tener espacios iniciales ni finales.
[Opcional] Archivo que contiene la lista de las exclusiones que se rea-
lizarán a la hora de comprobar si ha habido modificaciones en los dire-
torios desde el último backup realizado.
Este archivo puede contener líneas de comentarios precedidas por el sím
bolo #.
Archivo con la contraseña con la que se cifrará el backup antes de su-
birlo a la nube
Directorio temporal donde se almacenará los archivos temporales gener-
rados durante el proceso.
Swicht [FOCE_BACKUP] que indicará si se fuerza (1) o no (0) la reali-
zación del backup, con independencia de haya o no modificaciones.
Directorio de destino donde se almacenará el backup cifrado.
Archivo que contiene las credenciales de acceso al almacenamiento en
la nube. En la primera línea el nombre del usuario y en la segunda la
contraseña.
Intervalo de tiempo, en horas, que debe transcurrir como mínimo entre
dos backup,s.
Al final del script se definen los backup,s a realizar:
# Backup 1
INTERVALO=1
PREFIJO_BACKUP="f_bckp_11"
PATH_DESTINO_MEGA="/backup_new"
FILE_CREDENCIALES_MEGA="/home/juanp/script_juanp/files/files_pass/mega.passw"
FILE_PASW_COMPRES="$K_CFG_SCRIPTS_PATH_SYSTEM/files/files_pass/file.passw"
FILE_FOLDERS=$(mktemp -p "$K_CFG_TMP_DIR_SCRIPT" tmp.XXXXXX)
FILE_EXCLUDES=$(mktemp -p "$K_CFG_TMP_DIR_SCRIPT" tmp.XXXXXX)
_scp_debug "$FILE_FOLDERS"
cat >> "$FILE_FOLDERS" < # Direcciones absolutas, sin espacios en blanco al inicio o final y sin barra # final $HOME/Documentos/banco $HOME/Documentos/Renta $HOME/Documentos/0_Familia $HOME/script_juanp/files/files_pass $HOME/Documentos/casa $HOME/.var/app/org.gnome.Shotwell/data $HOME/.local/share/evolution $HOME/.gnupg EOF cat >> "$FILE_EXCLUDES" < $HOME/.gnupg/random_seed EOF
Tras ello se llama a la función encargada de realizar el backup:
_backup_dirs "$FILE_FOLDERS" \
"$FILE_EXCLUDES" \
"$FILE_PASW_COMPRES" \
"$K_CFG_TMP_DIR_SCRIPT" \
"$PREFIJO_BACKUP" \
"$FORCE_BACKUP" \
"$PATH_DESTINO_MEGA" \
"$FILE_CREDENCIALES_MEGA" \
"$INTERVALO"
Comprobar los parámetros recibidos
Comprobar hay que realizar el backup:
Backup forzado o no
Intervalo
Modificaciones
Crear un archivo tar con los directorios.
Comprimir el archivo tar.
Cifrar el archivo tar.
Crear un script para ayudar a descifrar el backup cifrado y comprimirlo.
Subir a MEGA el backup cifrado y el script de ayuda.
Guarda la información de la tarea realizada.
Del backup:
Prefijo
Nombre del fichero que lo contiene
Directorio de MEGA donde se almacena
Hash del archivo
Momento en el que realizó el backup
name = f_bckp_11
name_file_upload = f_bckp_11_20260205085500.tar.gz.gpg
path_file_upload = /backup_new/f_bckp_11
hash_file = 63f6dcc6e69d54ebb18b80d5c7cb462ceab50e8c5a6aba11d69b941d984fa116
time_backup = 1770321300009
.- De cada directorio:
.- Directorio que se procesa
.- Momento en el que se procesa
.- Momento en el que se procesa en fecha/hora standar
.- Se usa o no fichero exclude
folder = /home/juanp/Documentos/banco
last_run = 1770314373731
last_run_date = 2026-02-05 18:59:33.731
file_excludes = SI (ver en log)
El script genera un archivo de log de cada ejecución y lo almacena en la
carpeta de logs, estos archivo se mantendrán durante el número de días que
se haya establecido en NUM_DIAS_LOGS.
La información persistente se almacena en el archivo ini del script