Solution 1 :
Bien qu'il existe des correctifs 'write-device' et 'copy-device' pour RSync, ils ne fonctionnent bien que sur de petites images (1-2 Go). RSync passera des heures à chercher des blocs correspondants sur des images plus grandes et il est presque inutile d'utiliser des appareils/fichiers de 40 Go ou plus.
Nous utilisons ce qui suit pour effectuer une comparaison de somme de contrôle par 1 Mo, puis copions simplement le contenu s'il ne correspond pas. Nous l'utilisons pour sauvegarder des serveurs sur un hôte virtuel aux États-Unis vers un système de sauvegarde au Royaume-Uni, via l'Internet public. Très peu d'activité CPU et d'instantané de performances, ce n'est qu'après des heures :
Créer un instantané :
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]';
Amorçage initial :
dd if=$dev1 bs=100M | gzip -c -9 | ssh -i /root/.ssh/rsync_rsa $remote "gzip -dc | dd of=$dev2"
Sauvegarde incrémentielle de nuit (envoie uniquement les blocs modifiés) :
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"
Supprimer l'instantané :
lvremove -f company-exchange-snap1
Solution 2 :
Cette fonctionnalité manque à rsync standard, mais il existe un correctif dans l'archive tar rsync-patches (copy-devices.diff) qui peut être téléchargé à partir de http://rsync.samba.org/ftp/rsync/After appling and recompiling , vous pouvez synchroniser les appareils avec l'option --copy-devices.
Solution 3 :
Les personnes intéressées à faire cela spécifiquement avec les instantanés LVM aimeront peut-être mon outil lvmsync, qui lit la liste des blocs modifiés dans un instantané et envoie uniquement ces modifications.
Solution 4 :
Jetez un œil au projet de stockage Linux Zumastor, il implémente une sauvegarde "instantanée" en utilisant le binaire "rsync" via l'outil ddsnap.
À partir de la page de manuel :
ddsnap fournit une réplication de périphérique de bloc grâce à une fonction d'instantané au niveau du bloc capable de conserver efficacement plusieurs instantanés simultanés. ddsnap peut générer une liste de blocs d'instantanés qui diffèrent entre deux instantanés, puis envoyer cette différence sur le câble. Sur un serveur en aval, écrivez les données mises à jour sur un périphérique de bloc instantané.
Solution 5 :
Il existe un script python appelé blocksync qui est un moyen simple de synchroniser deux périphériques de bloc sur un réseau via ssh, en ne transférant que les modifications.
- Copiez blocksync.py dans le répertoire personnel de l'hôte distant
- Assurez-vous que votre utilisateur distant peut sudo ou est root lui-même
- Assurez-vous que votre utilisateur local (root ?) peut lire le périphérique source et ssh sur l'hôte distant
- Invoquer :
python blocksync.py /dev/source [email protected] /dev/dest
Je l'ai récemment piraté pour le nettoyer et le modifier pour utiliser le même algorithme de somme de contrôle rapide que rsync (Adler-32).