Comando rsync: Opciones y Parmetros
El comando rsync
Una de las actividades ms crticas de la administracin de servidores es el respaldo de su contenido, que requiere ser precisa y automatizada de manera que se garantice la continuidad de los servicios, donde rsync es una de las herramientas ms usadas para ello y tema de este tutorial. echa de pu!licacin: " octu!re de #$$% &"a. parte' y ( octu!re de #$$% &#[Link]'. Rsync es una poderosa herramienta que permite sincronizar los contenidos de dos di)erentes u!icaciones, tanto locales como remotas. *e considera como el reemplazo de rcp, ya que permite realizar copias mediante una cone+in encriptada, tiene su propio algoritmo que veri)ica el contenido del archivo y en caso de cam!ios, enva slo la parte modi)icada, )acilita la administracin de respaldos y est li!erado !a,o la -.U -P/. 0l proceso de copiado es sumamente rpido, sin em!argo, se de!e notar que el consumo de recursos, tanto en memoria como procesador, puede ser muy alto, especialmente cuando se levantan m1ltiples solicitudes por parte de los usuarios a trav2s de ssh. 0ste es un proyecto auspiciado por *am![Link] y se encuentra presente en m1ltiples sa!ores de Uni+, incluyendo /inu+, 3ac O* y *olaris4 de hecho, e+iste un procedimiento, va Cywin, para instalarlo en 5indo6s, tutorial que se ver en otra ocasin. 0sta herramienta tiene la particularidad de poderse e,ecutar tanto como cliente 7 servidor o invocarlo en el cliente para realizar la copia en el destino. 0stas y otras )ormas de su utilizacin ser tratados !revemente posteriormente /os e,ercicios presentados se realizaron con la versin #.8.8, tanto en los clientes como el servidor. Descarga e instalacin. 0n el caso que el equipo no tenga rsync, se puede descargar del sitio del proyecto. 0n http:[Link]!a.org9)tp9rsync9 se encuentra el cdigo )uente, mientras que en http:[Link]!a.org9)tp9rsync9!inaries9 se pueden o!tener !inarios para di)erentes sistemas operativos, como /inu+ &:ed ;at, <e!ian, PPC', *olaris &*parc e =ntel', >=?, =:=?, *CO y algunos ms. <e acuerdo a la plata)orma ser el procedimiento de instalacin. 0n el caso de usar :P3 &:ed ;at', el comando sera:
# rpm -Uvh [Link]
Para *olaris, slo se de!e e+traer los contenidos del TARBALL y colocar el !inario en la u!icacin que el sistema requiera. Compilacin del cdigo fuente. *e de!er descargar y descompactar el TARBALL, nos de,a una carpeta a donde entramos para realizar este proceso:
# cd rsync-2.5.5
:espaldos automticos
"
Comando rsync: Opciones y Parmetros
$ ./configure $ make # make install (este paso lo debe realizar root)
0n caso que queramos cam!iar los parmetros de con)iguracin, lo podemos hacer desde ./configure [opciones] , se recomienda usar ./configure --help para ver las opciones disponi!les. Funciones principales de rsync.
Copiar archivos localmente. Copiar archivos locales a un equipo remoto, usando un programa de shell como transporte. Copiar archivos remotos al equipo local, usando un programa de shell como transporte. Copiar archivos remotos de un servidor remoto de rsync al equipo local. Copiar archivos locales a un servidor remoto de rsync. Copiar archivos remotos de un servidor de rsync al equipo local, usando un programa de shell como transporte. Listar archivos de un servidor remoto.
.otemos que en la mayora de los casos se involucra el equipo local y uno remoto. 0n ninguna circunstancia pueden ser dos equipos remotos. Sintaxis y comandos. Su formato !sico es"
# rsync [opciones] [origen] [destino]
#lgunos de sus comandos m!s comunes son" $v, $$ver ose incrementa los mensa%es $q, $$quiet elimina los mensa%es $c, $$chec&sum verifica los tama'os de los archivos enviados (lento). $a, $$archive respalda incrementalmente los archivos (no elimina los originales). $r, $$recursive recursivo entre los directorios. $*, $$relative utili+a rutas relativas. $u, $$update slo actuali+a los archivos (no elimina los originales). $t, $$times mantiene las horas de modificacin. $n, $$dry$run muestra lo que ser! trasnferido. $,, $$-hole$file copia los archivos completos, no slo las partes modificadas (lento). $., $$ignore$times Copia archivos con diferencia de horas, aunque sean del mismo tama'o. $$existing slo actuali+a archivos que ya existen. $$delete elimina archivos que no existen en el receptor. $$delete$after elimina despu/s de copiar, no antes. $$force force elimina carpetas aunque no est/n vacias. $c, $$chec&sum verifica los tama'os de los archivos enviados (lento). $$si+e$only slo compara el tama'o para decidir el env0o. $$progress muestra el progreso durante la transferencia. $+, $$compress comprime el archivo al enviarlo (de en soportarlo el cliente y el servidor). :espaldos automticos #
Comando rsync: Opciones y Parmetros $$exclude12345*E excluye archivos con dicho nom re o extensin. Se pueden usar comodines. $e, $$rsh1C34#2D3 especifica el comando que reempla+a a rsh. 6sualmente es ssh. $$daemon inicia el demonio de rsync. $$server inicia el servidor de rsync. $$pass-ord$file1#*C7.83 o tiene la contrase'a de un archivo. $$version muestra la versin de rsync. *e recomienda e,ecutar rsync --help para ver todas las opciones disponi!les. *espaldos en un mismo equipo. *upongamos que tenemos una particin o un disco duro e+tra, donde colocamos un respaldo de nuestra in)ormacin, pudiendo usar rsync para sincronizar sus contenidos, con esta sencilla instruccin: # rsync -avz --recursive /ruta/carpetaorigen/ /ruta/carpetadestino/ <ado que es en el mismo disco duro, no necesitamos de)inir un medio de transporte ni se solicita una contrase@a. *espaldos usando un programa de shell. 0sta es la )orma ms sencilla de utilizarlo, ya que en caso de tenerlo instalado en am!os equipos, slo es necesario invocar a rsync y pasarle los parmetros necesarios. 0n este primer caso, haremos un envo de un archivo local al servidor de respaldos usando ssh como medio de transporte. # rsync -avz --rsh /usr/!in/ssh archivo.t"t usuario#$%.$.$.&'(/a)guna/carpeta 0n este caso tenemos que el [Link] es copiado a la carpeta de destino en el servidor que indicamos4 cada vez que se conecte, nos solicitar la contrase@a correspondiente al usuario que declaramos. <e!emos tener permisos de escritura en la carpeta de destino para que pueda )uncionar. Una variacin del mismo e,ercicio, pero usando el nom!re de dominio del servidor, es:
# rsync -avz --rs !/usr/bin/ss arc ivo.t"t usuario#[Link]$/alguna/carpeta
Por otro lado podemos hacer una copia recursiva de una carpeta.
# rsync -avz --rs !/usr/bin/ss --recursive / ome/usuario/carpetaoriginal/ usuario#%&.%.%.'5$/alguna/carpeta
/a diagonal al )inal de la carpeta de origen es muy importante. *upongamos que hacemos esta peque@a variacin, incluyendo un comodn.
# rsync -avz --rs !/usr/bin/ss --recursive / ome/usuario/carpetaoriginal/( usuario#%&.%.%.'5$/alguna/carpeta/(
/a di)erencia radica en que en el primer caso, la carpeta de origen se copia con todo su contenido, mientras que en el segundo, se copia el contenido dentro de la carpeta de destino directamente.
:espaldos automticos
Comando rsync: Opciones y Parmetros 0n un momento dado, para e+cluir ciertos archivos, digamos los arhivos . a!, se realiza as:
# rsync -avz --rs !/usr/bin/ss --recursive --e"clude )(bak) / ome/usuario/carpetaoriginal/ usuario#%&.%.%.'5$/alguna/carpeta/
0n todos estos casos, los archivos son guardados con el propietario y los permisos del usuario que realiza el respaldo, pero si deseamos mantener sus caractersticas originales, podemos adicionar estos parmetros.
# rsync -avz --rs !/usr/bin/ss --recursive --e"clude )(bak) --perms --group / ome/usuario/carpetaoriginal/ usuario#%&.%.%.'5$/alguna/carpeta/ --o*ner
0n este caso no es necesario que e+istan los usuarios, propietarios de los archivos, en el sistema. *i deseamos recuperar un respaldo, es decir, del servidor remoto a nuestro equipo, sera con esta instruccin.
# rsync -avz --rs !/usr/bin/ss --recursive usuario#%&.%.%.'5$/alguna/carpetaorigen/ / ome/usuario/carpetadestino/(
Para solicitar la lista de los archivos en una carpeta remota, se hace de )orma muy similar al e,ercicio anterior, pero sin de)inir el destino.
# rsync -avz --rs !/usr/bin/ss --recursive usuario#%&.%.%.'5$/alguna/carpetaorigen/
*espaldos usando un servidor de rsync.
0n todos los casos anteriores, salvo que nos conectemos a una cuenta sin contrase@a, siempre se nos solicita que nos )irmemos para poder tener acceso4 sin em!argo, ese paso es un pro!lema si deseamos automatizar los envos mediante cron. 0sto se puede resolver mediante la con)iguracin del servidor de respaldos como uno de rsync. <ado que esto puede ser un poco ms complicado que lo visto anteriormente, analizaremos algunos elementos paso a paso. ". *iendo que utilizamos encriptacin )uerte para autenticar a los usuarios, es necesario crear las llaves "sa y rsa para cada cliente.
# ss -keygen -t dsa -+ ),lave dsa de usuario en servidor) # ss -keygen -t rsa -+ ),lave rsa de usuario en servidor)
*e recomienda que cada usuario de)ina un comentario que determine su username y el servidor de origen, ya que en caso contrario, al tener demasiadas llaves almacenadas, se prestar a con)usiones. *e de!en de u!icar en la carpeta 9:.ssh: &ntese que es una carpeta oculta'. 0ste proceso genera dos archivos por cada llave, uno que contiene la llave privada y el otro, la llave p1!lica &con e+tensin .pu '. Pueden de,arse sin contrase@a, de manera que se accedan ms rpidamente4 sin em!argo, por seguridad se recomienda ponerla. #. Copiar el contenido las llaves p1!licas al archivo 9:.ssh:authori+ed;&eys en el servidor de rsync, de manera que se puedan leer al realizar la cone+in. Primero creamos el archivo, porque no e+iste en un inicio.
# touch
*/.ssh/authorized+,eys
A
:espaldos automticos
Comando rsync: Opciones y Parmetros <espu2s, se de!e copiar el contenido de los archivos .pu , uno por cada lnea, a este archivo, de manera que se tenga una lista de cone+iones autorizadas.
vi */.ssh/authorized+,eys
0sto se de!e realizar por cada cuenta que vaya a mane,ar la cone+in, o me,or dicho, la cuenta que tenga los permisos necesarios para realizar el respaldo, no necesariamente root. 0n principio, el servidor de!e tener todas las llaves y los clientes slo la suya. %. 0ditar el [Link] en el servidor para ha!ilitar la autenticacin p1!lica.
# pico # pico
/etc/ssh/sshd+con-ig ./inu"0 /etc/sshd+con-ig .1ac 23 X0
5uscar la siguiente l0nea y descomentarla" #4u!,ey5uthentication yes
2ota: dependiendo de la versin o la distri!ucin de origen, es posi!le que el archivo se tenga que llamar rsyn".conf en vez de [Link]. >l momento de iniciar el servidor y no encontrar el archivo, el sistema nos lo indicar. Un e,emplo, un poco ms comple,o del [Link], sera:
#/etc/[Link] motd file ! /etc/[Link] log format ! - -o -f -l -b log file ! /var/log/[Link] ma" connections ! 5 lock file ! /var/run/[Link] read only ! no list ! yes
8. Crear el archivo /etc/rsync".secrets en el servidor de respaldos, donde se guardan los usuarios y contrase@a que e,ecutan rsync, uno por lnea, con el siguiente )ormato &cada usuario puede tener uno propio':
usuario$pass*ord
.o es necesario que estos usuarios e+istan en el sistema, slo es para comparar el usuario y contrase@a que se manda con la residente en este documento. <e!ido a que se encuentra en te+to plano, puede ser recomenda!le crear un usuario sin privilegios para que sea el que e,ecute el programa. .o se recomienda usar root para esta accin. =gualmente, este archivo de!e ser de slo lectura &ch#o" $%%' y no dar acceso al otros ms que al propietario. 3uchos administradores pre)ieren crear un usuario y grupo rsync con el cual e,ecutar todos estos procesos. B. Crear el archivo /etc/rsync".#ot" en el servidor de respaldos, donde se guarda un mensa,e de :espaldos automticos 8
Comando rsync: Opciones y Parmetros !ienvenida o identi)icacin al entrar al servidor. C. =niciar el servidor. 0sto se hace mediante la siguiente instruccin, que adems lo ha!ilita como "ae#onio. >l )inal de!e llevar un punto para asegurar que est presente el archivo de con)iguracin.
# rsync --server --daemon .
*i necesitamos direccionar la ruta del archivo de con)iguracin, usamos esta e+cepcin:
# rsync --server --daemon --config!/ruta/arc ivo .
0s importante o!servar que escucha al puerto (C%, por lo que de!eremos parametrizar el firewall en caso necesario. (. Con)iguracin de inicio del servidor (." /inu+ a' 0ditar el archivo services para iniciarlo como "ae#on.
# pico /etc/services
<eclaramos esta lnea para especi)icar el servicio y el puerto:
rsync ./0/tcp
!' 3odi)icar el /etc/inet".conf &en algunas distri!uciones, este archivo ya no e+iste'. *e de!e incluir esta lnea.
rsync stream tcp no*ait root /usr/bin/rsync rsyncd --daemon
Conect!ndose a un servidor rsync. Una vez que ya parametrizamos el servidor, lo podemos pro!ar para ver su )uncionamiento. > di)erencia de los e,ecrcios anteriores, donde el servidor remoto se de)ina con la estructura usuario&servi"or'/ruta/, en este caso ser as:
# rsync -avz arc ivo.t"t usuario#[Link]$$modulo
<onde #o"ulo es, valga la redundancia, el mdulo declarado en [Link]. Dasndonos en la con)iguracin anterior, de,amos la instruccin de la siguiente manera:
# rsync -avz arc ivo.t"t usuario#[Link]$$publico
>l realizar la cone+in y si el recurso no es estricto, como es el caso del mdulo priva"o, no se solicitar la contrase@a, sino que ser leda directamente del archivo (/.ssh/authori)e"*!eys. Para evitar que un mdulo con autenticacin solicite la contrase@a, usamos el parmetro --passwor"file.
# rsync -avz --pass*ord-file![Link] arc ivo.t"t usuario#[Link]$$privado
:ecuerden que este archivo de!e tener permisos C$$ y pertenecerle al usuario que e,ecuta el proceso. <rogramar respaldos autom!ticos. Ea teniendo con)igurando el servidor slo es necesario con)igurar cron para que se e,ecute :espaldos automticos B
Comando rsync: Opciones y Parmetros regularmente el respaldo. Para esto, utilizaremos el script anteriormente mencionado, pero con algunas modi)icaciones. <onde especi)icamos la carpeta de destino, declaramos el mdulo, por e,emplo:
1234156!)temporal)
0n las lneas de +,T-, donde se declaran las opciones, eliminamos el --[Link] para que no se utilice como medio de transporte:
7843!)-v -u -a --e"clude-from!$29+,:123 --stats)
>cto seguido, cam!iamos la lnea para conectarnos al servidor4 ntese que se tiene ahora un do!le dos puntos, valga la e+presin:
rsync $7843 $;<+=156 $:326#$1234$$$1234156
Con esto, el programa est listo, ya slo de!emos crear un cronta con la e,ecucin del programa.
# crontab -e
Una vez en vi, de)inimos, por e,emplo, que se e,ecute el programa a las %:$$ todos los das. Para esto, supondremos que el script se localiza en /usr/ in/respal"[Link].
&& 0 ( ( ( /usr/bin/respaldo.s
0so es su)iciente para que el servicio quede con)igurado y e,ecutndose regularmente. .nterfaces gr!ficas de rsync. -ync/0A- &5indo6s': http:99sync#[Link])[Link] Rsync1 &3ac O* ?': http:[Link]+la!s.org9rsync+9rsync+.html rs ac! &Uni+': http:[Link]+.)ranFen.de9h,!9rs!acF9 rcopy &script en Perl y ?3/': http:99source)orge.net9pro,ects9rcopy9 *eferencias. Rsync: http:[Link]!a.org9 2an "e Rsync: http:[Link]!a.org9)[Link] 3owto an" 4A5: http:99sunsite.dF9in)[Link] Rsync tutorial: http:[Link]!7internet.)r9))[Link]
:espaldos automticos