[TUTORIAL] Sincronizar las carpetas personales en varios equipos

Spanish Forum

Moderator: tomeu

Post Reply
User avatar
Wibol
Level 5
Level 5
Posts: 584
Joined: Fri Nov 27, 2015 7:00 am
Location: España

[TUTORIAL] Sincronizar las carpetas personales en varios equipos

Post by Wibol »

Cada día es más habitual tener en casa varios equipos en los que tenemos una cuenta, pero sólo en uno de ellos nos sentimos cómodos ya que en él contamos con todos nuestros documentos, imágenes, música, etc... Vamos a poner solución a esto realizando una sincronización automática.

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.

Captura de pantalla de 2021-02-24 08-10-33.png

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
Y comprobamos que está activo:

Code: Select all

systemctl status sshd
Si no fuera así:

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
Si todo ha ido bien, salimos con exit.

Creamos una clave ssh para no tener que introducir contraseña:

Code: Select all

ssh-keygen -f ~/.ssh/rsync
No es necesario establecer contraseña. Sólo pulsamos Intro dos veces.
Y la copiamos al servidor para que pueda reconocernos:

Code: Select all

ssh-copy-id -i ~/.ssh/rsync.pub pepe@192.168.1.2
Conectamos de nuevo para comprobar que ya no pide contraseña:

Code: Select all

ssh pepe@192.168.1.2
Y volvemos a salir con exit.
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.
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:

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
Y le añadimos:

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
No es necesario hacerlo ejecutable puesto que lo lanzaremos usando su intérprete de comandos.
Por último añadimos una tarea cron para automatizarlo:

Code: Select all

crontab -e
Y agregamos:

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/
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.
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.

Antes de realizar una consulta, no olvides:
User avatar
JOPETA
Level 17
Level 17
Posts: 7674
Joined: Thu Nov 20, 2014 6:10 am
Location: En un lugar de cuyo nombre no quiero acordarme

Re: [TUTORIAL] Sincronizar las carpetas personales en varios equipos

Post by JOPETA »

Muchas gracias por compartir Wibol. :D

No soy de compartitr cosas entre equipos pero supogo, por aquello de la resincronización, que esta forma de hacerlo tendrás ventajas sobre el warpinator que ahora instala por defecto Linux Mint 20.X (por lo pronto no necesita la parafernalia de flatpak). :?:

En cualquier caso lo incorporo al Índice de temas esenciales en el apartado dedicado a Redes y Compartición en espera de que el moderador o JCSenar hagan lo propio y lo incluyan en la Relación de Tutoriales si no tienen nada que objetar. :wink:
Ni cola de león ni cabeza de ratón, prefiero ser diente de ajo.(Javier Krahe)
User avatar
Wibol
Level 5
Level 5
Posts: 584
Joined: Fri Nov 27, 2015 7:00 am
Location: España

Re: [TUTORIAL] Sincronizar las carpetas personales en varios equipos

Post by Wibol »

Hola Jopeta:

Por lo que he leído en los últimos meses "warpinator" es una solución para el envío manual y puntual de archivos entre dispositivos. Me recuerda mucho a compartir archivos vía bluetooth entre teléfonos, lo que me parece una opción genial para el intercambio de archivos entre familiares o compañeros de trabajo (diferentes usuarios). Seleccionas un par de archivos y destinatario y éste debe permitir la recepción de los mismos y guardarlos.

La sincronización automática me parece más cómoda cuando hablamos de un mismo usuario que usa diferentes equipos y después de mucho pensarlo, creo que el único peligro añadido que supone es el corte de la conexión durante una sincronización. Pero teniendo en cuenta que la mayoría de las veces sólo se hará una comprobación y que nuestro equipo de trabajo habitual es el que usamos de servidor, creo que es mínimo. Confío en que los desarrolladores de Rsync hayan contemplado esta posibilidad y minimizado los riesgos.

Tampoco debemos considerar esta opción como una copia de seguridad y abandonar nuestros backups periódicos. Si bien en el caso de estropearse la partición o disco duro en el que residen los datos, quedaría copia en los otros equipos ante la imposibilidad de sincronizar, yo no me fiaría del todo.

"Redes y compartición" me parece el lugar idóneo.

Saludos y gracias.

Antes de realizar una consulta, no olvides:
Post Reply

Return to “Español (Spanish)”