rsync por VPN: ¿qué lado es la fuente de la verdad?
Un túnel te da una ruta, no una política de fusión. Elige la copia autoritativa, previsualiza la copia unidireccional y decide después, por separado, si los borrados viajan.
Dos servidores, una VPN, un directorio que debe existir en ambos lugares y un comando fácil de ejecutar y difícil de deshacer. Antes de escribirlo, decide qué copia es la autoritativa, porque cada pregunta posterior sobre rsync depende de esa respuesta. Una réplica unidireccional, una carpeta de trabajo compartida y un archivo versionado necesitan reglas distintas para ediciones y borrados. El túnel aporta la ruta y no opina sobre ninguna de ellas.
Decide qué copia manda antes de escribir un comando
Escribe la dirección en una frase, incluidos el nombre de host y la ruta de cada lado, y consíguela aprobada por quien es dueño de los datos. En este recorrido el origen es /srv/publish/ y el destino es una cuenta en fileserver.example que solo puede escribir en /srv/mirror/.
Confirma los hechos de transporte antes de la copia: la clave de host SSH está verificada, la cuenta de destino puede escribir en el área de réplica y en nada más, y ambos hosts tienen versiones de rsync compatibles. Estas condiciones evitan que un pequeño error de planificación se convierta en un incidente de permisos. También te dicen qué cuenta aparecerá en los registros del destino cuando algo salga mal.
Previsualiza la copia y lee la lista detallada
Ejecuta primero la copia con la opción de previsualización y conserva la salida. Los cambios detallados te dicen qué pasaría con cada ruta, lo que es mucho más útil que un resumen de finalización posterior. Guarda la salida en el registro de cambios para que la siguiente ejecución tenga algo con lo que compararse.
rsync -rt --dry-run --itemize-changes -e ssh -- /srv/publish/ [email protected]:/srv/mirror/
La barra final importa. En el origen significa el contenido de ese directorio, mientras que omitirla añade un nivel de directorio con el nombre del origen. El manual de rsync documenta ambas formas junto con las opciones de preservación, y el conjunto de opciones que necesitas depende de los datos, no de la costumbre.
Lee cada línea pensando en el destino que pretendías. Quitar la opción de previsualización ejecuta la copia y puede sobrescribir archivos, y sin una opción de borrado los archivos sobrantes que ya están en el destino simplemente se quedan donde están. Eso solo es el valor seguro por defecto si de verdad has decidido que dejar archivos obsoletos atrás es aceptable. Si la respuesta es no, la decisión de borrado de más abajo es la que hay que tomar, no una opción extra que espolvorear en este comando.
Después decide si los borrados viajan
Convertir el destino en un espejo es una segunda decisión, no un refinamiento de la primera. Previsualízala por separado, con la opción de borrado añadida y nada más cambiado, para que la diferencia en la lista pertenezca por completo a esa decisión.
rsync -rt --delete --dry-run --itemize-changes -e ssh -- /srv/publish/ [email protected]:/srv/mirror/
Los borrados eliminan archivos sobrantes del lado receptor dentro del ámbito sincronizado, y por eso una ruta de origen equivocada, un directorio sin montar o un filtro que excluye más de lo previsto pueden hacer que una ejecución destructiva parezca un espejo limpio. La lista de previsualización es el único lugar donde esa diferencia se hace visible antes de volverse cara. Mantén una copia de recuperación independiente donde los datos lo justifiquen, y recuerda que un espejo reproduce fielmente un borrado accidental en lugar de conservar el historial.
Una previsualización tampoco bloquea nada. La gente edita archivos entre el ensayo y la ejecución real, y los sistemas de archivos tienen sus propias opiniones, así que la ejecución que apruebas y la que se ejecuta no son la misma operación salvo que ambos árboles estén quietos.
Dos tareas unidireccionales no hacen una sincronización bidireccional
Ejecutar el mismo comando en ambos sentidos es la forma más común de perder datos en este escenario. Cada dirección trata al otro lado como destino y sobrescribe alegremente contenido más reciente, y los borrados se reflejan en el orden en que se dispara la programación.
Si los usuarios deben editar ambas copias, esa es otra decisión de producto: gestión de conflictos, seguimiento de borrados y una herramienta diseñada para ese modelo. Aproximarlo con el orden de la programación es cómo una carpeta compartida acaba con dos versiones de cada documento que nadie puede reconciliar. Decídelo explícitamente en lugar de aproximarlo con dos entradas de cron y esperanza.
Automatiza solo después de escribir la política
Una tarea programada debe llevar la dirección, las rutas, la política de metadatos y la decisión de borrado aprobada. Pon esos cinco hechos en el propio archivo de la tarea, no en una página wiki que el siguiente administrador quizá nunca lea. Evita ejecuciones solapadas, porque dos copias escribiendo el mismo árbol a la vez producen un estado que ninguna de las dos pretendía.
Cuando el origen es una base de datos activa u otro conjunto de datos con varios archivos, haz primero una exportación coherente con la aplicación o una instantánea coordinada. Un recorrido recursivo de archivos no es una transacción, y una copia de un conjunto de datos que cambia no es coherente.
Registra las finalizaciones y los fallos, y comprueba el conjunto de datos en el destino en lugar de solo el código de salida. Restaurar la VPN tras una caída restaura la conectividad; no dice nada sobre si la última copia terminó ni sobre si las ediciones en conflicto llegaron a resolverse.