El viernes por la noche, el equipo actualiza la puesta en escena: rsync prod → staging con --delete para reflejar la producción exacta. El lunes por la mañana, la puesta en escena es correcta, pero la producción muestra archivos faltantes. Un cron mal comentado invirtió la dirección: la puesta en escena para incitar. rsync borró el producto para que coincida con la puesta en escena parcialmente vacía.
rsync es la herramienta elegida para duplicaciones rápidas e implementaciones basadas en archivos. También es simétrico en su peligrosidad: las mismas banderas que se sincronizan correctamente pueden destruir años de archivos con un solo comando. La barra diagonal final, --delete, la dirección SRC→DST y las exclusiones no son detalles: son la línea entre una actualización saludable y un incidente P1.
Barra diagonal: la regla para tatuarse
rsync -av prod:/var/www/ staging:/var/www/
# copiar el CONTENIDO de /var/www/
rsync -av prod:/var/www puesta en escena:/var/www/
# crea staging:/var/www/www — anidamiento anidado
Con la barra diagonal al final de la fuente, rsync copia el contenido del directorio. Sin barra, copia la carpeta misma al destino. El error www/www es un clásico de la preparación de actualizaciones.
Documente la convención en cada script: comente # SRC=prod:/var/www/ DST=staging:/var/www/ con flechas explícitas.
--ejecución en seco y --delete
Siempre -n o --dry-run antes de cualquier sincronización con --delete. Luego --itemize-changes para una auditoría legible. Cualquier línea *eliminar en la salida = pausa obligatoria, dirección de relectura, copia de seguridad con fecha.
--delete elimina en el destino lo que ya no existe en el origen. Aceptable solo después de la validación del ensayo, la fecha del destino de la copia de seguridad, la dirección escrita en blanco y negro y la revisión con dos pares de ojos.
Nunca --delete en cron sin monitorear el código de salida y la alerta por correo electrónico si no es cero.
Dirección, rebaño y directorio de respaldo
| Necesidad | Patrón seguro |
|---|---|
| Actualizar puesta en escena | prod → preparación, eliminar solo preparación |
| Espejo DR | prod → DR, suma de comprobación -c periódica |
| Implementar | Artefacto CI, no producto entero rsync |
flock en cron evita dos superposiciones de sincronización. --backup --backup-dir=dated/ antes de la eliminación masiva: guarda una copia con marca de tiempo de los archivos eliminados.
Variable RSYNC_RSH=ssh explícita; Armonizar la versión rsync de GNU y BSD entre servidores antes de la automatización.
Exclusiones y trampas
Archivo --exclude-from versionado por Git: .env, storage/sessions, uploads, cachés de tiempo de ejecución, node_modules. Nunca sincronice el caché con el producto o los secretos con una puesta en escena no desinfectada.
--delete-excluded es ultra peligroso; evítelo excepto en casos expertos documentados.
rsync también propaga ransomware: un espejo rsync por sí solo no es una estrategia de copia de seguridad. Empareja Borges inmutables o inmutables para la historia; rsync para velocidad de espejo.
Seguimiento y formación
Alias rsync-safe='rsync -av --dry-run --itemize-changes' para todo el equipo de operaciones. Eliminar simulacro = acto consciente firmado.
Post-sincronización: número de diferencia de secuencia de comandos de archivos de origen/destino. Correo cron en salida distinta de cero: clásico fracaso silencioso del viernes por la noche.
Incorporación 30 min: prueba de barra diagonal, lectura post-mortem en dirección inversa. Dos crons en direcciones opuestas = pérdida de datos a largo plazo: revisión arquitectónica obligatoria.
Versionado en pareja
Velocidad de Rsync, restablecimiento histórico: restauración de la verdad de la fuente documentada.
Dos direcciones opuestas de cron rsync = eventual pérdida de datos: revisión de la arquitectura de sincronización bidireccional.
Monitoreo operativo
Capacitación sobre explotación de incorporación de rsync: 30 minutos evita incidentes de fin de semana. Ejercicio de prueba de barra diagonal. Correo cron en la salida de rsync distinta de cero: error silencioso clásico del viernes por la noche. Documente las brechas entre la promesa del proveedor de hosting y la medición de campo en la revisión trimestral.
Continuación trimestral
Capacitación sobre explotación de incorporación de rsync: 30 minutos evita incidentes de fin de semana. Ejercicio de prueba de barra diagonal. Correo cron en la salida de rsync distinta de cero: error silencioso clásico del viernes por la noche. Documente las brechas entre la promesa del proveedor de hosting y la medición de campo en la revisión trimestral.
Diferentes indicadores rsync de GNU y BSD: armonizan las versiones antes del cron automatizado.
Mantenga un runbook fechado, métricas de antes y después, revisión posterior al incidente: la disciplina acumulativa evita el pánico del viernes por la noche.
Mantenga un runbook fechado, métricas de antes y después, revisión posterior al incidente: la disciplina acumulativa evita el pánico del viernes por la noche.
Decide y avanza sin puntos ciegos
- Alias rsync-safe con --dry-run — eliminar simulacro = acto consciente firmado.
- Barra diagonal con marca de agua: SRC con copia de contenido
/; sin/crea anidamiento anidado. - Dirección SRC → DST en comentarios — cada script cron; bandada anti-superposición.
- Excluye la versión de Git: .env, sesiones, cargas; nunca --eliminar-excluido sin revisión.
- Emparejar rsync mirror + copia de seguridad versionada inmutable: rsync por sí solo propaga el ransomware.
Implementación y DR: guías, directorio, comparador.
Preguntas frecuentes
¿Qué cambia la barra final sobre la fuente?
Con /: rsync copia el contenido del directorio. Sin /: subdirectorio anidado: error clásico de preparación/www/www.
¿Cuándo es aceptable --delete?
Después de un ensayo validado, una copia de seguridad fechada, una dirección SRC→DST escrita, revise con dos pares de ojos. Nunca en cron sin monitorear el código de salida.
¿Deberíamos excluir el caché y los módulos_nodos?
Sí a través de --exclude-from versionado. No sincronice el caché de tiempo de ejecución con prod o .env o sesiones.
¿Rsync reemplaza una copia de seguridad versionada?
No: rsync también propaga ransomware. Asociar copia de seguridad inmutable (restic, Borg) con rsync mirror.
Agregue --dry-run de forma predeterminada a sus alias de rsync; eliminarlo debería ser un acto consciente.
