Rsync (
rsync -opciones origen destino
) es una herramienta de línea de comandos especialmente diseñada para ello. Copia aquellos archivos que existen en "origen" pero no en "destino", elimina de "destino" aquellos que ya no existen en "origen" y sincroniza los que existen en ambos lados quedándose con la versión más reciente de cada elemento. Las opciones que usaremos (rsync --help
) dependen de si ejecutamos rsync manualmente desde la terminal o a través de un script.Supongamos que contamos con PC1, PC2 y Portátil conectados a nuestra red local. PC1 es el equipo principal que contiene los archivos personales y al que llamaremos Servidor. Necesita tener una IP fija local (192.168.1.2) para que los otros PCs puedan acceder a él y realizar la sincronización. PC2 y Portátil serán los clientes en los que queremos tener disponibles los ficheros contenidos en las carpetas Documentos, Imágenes, Música y Vídeo del usuario "pepe" del Servidor. Los archivos se podrán editar desde cualquier equipo y los cambios se propagarán hacia el resto, pero sólo se podrán eliminar definitivamente desde el Servidor. Los elementos marcados en rojo deben ser sustituidos por los adecuados a nuestro caso.
Los elementos eliminados en Servidor desaparecerán de los clientes en la siguiente sincronización, pero se podrán recuperar desde la papelera de Servidor siempre que hayamos seleccionado la opción "Mover a la papelera" a la hora de borrarlos. Si cometemos el error de eliminar definitivamente (sin enviar a la papelera) un elemento en Servidor, aún nos queda la posibilidad de desconertar el equipo de la red antes de la siguiente sincronización. Los eliminados manualmente en los clientes, volverán a aparecer en la siguiente sincronización debido a que siguen existiendo en Servidor.
Configuracion del Servidor
Instalamos el servicio "ssh":
Code: Select all
apt install openssh-server
Code: Select all
systemctl status sshd
Code: Select all
sudo systemctl enable --now sshd
Configuración de clientes
Comprobamos que podemos conectarnos al servidor:
Code: Select all
ssh pepe@192.168.1.2
exit
.Creamos una clave ssh para no tener que introducir contraseña:Más información sobre acceso a terminales remotas con SSH.
Code: Select all
ssh-keygen -f ~/.ssh/rsync
Y la copiamos al servidor para que pueda reconocernos:No es necesario establecer contraseña. Sólo pulsamos Intro dos veces.
Code: Select all
ssh-copy-id -i ~/.ssh/rsync.pub pepe@192.168.1.2
Code: Select all
ssh pepe@192.168.1.2
exit
.Si tenemos archivos en nuestros clientes que no queramos perder, es el momento de copiarlos a Servidor con alguno o todos estos comandos, introducidos de uno en uno:Es MUY recomendable hacer copias de seguidad de las carpetas que vamos a manipular tanto en el servidor como en clientes ya que algo podría ir mal.
Code: Select all
rsync -azvh /home/pepe/Documentos/ 192.168.1.2:/home/pepe/Documentos/
rsync -azvh /home/pepe/Imágenes/ 192.168.1.2:/home/pepe/Imágenes/
rsync -azvh /home/pepe/Música/ 192.168.1.2:/home/pepe/Música/
rsync -azvh /home/pepe/Vídeos/ 192.168.1.2:/home/pepe/Vídeos/
Creamos un script que contendrá todos los comandos a ejecutar en cada sincronización:
Code: Select all
nano ~/rsync.sh
Code: Select all
#!/bin/bash
rsync -azq --delete 192.168.1.2:/home/pepe/Documentos/ /home/pepe/Documentos/
rsync -azq --delete 192.168.1.2:/home/pepe/Imágenes/ /home/pepe/Imágenes/
rsync -azq --delete 192.168.1.2:/home/pepe/Música/ /home/pepe/Música/
rsync -azq --delete 192.168.1.2:/home/pepe/Vídeos/ /home/pepe/Vídeos/
Comprobamos que funciona con:
Code: Select all
/bin/bash /home/pepe/rsync.sh
Por último añadimos una tarea cron para automatizarlo:No es necesario hacerlo ejecutable puesto que lo lanzaremos usando su intérprete de comandos (/bin/bash).
Code: Select all
crontab -e
Code: Select all
*/5 * * * * /bin/bash /home/pepe/rsync.sh
La expresión "*/5" hará que el script se ejecute cada 5 minutos, coinciciendo con los minutos 00, 05, 10, 15, etc... de cada hora. La mayoría de las ocasiones sólo se realizará una comprobación debido a la inexistencia de cambios, por lo que no supone un consumo de recursos destacable.
Otras opciones
En teoría también sería posible sincronizar todo el home (NO lo he probado), pero excluyendo aquellos elementos que comienzan por un punto (ocultos), para evitar copiar configuraciones de escritorio y aplicaciones que podrían dar problemas en los clientes:
Code: Select all
rsync -azq --exclude '.*' 192.168.1.2:/home/pepe/ /home/pepe/
Otra opción más sencilla pero menos útil sería crear tanto en el Servidor como en los clientes una carpeta llamada "Intercambio" o similar y sincronizarlas.Hay que tener en cuenta que esta modalidad copiará tambien los directorios Descargas y Escritorio. El primero podría tener un gran volumen de datos innecesarios y el segundo, lanzadores que podrían no funcionar en los clientes.