[Linuxtrent] Sincronizzazione remota tra due device a blocchi con una riga di perl

  • From: Roberto Resoli <roberto.resoli@xxxxxxxxx>
  • To: linuxtrent <linuxtrent@xxxxxxxxxxxxx>
  • Date: Wed, 19 Sep 2012 10:43:36 +0200

Qualche giorno fa cercavo una soluzione al problema di cui sopra: Due
device a blocchi, su host diversi.
Il primo fa da master, mentre il secondo deve venire sincronizzato
ogni notte, con i cambiamenti intervenuti sul primo.

Non si può usare rsync (a meno di non patcharlo), che non lavora sui device.

La prima idea era usare DRBD, ma prima di lanciarmi ho provato a
cercare in rete; mi sono imbattuto in questa pagina:

http://serverfault.com/questions/27397/sync-lvm-snapshots-to-backup-server

La risposta marcata "6" (la "9" suggerisce appunto di patchare rsync)
propone questa incredibile riga di perl  come soluzione:

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"

Ho voluto provare per curiosità, e sembra funzionare benone.

Mi piacerebbe renderla leggibile e tarsformarla in uno script, ma le
mie conoscenze di perl sono insufficienti ...

Qualcuno riesce a darmi una mano?

ciao,
rob
--
Per iscriversi  (o disiscriversi), basta spedire un  messaggio con OGGETTO
"subscribe" (o "unsubscribe") a mailto:linuxtrent-request@xxxxxxxxxxxxx


Other related posts: