Estoy trabajando en una utilidad de copia de seguridad de código abierto que realiza copias de seguridad de archivos y los transfiere a varias ubicaciones externas como Amazon S3, Rackspace Cloud Files, Dropbox y servidores remotos a través de FTP/Protocolos SFTP/SCP.RSync archivo único (archivo) que cambia cada vez
Ahora, he recibido una solicitud de funciones para realizar copias de seguridad incrementales (en caso de que las copias de seguridad realizadas sean grandes y su transferencia y almacenamiento sean caros). He estado buscando y alguien mencionó la utilidad rsync
. Realicé algunas pruebas con esto, pero no estoy seguro si esto es adecuado, por lo que me gustaría saber de alguien que tenga experiencia con rsync
.
Déjeme darle un resumen rápido de lo que sucede cuando se realiza una copia de seguridad. Básicamente comenzará a descargar bases de datos como MySQL, PostgreSQL, MongoDB, Redis. Puede tomar algunos archivos regulares (como imágenes) del sistema de archivos. Una vez que todo esté en su lugar, lo empaquetará todo en un solo .tar (adicionalmente lo comprimirá y encriptará usando gzip
y openssl
).
Una vez que todo esté hecho, tenemos un único archivo que tiene este aspecto:
mybackup.tar.gz.enc
Ahora quiero transferir este archivo a una ubicación remota. El objetivo es reducir el ancho de banda y el costo de almacenamiento. Asumamos que este pequeño paquete de respaldo tiene un tamaño aproximado de 1GB
. Entonces usamos rsync
para transferir esto a una ubicación remota y eliminar la copia de seguridad de archivos localmente. Mañana se generará un nuevo archivo de respaldo, y resulta que se han agregado muchos más datos en las últimas 24 horas, y construimos un nuevo archivo mybackup.tar.gz.enc
y parece que tenemos un tamaño de hasta 1.2GB
.
Ahora, mi pregunta es: ¿es posible transferir solo el 200MB
que se agregó en las últimas 24 horas? Probé el siguiente comando:
rsync -vhP --append mybackup.tar.gz.enc backups/mybackup.tar.gz.enc
El resultado:
mybackup.tar.gz.enc 1,20 g 100% 36.69MB/s 0:00:46 (Xfer # 1 , a-check = 0/1)
envió 200.01M bytes
recibieron 849.40K bytes
bytes 8.14M/seg
total de tamaño es 1,20 g
aceleración es 2,01
Mirando el sent 200.01M bytes
yo diría que el "añadiendo" de los datos funcionaba correctamente. Lo que me pregunto ahora es si transfirió el 1.2GB
completo para averiguar cuánto y qué anexar a la copia de seguridad existente, o ¿realmente transfirió el 200MB
? Porque si se transfiere el entero 1.2GB
, entonces no veo cómo es muy diferente al uso de la utilidad scp
en archivos grandes individuales.
Además, si lo que estoy tratando de lograr es posible, ¿qué banderas me recomiendan? Si no es posible con rsync
, ¿hay alguna utilidad que pueda recomendar utilizar?
¡Cualquier comentario es muy apreciado!
Gracias por la respuesta. Sí, estaba un poco inseguro porque la copia de seguridad que genero cada vez es un archivo completamente nuevo. Todas las bases de datos se volvieron a descargar, las imágenes se volverán a recopilar y se combinarán en un solo __new__ 'mybackup.tar.gz.enc'. Dado que este archivo básicamente es ** un archivo completamente nuevo ** tuve mis dudas de que podría no entender, o romper el algoritmo o algo así. Pero si tienes un punto. ¡Gracias por tus comentarios! –
@Michael van Rooijen: No importa si es nuevo o no, lo que importa son * las diferencias * entre el archivo que tiene localmente y el remoto. Dado que el proceso de dumping de la base de datos es determinista, los diversos volcados de la misma base de datos tendrán mucho en común. – Piskvor
Derecha. Cuando empaqueté todo lo que incluí en un archivo .tar, solo envió unos pocos 'KB' para un archivo que en realidad es' 3.5MB'. Sin embargo, una vez que comprime el archivo con 'GZip' comenzará a enviar aproximadamente' 2MB' de nuevo. Entonces, aunque la cantidad que se transfiere aún se reduce un poco, parece que RSync tiene dificultades para lidiar con las copias de seguridad comprimidas. Supongo que esto es lo mismo con el cifrado. Entonces probablemente tendré que mantenerlo en '.tar' y RSync. ¡Gracias por tu ayuda! –