Solución 1:
Aunque existen parches de 'dispositivo de escritura' y 'dispositivo de copia' para RSync, solo funcionan bien en imágenes pequeñas (1-2 GB). RSync pasará mucho tiempo buscando bloques coincidentes en imágenes más grandes y es casi inútil con dispositivos/archivos de 40 GB o más.
Usamos lo siguiente para realizar una comparación de suma de verificación por 1 MB y luego simplemente copiamos el contenido si no coincide. Usamos esto para respaldar servidores en un host virtual en los EE. UU. a un sistema de respaldo en el Reino Unido, a través de Internet público. Muy poca actividad de la CPU y el rendimiento de las instantáneas solo ocurre después de horas:
Crear instantánea:
lvcreate -i 2 -L 25G /dev/vg_kvm/company-exchange -n company-exchange-snap1
export dev1='/dev/mapper/vg_kvm-company--exchange--snap1';
export dev2='/dev/mapper/vg_kvm-company--exchange';
export remote='[email protected]';
Siembra inicial:
dd if=$dev1 bs=100M | gzip -c -9 | ssh -i /root/.ssh/rsync_rsa $remote "gzip -dc | dd of=$dev2"
Copia de seguridad nocturna incremental (solo envía bloques modificados):
ssh -i /root/.ssh/rsync_rsa $remote "
perl -'MDigest::MD5 md5' -ne 'BEGIN{\$/=\1024};print md5(\$_)' $dev2 | lzop -c" |
lzop -dc | perl -'MDigest::MD5 md5' -ne 'BEGIN{$/=\1024};$b=md5($_);
read STDIN,$a,16;if ($a eq $b) {print "s"} else {print "c" . $_}' $dev1 | lzop -c |
ssh -i /root/.ssh/rsync_rsa $remote "lzop -dc |
perl -ne 'BEGIN{\$/=\1} if (\$_ eq\"s\") {\$s++} else {if (\$s) {
seek STDOUT,\$s*1024,1; \$s=0}; read ARGV,\$buf,1024; print \$buf}' 1<> $dev2"
Eliminar instantánea:
lvremove -f company-exchange-snap1
Solución 2:
A rsync estándar le falta esta función, pero hay un parche para ello en el tarball de rsync-patches (copy-devices.diff) que se puede descargar desde http://rsync.samba.org/ftp/rsync/Después de aplicar y volver a compilar , puede sincronizar dispositivos con la opción --copy-devices.
Solución 3:
A las personas interesadas en hacer esto específicamente con instantáneas de LVM les puede gustar mi herramienta lvmsync, que lee la lista de bloques modificados en una instantánea y envía solo esos cambios.
Solución 4:
Eche un vistazo a Zumastor Linux Storage Project, implementa una copia de seguridad de "instantánea" utilizando "rsync" binario a través de la herramienta ddsnap.
Desde la página del manual:
ddsnap proporciona replicación de dispositivos de bloque dada una instalación de instantáneas a nivel de bloque capaz de mantener 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 descendente, escriba los datos actualizados en un dispositivo de bloque con instantánea.
Solución 5:
Hay un script de python llamado blocksync que es una forma sencilla de sincronizar dos dispositivos de bloque a través de una red a través de ssh, solo transfiriendo los cambios.
- Copie blocksync.py en el directorio de inicio del host remoto
- Asegúrese de que su usuario remoto pueda sudo o sea root mismo
- Asegúrese de que su usuario local (¿root?) pueda leer el dispositivo de origen y ssh al host remoto
- Invocar:
python blocksync.py /dev/source [email protected] /dev/dest
Recientemente lo pirateé para limpiarlo y cambiarlo para que use el mismo algoritmo de suma de comprobación rápida que rsync (Adler-32).