Configurant un sistema de còpies incrementals amb rsync entre dues o més màquines

Hacker

En aquest breu article vull explicar la millor manera, en la meua opinió, de mantindre un sistema de dades copiades i sincronitzades de manera incremental entre el teu ordinador i el teu servidor, o entre el teu ordinador i un disc USB gran per a backups, o entre quatre ordinadors que estiguen distribuïts per internet.

En el meu cas, a ma casa tinc un servidor OpenBSD amb l'Apache, MySQL, Subversion i altres serveis, i també tinc un disc dur extern inves de 500Gb on vaig ficant totes les meues aplicacions, scripts, fotos i altres dades personals.
En la jerarquia, mana el disc dur, aleshores, jo el que vull és que si fique un nou fitxer al disc dur que es duplique i aparega al servidor OpenBSD, i que si per contra esborre catorze cançons que tenia al disc dur que també desapareguen les catorze cançons del servidor.

Això ho faig amb rsync, una aplicació de UNIX que treballa molt bé i sap sincronitzar i encriptar els fitxers comprimint i minimitzant el volumen de dades transferits i obtenint el millor sistema de còpia incremental de dades.

Algunes vegades m'he fet algun script on feia uns tar.gz i després els passava a altres màquines mitjançant scp, però moltes vegades no va molt bé si la connexió és lenta. Aleshores, en aquest cas rsync és la rock star que anaves buscant! Aquesta aplicació sap encriptar i comprimir la informació aleshores és més bona per a còpies entre màquines distribuïdes a la xarxa.

La forma d'escriure una ordre amb rsync és: rsync orige desti.

Aleshores, com que a ma casa mana el disc dur l'ordre que faig servir serà:

rsync -uarmzhP --delete ORIGE_DISC_DUR DESTI_ORDINADOR

És a dir, l'ordre que he fet servir en els 2 ordinadors meus i el disc dur extern és:


rsync -uarmzhP --delete /Volumes/EXTERN1/ /home/joan/arxius

"I, per què aquesta configuració?" - em pregunta un company de feina - doncs, perquè jo NO tinc 1 ordinador, sinó 3 (el meu, el servidor domèstic de casa i l'ordinador de la nòvia), aleshores vull que mane el disc dur perquè serà on es desplegarà i sincronitzaran tots els distints directoris de cada usuari i cada ordinador, així els ordinadors seràn simplement ferramentes tontes amb les que treballem, però la càrrega d'emmagatzematge la té el disc dur. Aleshores recordem: rsync dispositiu_orige dispositiu_destí.

Si, en canvi, vull copiar del servidor OpenBSD a la màquina 192.168.1.99 (per exemple) fariem:


rsync -uarmzhP -–delete -–rsh=ssh -–stats /directori/local USUARI@192.168.1.99:/directori/remot

Les opcions són:

-u : update
-a: archive mode
-r: recursive
-m: no envía los directorios vacíos
-z: comprime mientras transfiere (así se ahorra tiempo y ancho de banda)
-h: presentació per a humans
-P: mostra el progrés de la còpia
–delete: esborra al destí els arxius que ja no són a l'origen
–rsh: especifica la shell remota a usar (en aqeust exemple ssh)
–stats: dóna informació pels arxius que va transferint

Després has d'escriure la contrasenya de l'usuari a la màquina de destí i ja està, comença la còpia.
Pots canviar la ip per la teua pròpia o el teu nom de host en cas de que tingues un domini registrat.

Una altra opció molt poderosa que vull recomanar és:

“–exclude-from=nofiles”

L'arxiu "nofiles" (pot ser qualsevol altre nom) és un arxiu on es coloquen els arxius que no vols fer el backup separats per diferent línies. Per exemple:

*.avi
*.mp3
*ramoncin*

Pots mirar altres opcions del rsync al seu lloc web on també trobaràs exemples.

El que ara al final pots fer és copiar aquesta línea a un script anomenat "sincronitzacio_sh" i després ho afegeixes al crontab per a que s'execute tots els dies a les 24h, i aleshores sempre les teues màquines i/o disc extern USB mantindran la mateixa informació sincronitzada.

UN ALTRE CAS PRÀCTIC

A continuació anem a veure un altre exemple amb rsync, serà al contrari, és a dir, ara vull que mane l'ordinador.

Tinc un iMac i vull que el iMac siga el qui mane i tota la informació que fique al iMac es sincronitze al disc dur, i si esborre fitxers del iMac aquestos s'esborren també del disc dur.

El codi que he ficat al crontab per a que aquesta sincronització s'execute tots els dies a les 21h de la nit (i cada 5 minuts un directori, aleshores fins les 21:30h) és la següent:


#Tots els dies, a les 21h, sincronitze tots els directoris que tinc a "arxius" del iMac al Disc Dur Invest
00 21 * * * rsync -uarmzhP --delete /Users/joan/Documents/arxius/Personal/ /Volumes/EXTERN1/Personal/
#Sincronitzem "Programacio" del iMac al Invest
05 21 * * * rsync -uarmzhP --delete /Users/joan/Documents/arxius/Programacio/ /Volumes/EXTERN1/Programacio/
#Sincronitzem "Programes" del iMac al Invest
10 21 * * * rsync -uarmzhP --delete /Users/joan/Documents/arxius/Programes/ /Volumes/EXTERN1/Programes/
#Sincronitzem "Fotos" del iMac al Invest
15 21 * * * rsync -uarmzhP --delete /Users/joan/Documents/arxius/Fotos/ /Volumes/EXTERN1/Fotos/
#Sincnonitzem "Musica" del iMac al Invest
20 21 * * * rsync -uarmzhP --delete /Users/joan/Documents/arxius/Musica/ /Volumes/EXTERN1/Musica/
#Sincronitzem "Projectes" del iMac al Invest
25 21 * * * rsync -uarmzhP --delete /Users/joan/Documents/arxius/Projectes/ /Volumes/EXTERN1/Projectes/
#Una vegada han acabat els Rsync de la nit, envie un correu
#30 21 * * * mailx -s "Ha finalitzat el rsync" joan@riseup.net

Com veuràs, en aquest article he deixat distints exemples i distintes configuracions. Però crec que tot està molt clar i explicat. Ara ho tindreu tot copiat i sincronitzat, sense redundàncies ni mal de camps, en una única línea en la consola ;-)

Espere que us siga útil i que us agrade el poder del món UNIX.

Doncs bé això és tot, espere que trobes útil aquest article i que et motive a compartir els teus trucs, els teus coneixements i els teus experiments amb el Programari Lliure. Pensa-ho, va, que la Comunitat del Programari Lliure va creixent gràcies a la documentació, el disseny, la formació o la programació, sigues part de la Comunitat :-)

La cultura i la lliure circulació de les idees és l'arma més efectiva contra les dictadures del pensament i contra la ignorància.