El protocolo rsync puede ser bastante simple de usar para trabajos de copia de seguridad / sincronización normales, pero algunas de sus funciones más avanzadas pueden sorprenderlo. En este artículo, vamos a mostrar cómo incluso los mayores acumuladores de datos y entusiastas de las copias de seguridad pueden utilizar rsync como una solución única para todas sus necesidades de redundancia de datos.
Advertencia: solo para geeks avanzados
Si estás sentado pensando "¿Qué diablos es rsync?" o "Solo uso rsync para tareas realmente sencillas", es posible que desee consultar nuestro artículo anterior sobre cómo usar rsync para hacer una copia de seguridad de sus datos en Linux , que ofrece una introducción a rsync, lo guía a través de la instalación y muestra sus funciones más básicas. Una vez que tenga una comprensión firme de cómo usar rsync (honestamente, no es tan complejo) y se sienta cómodo con una terminal Linux, estará listo para pasar a esta guía avanzada.
Ejecutando rsync en Windows
Primero, pongamos a nuestros lectores de Windows en la misma página que nuestros gurús de Linux. Aunque rsync está diseñado para ejecutarse en sistemas similares a Unix, no hay ninguna razón por la que no pueda usarlo con la misma facilidad en Windows. Cygwin produce una maravillosa API de Linux que podemos usar para ejecutar rsync, así que dirígete a su sitio web y descarga el 32 bits o 64 bits versión, dependiendo de su computadora.
La instalación es sencilla; puede mantener todas las opciones en sus valores predeterminados hasta que llegue a la pantalla "Seleccionar paquetes".
Ahora debe seguir los mismos pasos para Vim y SSH, pero los paquetes se verán un poco diferentes cuando vaya a seleccionarlos, así que aquí hay algunas capturas de pantalla:
Instalación de Vim:
Instalación de SSH:
Una vez que haya seleccionado esos tres paquetes, siga haciendo clic en Siguiente hasta que finalice la instalación. Luego puede abrir Cygwin haciendo clic en el ícono que el instalador colocó en su escritorio.
Comandos rsync: simples a avanzados
Ahora que los usuarios de Windows están en la misma página, echemos un vistazo a un comando rsync simple y veamos cómo el uso de algunos conmutadores avanzados puede hacerlo complejo rápidamente.
Supongamos que tiene un montón de archivos que necesitan copia de seguridad, ¿quién no lo hace en estos días? Conecta su disco duro portátil para poder hacer una copia de seguridad de los archivos de su computadora y ejecuta el siguiente comando:
rsync -a / home / geek / files / / mnt / usb / files /
O la forma en que se vería en una computadora con Windows con Cygwin:
rsync -a / cygdrive / c / archivos / / cygdrive / e / archivos /
Bastante simple, y en ese punto realmente no hay necesidad de usar rsync, ya que solo puede arrastrar y soltar los archivos. Sin embargo, si su otro disco duro ya tiene algunos de los archivos y solo necesita las versiones actualizadas más los archivos que se han creado desde la última sincronización, este comando es útil porque solo envía los nuevos datos al disco duro. Con archivos grandes, y especialmente la transferencia de archivos a través de Internet, eso es un gran problema.
Hacer una copia de seguridad de sus archivos en un disco duro externo y luego mantener el disco duro en la misma ubicación que su computadora es una muy mala idea, así que echemos un vistazo a lo que se necesitaría para comenzar a enviar sus archivos por Internet a otra computadora ( uno que haya alquilado, un familiar, etc.).
rsync -av --delete -e 'ssh -p 12345 ’/ home / geek / files / [email protected]: / home / geek2 / files /
El comando anterior enviaría sus archivos a otra computadora con una dirección IP de 10.1.1.1. Eliminaría archivos extraños del destino que ya no existen en el directorio de origen, generaría los nombres de archivo que se están transfiriendo para que tenga una idea de lo que está sucediendo y tunelizaría rsync a través de SSH en el puerto 12345.
los
-а -в -е --делете
los conmutadores son algunos de los más básicos y de uso común; ya debería saber mucho sobre ellos si está leyendo este tutorial. Repasemos algunos otros interruptores que a veces se ignoran pero que son increíblemente útiles:
--Progreso
- Este interruptor nos permite ver el progreso de la transferencia de cada archivo. Es particularmente útil cuando se transfieren archivos grandes a través de Internet, pero puede generar una cantidad de información sin sentido cuando se transfieren archivos pequeños a través de una red rápida.
Un comando rsync con el
--Progreso
Switch ya que hay una copia de seguridad en curso:
--parcial
- Este es otro conmutador que es particularmente útil cuando se transfieren archivos grandes a través de Internet. Si rsync se interrumpe por cualquier motivo en medio de una transferencia de archivo, el archivo parcialmente transferido se mantiene en el directorio de destino y la transferencia se reanuda donde se detuvo una vez que se ejecuta nuevamente el comando rsync. Al transferir archivos grandes a través de Internet (digamos, un par de gigabytes), no hay nada peor que tener una interrupción de Internet de unos segundos, una pantalla azul o un error humano que interrumpa la transferencia de archivos y tener que comenzar de nuevo.
-PAGS
- este interruptor combina
--Progreso
y
--parcial
, así que utilícelo en su lugar y hará que su comando rsync sea un poco más ordenado.
-con
o
--comprimir
- Este interruptor hará que rsync comprima los datos del archivo a medida que se transfieren, reduciendo la cantidad de datos que deben enviarse al destino. En realidad, es un cambio bastante común pero está lejos de ser esencial, solo lo beneficia realmente en las transferencias entre conexiones lentas, y no hace nada para los siguientes tipos de archivos: 7z, avi, bz2, deb, g, z iso, jpeg, jpg, mov, mp3, mp4, ogg, rpm, tbz, tgz, z, zip.
-h
o
- legible por humanos
- Si está utilizando
--Progreso
Switch, definitivamente querrás usar este también. Es decir, a menos que desee convertir bytes a megabytes sobre la marcha. los
-h
El conmutador convierte todos los números generados a un formato legible por humanos, por lo que realmente puede entender la cantidad de datos que se transfieren.
-norte
o
- corrida en seco
- Este interruptor es esencial para saber cuándo escribe por primera vez su script rsync y lo prueba. Realiza una ejecución de prueba, pero en realidad no realiza ningún cambio; los posibles cambios se siguen generando con normalidad, por lo que puede leer todo y asegurarse de que se ve bien antes de ejecutar el script en producción.
-R
o
--relativo
- Este conmutador debe utilizarse si el directorio de destino aún no existe. Usaremos esta opción más adelante en esta guía para que podamos crear directorios en la máquina de destino con marcas de tiempo en los nombres de las carpetas.
--excluir de
- Este conmutador se utiliza para vincular a una lista de exclusión que contiene rutas de directorio de las que no desea realizar una copia de seguridad. Solo necesita un archivo de texto sin formato con un directorio o ruta de archivo en cada línea.
--incluir-de
- Similar a
--excluir de
, pero se vincula a un archivo que contiene directorios y rutas de archivo de los datos que desea respaldar.
- estadísticas
- No es realmente un cambio importante de ninguna manera, pero si es un administrador de sistemas, puede ser útil conocer las estadísticas detalladas de cada copia de seguridad, solo para que pueda controlar la cantidad de tráfico que se envía a través de su red y demás.
--archivo de registro
- Esto le permite enviar la salida de rsync a un archivo de registro. Definitivamente recomendamos esto para las copias de seguridad automáticas en las que no está allí para leer el resultado usted mismo. Siempre revise los archivos de registro en su tiempo libre para asegurarse de que todo funcione correctamente. Además, es un cambio crucial para que lo use un administrador de sistemas, por lo que no se quedará preguntándose cómo fallaron sus copias de seguridad mientras dejaba al interno a cargo.
Echemos un vistazo a nuestro comando rsync ahora que tenemos algunos modificadores más agregados:
rsync -avzhP --delete --stats --log-file = / home / geek / rsynclogs / backup.log --exclude-from '/home/geek/exclude.txt' -e 'ssh -p 12345' / home / geek / files / [email protected]: / home / geek2 / files /
El comando aún es bastante simple, pero aún no hemos creado una solución de respaldo decente. Aunque nuestros archivos se encuentran ahora en dos ubicaciones físicas diferentes, esta copia de seguridad no hace nada para protegernos de una de las principales causas de pérdida de datos: el error humano.
Copias de seguridad instantáneas
Si borra accidentalmente un archivo, un virus corrompe alguno de sus archivos, o sucede algo más por el cual sus archivos se alteran de manera indeseable, y luego ejecuta su secuencia de comandos de respaldo rsync, los datos respaldados se sobrescriben con los cambios no deseados. Cuando ocurre tal cosa (no si, sino cuándo), su solución de respaldo no hizo nada para protegerlo de la pérdida de datos.
El creador de rsync se dio cuenta de esto y agregó el
--apoyo
y
--backup-dir
argumentos para que los usuarios puedan ejecutar copias de seguridad diferenciales. El muy
primer ejemplo en el sitio web de rsync
muestra un script en el que se ejecuta una copia de seguridad completa cada siete días y, a continuación, se realiza una copia de seguridad de los cambios en esos archivos en directorios separados diariamente. El problema con este método es que para recuperar sus archivos, debe recuperarlos de manera efectiva siete veces diferentes. Además, la mayoría de los geeks ejecutan sus copias de seguridad varias veces al día, por lo que podría tener fácilmente más de 20 directorios de copia de seguridad diferentes en cualquier momento. No solo recuperar sus archivos ahora es una molestia, sino que incluso revisar los datos respaldados puede llevar mucho tiempo: debe saber la última vez que se modificó un archivo para encontrar su copia de respaldo más reciente. Además de todo eso, es ineficiente ejecutar solo copias de seguridad incrementales semanales (o incluso con menos frecuencia en algunos casos).
¡Copias de seguridad instantáneas al rescate! Las copias de seguridad instantáneas no son más que copias de seguridad incrementales, pero utilizan vínculos físicos para conservar la estructura de archivos de la fuente original. Puede ser difícil entenderlo al principio, así que echemos un vistazo a un ejemplo.
Imagina que tenemos un script de respaldo ejecutándose que automáticamente respalda nuestros datos cada dos horas. Siempre que rsync hace esto, nombra cada copia de seguridad en el formato: Copia de seguridad-mes-día-año-tiempo.
Entonces, al final de un día típico, tendríamos una lista de carpetas en nuestro directorio de destino como esta:
Al recorrer cualquiera de esos directorios, verá todos los archivos del directorio de origen exactamente como estaban en ese momento. Sin embargo, no habría duplicados en dos directorios. rsync logra esto con el uso de hardlinking a través del
--link-dest = DIR
argumento.
Por supuesto, para tener estos nombres de directorios bien fechados, tendremos que reforzar un poco nuestro script rsync. Echemos un vistazo a lo que se necesitaría para lograr una solución de respaldo como esta, y luego explicaremos la secuencia de comandos con mayor detalle:
#! / Bin / Bash
#copy old time.txt a time2.txt
si | cp ~ / backup / time.txt ~ / backup / time2.txt
#sobrescribir el archivo antiguo time.txt con el nuevo tiempo
echo `fecha +”% F-% I% p ”`> ~ / backup / time.txt
# hacer el archivo de registro
echo “”> ~ / backup / rsync-`date + ”% F-% I% p” `.log
Comando #rsync
rsync -avzhPR --chmod = Du = rwx, Dgo = rx, Fu = rw, Fgo = r --delete --stats --log-file = ~ / backup / rsync-`date + ”% F-% I% p ”` .log --exclude-from '~ / exclude.txt' --link-dest = / home / geek2 / files / `cat ~ / backup / time2.txt` -e 'ssh -p 12345' / home / geek / files / [email protected]: / home / geek2 / files / `fecha +”% F-% I% p ”` /
# no olvides hacer scp en el archivo de registro y ponerlo con la copia de seguridad
scp -P 12345 ~ / backup / rsync-`cat ~ / backup / time.txt`.log [email protected]: / home / geek2 / files / `cat ~ / backup / time.txt` / rsync-`cat ~ / backup / time.txt`.log
Ese sería un script rsync de instantánea típico. En caso de que te perdiéramos en algún lugar, analicémoslo pieza por pieza:
La primera línea de nuestro script copia el contenido de time.txt a time2.txt. La barra sí es para confirmar que queremos sobrescribir el archivo. A continuación, tomamos la hora actual y la ponemos en time.txt. Estos archivos le resultarán útiles más adelante.
La siguiente línea crea el archivo de registro rsync, nombrándolo rsync-date.log (donde date es la fecha y hora reales).
Ahora, el comando rsync complejo sobre el que le hemos estado advirtiendo:
-avzhPR, -e, --delete, --stats, --log-file, --exclude-from, --link-dest
- Solo los interruptores de los que hablamos antes; desplácese hacia arriba si necesita un repaso.
--- ch también es d = zu = rwx, D go = rx, fu = rw, F go = r
- Estos son los permisos para el directorio de destino. Dado que estamos creando este directorio en medio de nuestro script rsync, necesitamos especificar los permisos para que nuestro usuario pueda escribir archivos en él.
El uso de comandos de fecha y gato
Vamos a repasar cada uso de los comandos date y cat dentro del comando rsync, en el orden en que ocurren. Nota: somos conscientes de que existen otras formas de lograr esta funcionalidad, especialmente con el uso de la declaración de variables, pero para el propósito de esta guía, hemos decidido usar este método.
El archivo de registro se especifica como:
~ / backup / rsync-`date + ”% F-% I% p” `.log
Alternativamente, podríamos haberlo especificado como:
~ / backup / rsync-`cat ~ / backup / time.txt`.log
De cualquier manera, el
--archivo de registro
El comando debería poder encontrar el archivo de registro con fecha creado anteriormente y escribir en él.
El archivo de destino del enlace se especifica como:
--link-dest = / home / geek2 / files / `cat ~ / backup / time2.txt`
Esto significa que el
--link-dest
El comando recibe el directorio de la copia de seguridad anterior. Si ejecutamos copias de seguridad cada dos horas y son las 4:00 p.m. en el momento en que ejecutamos este script, entonces
--link-dest
El comando busca el directorio creado a las 2:00 PM y solo transfiere los datos que han cambiado desde entonces (si los hay).
Para reiterar, es por eso que time.txt se copia en time2.txt al comienzo del script, por lo que el
--link-dest
El comando puede hacer referencia a ese tiempo más tarde.
El directorio de destino se especifica como:
[email protected]: / home / geek2 / files / `fecha +”% F-% I% p ”`
Este comando simplemente coloca los archivos de origen en un directorio que tiene un título con la fecha y hora actuales.
Finalmente, nos aseguramos de que se coloque una copia del archivo de registro dentro de la copia de seguridad.
scp -P 12345 ~ / backup / rsync-`cat ~ / backup / time.txt`.log [email protected]: / home / geek2 / files / `cat ~ / backup / time.txt` / rsync-`cat ~ / backup / time.txt`.log
Usamos una copia segura en el puerto 12345 para tomar el registro de rsync y colocarlo en el directorio adecuado. Para seleccionar el archivo de registro correcto y asegurarse de que termine en el lugar correcto, se debe hacer referencia al archivo time.txt mediante el comando cat. Si se está preguntando por qué decidimos usar cat time.txt en lugar de usar el comando date, es porque podría haber transcurrido mucho tiempo mientras se ejecutaba el comando rsync, así que para asegurarnos de que tenemos el momento adecuado, simplemente cat el documento de texto que creamos anteriormente.
Automatización
Utilizar Cron en Linux o Programador de tareas en Windows para automatizar su script rsync. Una cosa con la que debe tener cuidado es asegurarse de finalizar cualquier proceso rsync en ejecución antes de continuar con uno nuevo. El Programador de tareas parece cerrar automáticamente todas las instancias que ya se estén ejecutando, pero para Linux deberá ser un poco más creativo.
La mayoría de las distribuciones de Linux pueden usar el comando pkill, así que asegúrese de agregar lo siguiente al comienzo de su script rsync:
pkill -9 rsync
Cifrado
No, todavía no hemos terminado. Por fin tenemos una solución de copia de seguridad fantástica (¡y gratuita!), Pero todos nuestros archivos siguen siendo susceptibles de robo. Con suerte, está haciendo una copia de seguridad de sus archivos en algún lugar a cientos de millas de distancia. No importa cuán seguro sea ese lugar lejano, el robo y la piratería siempre pueden ser problemas.
En nuestros ejemplos, hemos canalizado todo nuestro tráfico rsync a través de SSH, lo que significa que todos nuestros archivos están encriptados mientras se encuentran en tránsito hacia su destino. Sin embargo, debemos asegurarnos de que el destino sea igualmente seguro. Tenga en cuenta que rsync solo cifra sus datos a medida que se transfieren, pero los archivos están abiertos una vez que llegan a su destino.
Una de las mejores características de rsync es que solo transfiere los cambios en cada archivo. Si tiene todos sus archivos cifrados y realiza un cambio menor, el archivo completo tendrá que ser retransmitido como resultado de que el cifrado aleatoriza completamente todos los datos después de cualquier cambio.
Por esta razón, es mejor / más fácil usar algún tipo de cifrado de disco, como BitLocker para Windows o dm-crypt para Linux. De esa forma, sus datos están protegidos en caso de robo, pero los archivos se pueden transferir con rsync y su cifrado no obstaculizará su rendimiento. Hay otras opciones disponibles que funcionan de manera similar a rsync o incluso implementan alguna forma de este, como Duplicity, pero carecen de algunas de las características que rsync tiene para ofrecer.
Una vez que haya configurado sus copias de seguridad instantáneas en una ubicación externa y cifrado sus discos duros de origen y destino, dese una palmada en la espalda por dominar rsync e implementar la solución de copia de seguridad de datos más infalible posible.