2012-05-21 17 views
9

Me gustaría reflejar un directorio de copia de seguridad utilizado por rsnapshot a una segunda ubicación para más seguridad. Idealmente, la solución usaría rsync con ssh. ¿Qué argumentos debo proporcionar a rsync para preservar los enlaces duros (creados por rsnapshot) y los enlaces simbólicos, para eliminar archivos, copiar recursivamente, eliminar archivos en el destino, etc.? Todos los archivos están en sistemas de archivos ext3. Además, ¿qué puedo hacer para evitar la posibilidad de que si la fuente está corrupta los defectos se rsynced al espejo?Mirror rsnapshot directorio de copia de seguridad

+0

he encontrado que hay un script llamado rsnapshot-copia que está destinado para la sincronización inicial: [rsnapshot-copia] (http://cpansearch.perl.org/src/DCANTRELL/App-Rsnapshot-1.999_00002/utils/rsnapshot-copy). En el encabezado de este archivo, indica: 'rsnapshot-copy actualmente no está diseñado para la duplicación incremental de una instantánea raíz (aunque se puede agregar un modo incremental en el futuro). ¿Alguna idea de cómo respaldar esto? – highsciguy

+0

Otra idea es usar los archivos de registro rsnapshot (quizás primero modifique las rutinas de registro internas según corresponda) para crear un script de shell que ejecute exactamente las mismas operaciones mv y rsync que rsync ha realizado en la copia de seguridad primaria también para la copia duplicada de la copia de seguridad . – highsciguy

+0

Para aclarar un poco, donde veo el problema con un rsync normal (ver respuesta a continuación). Si un archivo en las rutas de acceso de rsnapshot se corrompe (por ejemplo, debido a un error en el disco), debido al uso de enlaces duros, se dañará en todas las instantáneas más nuevas, a menos que se haya cambiado alguna vez. Esto significa que el archivo está perdido. Si realizo una rsync automática regular en una copia duplicada de la copia de seguridad, con el tiempo sobreescribiré el archivo en el espejo con su versión dañada sin darme cuenta. La pregunta es si hay una solución que evite esto. – highsciguy

Respuesta

6

Creo que las opciones para hacer lo que desea están ampliamente documentadas en la página del manual rsync. En particular, la opción -H (--hard-links) habilita la detección de enlaces duros, y --delete hará que rsync elimine cosas en el destino que no existen en el origen. Así que tal vez algo como:

rsync -aH --delete /path/to/src/ /path/to/destination 

Por otra parte, ¿qué puedo hacer yo para evitar la posibilidad de que si está dañada la fuente de los defectos se rsynced al espejo?

Bueno, eso es complicado. ¿Cómo se detecta la corrupción? Creo que la única solución real es escalonar la copia de seguridad de su copia de seguridad (es decir, realizar copias de seguridad reales en su destino principal y luego sincronizar eso con su destino secundario inmediatamente antes de la próxima ejecución de la copia de seguridad). De esta forma, si detecta un problema, tiene hasta la próxima ejecución de respaldo para recuperar las cosas.

Una solución diferente sería tener rsnapshot copia de seguridad en varios destinos, por lo que está generando copias de seguridad de su fuente original en dos ubicaciones distintas. De esta forma, si uno se daña, el segundo no debería verse afectado.

+0

Asegúrese de que todas las opciones estén en la página de manual. Solo quería asegurarme de que no olvidara ninguno. Pero la opción -a parece ser bastante compacta. La rsnapshot de dos ubicaciones no será factible ya que los dos destinos no estarán disponibles al mismo tiempo. ¿No sería posible sincronizar siempre solo las instantáneas más nuevas al espejo? De esta forma, las instantáneas anteriores en esta ubicación se conservarán incluso si están dañadas en la ubicación principal.Por supuesto, necesitaría repetir el cambio de nombre que realiza rsnapshot cuando agrega una instantánea ... – highsciguy

1

Para evitar la copia de datos corruptos, puede mantener una copia de seguridad semanal y esperar que note la corrupción en la fuente antes de perder todas sus copias de seguridad. La mejor manera sería usar -c y luego comparará las sumas de comprobación tanto de origen como de destino para determinar si se debe copiar el archivo. El único inconveniente es que debe leer todo el archivo, haciendo que la copia de seguridad sea un proceso más lento.

#!/bin/sh 
# Create a Backup of Today 
# Definitions 
sevendaysago=$(date --date='6 days ago' +%Y-%m-%d-%A) 
# Delete backups from 7 days ago 
rm -rf /storage/backups/$sevendaysago 
mkdir -p /storage/backups/`date +\%Y-\%m-\%d`-`date +\%A`/$host/$username 

rsync -aHvz /storage/`date --date=yesterday +\%Y-\%m-\%d`-`date --date=yesterday +\%A`/$host/$user/ /storage/`date +\%Y-\%m-\%d`-`date +\%A`/$host/$user/ 

rsync -acHvz -e ssh --delete --exclude='logs' [email protected]:/home/tim/ /storage/`date +\%Y-\%m-\%d`-`date +\%A`/$host/$user/ 
Cuestiones relacionadas