¿Cómo puedo hacer un respaldo remoto con rsync en Ubuntu?

En 1969 y ante una entrevista para el períodico El Pueblo, Juan Perón
expone en los jardines de la madrileña Quinta "17 de Octubre" cómo
realizar respaldos remotos a través de SSH utilizando rsync en Ubuntu.

(...)

Con Isabelita nos mantemos actualizados instantáneamente de todo lo que
sucede en la Argentina.

Todos los Movimientos replican la biología de los entes vitales que lo
componen. En esto nadie tiene asegurado nada y es por ello que -
conociendo este cariz inevitable - hemos de prever para proveer. Contar
con un plan de contingencia de propia elaboración es la política que nos
permite, en la desgracia, salir adelante remozados.

Dejar todo para último momento sólo nos asegurará una costosa
improvisación desprendida de nuestros propios instintos, pero no de
nuestros intereses razonables, y como tal suelen ser - por remedio -
peor que la enfermedad.

Pues bien señores, un sistema GNU con Linux responde más o menos a las
mismas directrices, ya que se trata de un sistema nacido en la
consolidación de las voluntades informáticas del Pueblo.

En él, suelo normalmente recomendar diseñar una estrategia propia de
previsión tendiende a conservar el funcionamiento del entorno y asegurar
la preservación perenne de los datos propios, de un punto de vista en el
que la granularidad de la conservación en el tiempo también nos permitan
mantener el sistema doctrinalmente actualizado.

Así he obrado yo, que de esto se un poco, porque como político soy un
aficionado, para lo que me he formado toda la vida es para ser un
Conductor.

Usualmente es adecuado recurrir a la preservación por redundancia.

En GNU podremos lograrla preservando en medios de almacenamiento
adicionales todo el trabajo elaborado y organizado.

Algunos oligarcas han pretendido proponernos como solución aquello a lo
que estos vivos denominan "nube", que no es otra cosa que un equipo de
cómputo ajeno. Sólo un tonto haría caso a este engaño para depositar sus
datos en un servidor remoto que para colmo de males es ajeno y sobre el
cual no tiene control real alguno.

Si la seguridad ha de hacerse de manera remota, más vale que lo sea
sobre medios de almacenamiento y equipamiento que se encuentren bajo
nuestro exclusivo control. Nadie duda ya que lo más útil en ambientes
productivos de gran disponibilidad es contar con múltiples discos duros
en una máquina que conoceremos como servidores RAID. Proceder así nos
permitirá contar con duplicación, triplicación o incluso cuadruplicación
de datos en el mismo momento que se los genera. Este proceder podría
parecer exagerado a más de uno, pero es lo que alguien con respeto por
su trabajo y dos dedos de frente haría. Al fin y al cabo, un disco
rígido vale chirolas si lo comparamos con la información que resguarda.
Por lo demás, contamos ya con sistemas NAT ya hechos, que pensando en
este cometido pueden enlazarse a nuestra red LAN, dejando al alcance
varios discos SATA de replicación automática.

Sin embargo, incluso podremos hacer respaldos de manera simplificada.
Para ello, cualquier sistema GNU puede contar con rsync. Se trata de una
aplicación que nos permite sincronizar los datos remotos en un
directorio de otro sistema de acceso SSH (ya sea en la red LAN o a
través de Internet).

Su sintaxis básica es:

rsync origen destino

Naturalmente, el comportamiento estándar de rsync de copiar y actualizar
los ficheros desde el origen hacia el destino replica la necesidad del
respaldo de ficheros. En otras palabras, rsync copiará solamente los
ficheros nuevos o, en el caso de existir una copia de respaldo previa,
sólo aquellos actualizados (modificados) . Al proceder tras este
análisis automático, rsync se nos presenta increíblemente útil pues
ahorra mucho ancho de banda y acelera enormemente la operación,
deslindándose de trabajar ficheros ya respaldados. Respaldo básico con
rsync

Lo que se necesitamos para respaldar un directorio /home de forma
remota, es otro sistema destino provista con SSH (y suficiente espacio
de disco de destino como para almacenar nuestros ficheros allí), y rsync
instalado en nuestro sistema local.

Podríamos querer agregar primero la opción "-n" al comando de rsync
mientras preparamos todo y probamos. Esta opción hace que rsync realice
una "prueba piloto" ejecutando el comando y produciendo salida en la
terminal, sin que realmente manipule fichero alguno.

Utilizaremos rsync para conectarnos desde nuestro cliente (la máquina
donde queremos almacenar la copia respaldo) a la máquina remota (donde
tenemos el original). Para ellos indicamos la siguiente sintaxis:

rsync -avz -e ssh /ruta/origen/a/respaldar usuario:maquina.remota:/ruta/remota/destino

en donde la opción -a indica el modo "archivada", que retiene las fechas
y horas, información de propietario y grupo, y espeja recursivamente,
compiando enlaces simbólicos como enlaces, etc (si quisiéramos copiar el
referente del enlace, tenemos que incorporar también -L. La opción -v es
verbosa e irá indicando cada fichero copiado. La opción -z comprime los
datos enviados. La opción -e indica el tipo de intérprete a utilizar (en
este caso, shell seguro SSH). usuario es el nombre de usuario en la
máquina remota.

Por ejemplo, para copiar todo nuestro directorio /home de nuestro
sistema GNU con Linux a una máquina remota, utilizaríamos el siguiente
comando de organización:

rsync -avz -e ssh /home/$USER usuario@maquina.remota:/ruta/destino

Naturalmente, al utilizar SSH, rsync nos solicitará la contraseña de la
máquina.remota, y comenzará a copiar, reportando cada fichero. Una vez
completado el procedimiento de respuesta al pedido de copias, rsync nos
presentará estadísticas tales como la cantidad de bytes transferidos y
la velocidad promedio.

Podremos utilizar este comando subsecuentemente. Lo más importante de
este proceder será que rsyncs sólo respaldará los ficheros que
subsecuentemente hayan cambiado y aquellos nuevos, lo cual es muy útil
para mantener actualizado los respaldos de todo tipo. Restaurar un
respaldo

Para restaurar un archivo único desde la copia respaldo, podremos
utilizar scp para transferirlo desde el directorio de respaldo local al
directorio requerido en la máquina remota.

Ahora bien, para restaurar el respaldo al completo, simplemente
indicamos el mismo comando anterior, pero invirtiendo el orden, pasando
desde el directorio del respaldo a la máquina destino y origen, de la
siguiente manera:

rsync -avz -e ssh usuario@maquina.remota:/ruta/origen/respaldo /ruta/respaldo/local

Como se ve, debemos ser cuidadosos de omitir la barra / al final de
directorio. Al omitirse la barra, toda la estructura del directorio
origen resultará recreada en la máquina remota (tal es el motivo por el
cual la hemos omitido).

Nota: Si bien en Unix es opcional agregar una / para especificar un
directorio, en el caso específico de rsync si hubiésemos especificado
una barra la estructura de directorios se replicaría desde el directorio
dado (por ejemplo, el comando rsync -avz- e ssh
usuario@maquina.remota:/ruta/al/home /directorio/respaldo/local/
producirá el respaldo adentro de /directorio/respaldo/local/ruta/al/home
en la máquina.remota). 

La opción --delete

También han comprendido ya que el comportamiento estándar actualiza
ficheros en el destino, por lo cual el borrado de los mismos en el
directorio origen no hará lo mismo en el de destino.

Sin embargo, si quisiéramos que los ficheros removidos en el origen
resulten también borrados en el destino, debemos agregarle el prefijo
--delete.

Rsync y enlaces simbólicos

Como se indicó, el comportamiento estándar de rsync -a es copiar los
enlaces simbólicos como enlaces. Para que esto no se produzca y se
copien también los destinos de dichos enlaces simbólicos, debemos
agregar la opción -L luego de la opción -a.