Procédure
Rsync permite sincronizar archivos a través de la línea de comandos, de modo que puede realizar copias de seguridad de archivos de un lugar a otro sincronizándolos según el origen.
El siguiente script le permitirá realizar una copia de seguridad completa una vez al mes y una copia de seguridad parcial una vez a la semana.
El siguiente script le permitirá crear un script de copia de seguridad remota con Rsync. El script comprobará la presencia de la carpeta de origen, probará la accesibilidad del servidor y creará una nueva carpeta cada mes en la que insertará una copia de seguridad completa.
#!/bin/sh month=`fecha +%B` day=`fecha +%d-%m-%Y` hour=`fecha +%T` log="/home/usuario/logs_backups" local="/carpeta/usuario" remote="/archivos/backups_$mes/" hostssh="ip_server" userssh="login" counter=5 retention=`fecha +%B --fecha='hace 1 mes'` name() { echo "-------------------------------------------------------------" > $log/día_backups > $log/$day_backup.log echo -e "$copia de seguridad local de $(fecha +%d-%B-%Y)" >> $log/$day_backup.log echo "-------------------------------------------------------------" ¡>> $log/$day_backup.log }# Si el directorio que contiene los registros no existe, se creará.if [ ! -d $log ];then mkdir $log fi # Comprobamos la presencia de la carpeta de origen Y que el servidor responde al pingrecus=$(ping -c $counter $hostssh | grep 'received' | awk -F',' '{ print $2 }' | awk '{print $1 }') > /dev/null 2>&1 if [[ ! -d $local ]] && [[ $recus -eq 0 ]];then name echo -e "$day-$hour :\n" >> $log/backup_$day.log echo -e "$local ya no existe o es inaccesible.\nServidor inaccesible ($hostssh : $contador de paquetes transmitidos, $recus paquetes recibidos).\nNo se ha realizado ninguna copia de seguridad." >> $log/sauvegarde_$jour.log exit# Sólo comprobamos la presencia de la carpeta deorigen elif [ ! -d $local ];then name echo -e "$jour-$heure : $local n'existe plus ou est inaccessible.\nAuc aucune sauvegarde effectuée." >> $log/sauvegarde_$jour.log exit# Sólo comprobamos el ping del servidorelif [ $recus -eq 0 ];then name echo -e "$jour-$heure : Serveur inaccessible ($hostssh : $compteur paquets transmises, $recus paquets reçus).\nNo se ha realizado ninguna copia de seguridad." >> $log/sauvegarde_$jour.log exit fi echo "-------------------------------------------------------------" > $log/backup_day.log echo "Copia de seguridad de $local desde $(fecha +%d-%B-%Y)" >> $log/backup_day.log echo "-------------------------------------------------------------" >> $log/backup_$day.log # Hora de inicio de la transferencia en el registro echo "Hora de inicio de la copia de seguridad: $(fecha +%T)" >> $log/backup_$day.log echo "-------------------------------------------------------------" >> $log/backup_$day.log # Transferencia de archivosrsync -avz --stats --protect-args --delete-after -e ssh $local $userssh@$hostssh:$distant >> $log/backup_$day.log # -a : modo archivo ( equivalente -rlptgoD ). # -z : compresión de datos durante la transferencia.
-e : para especificar el uso de ssh # -- stats : da información sobre la transferencia (número de ficheros...). # --protect -args : si necesita transferir un nombre de fichero que contenga espacios, puede especificarlo con esta opción. # --delete-after : borra los ficheros que ya no existen en el origen tras la transferencia a la carpeta de destino.
status=$? echo "" >> $log/day_backup.log# rsync return codescase $status in 0) echo Éxito >> $log/day_backup.log; 1) echo Error de sintaxis o de uso >> $log/day_backup.log; 2) echo Incompatibilidad de protocolo >> $log/day_backup.log;; 3) echo Errores al seleccionar ficheros y directorios de entrada/salida >> $log/sauvegarde_$jour.log;; 4) echo Acción no soportada: intento de manipular ficheros de 64 bits en una plataforma que no los soporta ; o una opción soportada por el cliente pero no por el servidor. >> 5) echo Error al iniciar el protocolo cliente-servidor >> $log/sauvegarde_$jour.log;; 6) echo daemon unable to write to log file >> $log/sauvegarde_$jour.log;; 10) echo I/O socket error >> $log/sauvegarde_$jour.log; 11) echo I/O file error >> $log/sauvegarde_$jour.log;; 12) echo Error en el flujo de datos del protocolo rsync >> $log/save_$day.log;; 13) echo Error en el diagnóstico del programa >> $log/save_$day.log;; 14) echo Error en el código IPC >> $log/save_$day.log;; 20) echo SIGUSR1 o SIGINT recibido >> $log/save_$day.log;; 21) echo "Un error devuelto por waitpid()" >> $log/save_$day.log;; 22) echo Error asignando buffers de memoria principal >> $log/sauvegarde_$jour.log;; 23) echo Transferencia parcial debido a un error >> $log/sauvegarde_$jour.log;; 24) echo Transferencia parcial debido a la desaparición de un fichero fuente >> $log/sauvegarde_$jour.log;; 25) echo Se ha alcanzado el límite --max-delete >> $log/sauvegarde_$jour.log;; 30) echo Se ha excedido el tiempo máximo de espera al enviar/recibir datos >> $log/sauvegarde_$jour.log;; 35) echo Se ha excedido el tiempo de espera al esperar una conexión >> $log/sauvegarde_$jour.log;; 255) echo Error inexplicable >> $log/sauvegarde_$jour.log;; esac echo "-------------------------------------------------------------" >> Hora final en elregistro echo "Hora final de copia de seguridad: $(fecha +%T)" >> $log/backup_$day.log echo "-------------------------------------------------------------" >> $log/backup_$day.log# Las copias de seguridad se borran según la retención.ssh $userssh@$hostssh rm -rf "backups_$retention" exit
fuente : GitHub tuxmika
Ahora puede crear un script de copia de seguridad remota utilizando Rsync para transferir archivos y carpetas a su espacio de copia de seguridad en línea utilizando LWS. Puedes ejecutar tu script a través de una tarea cron para que se inicie una vez a la semana.
¡No dudes en compartir tus preguntas y comentarios!
Hágala al equipo de LWS y a la comunidad. La respuesta se publica tras la moderación.