¿Existe un comando, como rsync, que puede sincronizar archivos enormes y dispersos de un servidor Linux a otro?
Es muy importante que el archivo de destino permanezca disperso. Puede ser más largo (pero no más grande) que la unidad que lo contiene. Solo los bloques modificados deben enviarse a través del cable.
Intenté rsync, pero no tuve alegría. https://groups.google.com/forum/#!topic/mailing.unix.rsync/lPOScZgFE9M
Si escribo un programa para hacer esto, ¿solo estoy reinventando la rueda? http://www.finalcog.com/synchronise-block-devices
Gracias,
Chris
linux
rsync
kvm-virtualization
fadedbee
fuente
fuente
Respuestas:
Para crear nuevos archivos en modo disperso
Seguido por
Para actualizar todos los archivos existentes (incluidos los dispersos creados previamente) in situ.
fuente
rsync --existing --inplace
y luegorsync --ignore-existing --sparse
para acelerar la sincronizaciónRsync solo transfiere los cambios a cada archivo y con --inplace solo debería reescribir los bloques que cambiaron sin volver a crear el archivo. Desde su página de características .
Usar --inplace debería funcionar para usted. Esto le mostrará el progreso, comprima la transferencia (en el nivel de compresión predeterminado), transfiera el contenido del directorio de almacenamiento local de forma recursiva (lo que importa primero la barra diagonal final), realice los cambios en los archivos en su lugar y use ssh para el transporte.
A menudo uso la bandera -a también, que hace algunas cosas más. Es equivalente a -rlptgoD. Dejaré el comportamiento exacto para que lo busque en la página del manual.
fuente
Terminé escribiendo software para hacer esto:
http://www.virtsync.com
Este es un software comercial que cuesta $ 49 por servidor físico.
Ahora puedo replicar un archivo disperso de 50 GB (que tiene 3 GB de contenido) en menos de 3 minutos en banda ancha residencial.
fuente
Eche un vistazo a Zumastor Linux Storage Project, que implementa una copia de seguridad de "instantánea" utilizando "rsync" binario a través de la
ddsnap
herramienta.Desde la página del manual:
ddsnap proporciona la replicación de dispositivos de bloque dada una instalación de instantáneas a nivel de bloque capaz de almacenar múltiples instantáneas simultáneas de manera eficiente. ddsnap puede generar una lista de fragmentos de instantáneas que difieren entre dos instantáneas y luego enviar esa diferencia por cable. En un servidor posterior, escriba los datos actualizados en un dispositivo de bloque capturado.
fuente
lvmsync hace esto.
Aquí hay una transcripción de uso . Crea una instantánea LVM en la fuente, transfiere la partición lógica. Puede transferir actualizaciones incrementales de los cambios desde la creación de instantáneas con la frecuencia que desee.
fuente
¿Podría ser una solución replicar todo el sistema de archivos? DRBD? http://www.drbd.org/
fuente
Tal vez un poco extraño aquí, pero descubrí recientemente que NFS maneja esto bien.
Entonces, exporta un directorio en una máquina, luego lo monta en la otra y simplemente copia los archivos con utilidades básicas como
cp
. (Algunas utilidades antiguas / antiguas pueden tener problemas con archivos dispersos).Encontré
rsync
especialmente ineficiente en la transferencia de archivos dispersos.fuente
Para sincronizar archivos grandes o dispositivos de bloque con diferencias de bajas a moderadas, puede hacer una copia simple o usar bdsync , rsync no es apto para este caso en particular *.
bdsync
funcionó para mí, parece lo suficientemente maduro, su historial de errores es alentador (pequeños problemas, resolución rápida). En mis pruebas, su velocidad era cercana al máximo teórico que podía obtener ** (es decir, puede sincronizar aproximadamente el tiempo que necesita para leer el archivo). Finalmente es de código abierto y no cuesta nada.bdsync
lee los archivos de ambos hosts e intercambia sumas de verificación para compararlos y detectar diferencias. Todo esto al mismo tiempo . Finalmente crea un archivo de parche comprimido en el host de origen. Luego mueve ese archivo al host de destino y ejecuta bdsync por segunda vez para parchear el archivo de destino.Cuando se usa a través de un enlace bastante rápido (por ejemplo, Ethernet de 100 Mbit) y para archivos con pequeñas diferencias (como suele ser el caso en los discos VM), reduce el tiempo de sincronización al tiempo que necesita para leer el archivo. En un enlace lento, necesita un poco más de tiempo porque debe copiar los cambios comprimidos de un host a otro (parece que puede ahorrar tiempo utilizando un buen truco pero no lo ha probado).
*: rsync es enormemente ineficiente con archivos enormes. Incluso con --inplace primero leerá todo el archivo en el host de destino, DESPUÉS comenzará a leer el archivo en el host de origen y finalmente transferirá las diferencias (simplemente ejecute dstat o similar mientras ejecuta rsync y observe). El resultado es que incluso para archivos con pequeñas diferencias, se tarda aproximadamente el doble del tiempo que necesita leer el archivo para sincronizarlo.
**: bajo el supuesto de que no tiene otra manera de saber qué partes de los archivos han cambiado. Las instantáneas de LVM usan mapas de bits para registrar los bloques modificados para que puedan ser extremadamente más rápidos (el archivo léame de lvmsync tiene más información).
fuente
No conozco una utilidad de este tipo, solo las llamadas del sistema que pueden manejarla, por lo que si escribe dicha utilidad, podría ser bastante útil.
lo que realmente puede hacer es usar qemu-img convert para copiar los archivos, pero solo funcionará si el FS de destino admite archivos dispersos
fuente