17Aug

La guía para principiantes para sincronizar datos con Rsync

click fraud protection

El protocolo rsync puede ser bastante simple de usar para trabajos ordinarios de respaldo / sincronización, pero algunas de sus características más avanzadas pueden sorprenderlo. En este artículo, vamos a mostrar cómo incluso los mayores acaparadores de datos y entusiastas de la copia de seguridad pueden manejar rsync como una solución única para todas sus necesidades de redundancia de datos.

Advertencia: Advanced Geeks Only

Si estás sentado allí pensando "¿Qué diablos es rsync?" O "Solo uso rsync para tareas realmente simples", es posible que desees consultar nuestro artículo anterior sobre cómo usar rsync para hacer copias de seguridadsus 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 idea clara de cómo usar rsync( sinceramente, no es tan complejo) y se sienta cómodo con un terminal Linux, ya puede continuar con esta guía avanzada.

Ejecutando rsync en Windows

Primero, pongamos nuestros lectores de Windows en la misma página que nuestros gurús de Linux. Aunque rsync está diseñado para ejecutarse en sistemas tipo Unix, no hay ninguna razón para 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íjase a su sitio web y descargue la versión de 32 o 64 bits, dependiendo de su computadora.

instagram viewer

La instalación es sencilla;puede mantener todas las opciones en sus valores predeterminados hasta que llegue a la pantalla "Seleccionar paquetes".

Ahora necesita hacer los mismos pasos para Vim y SSH, pero los paquetes van a parecer un poco diferentes cuando vaya a seleccionarlos, así que aquí hay algunas capturas de pantalla:

Instalación de Vim:

Instalación de SSH:

Después de que hayaseleccionó esos tres paquetes, siga haciendo clic en siguiente hasta que termine la instalación. Luego puede abrir Cygwin haciendo clic en el ícono que el instalador colocó en su escritorio. Comandos rsync de

:

simple a avanzado Ahora que los usuarios de Windows están en la misma página, echemos un vistazo a un comando rsync simple y muestre cómo el uso de algunos conmutadores avanzados puede hacer que sea complejo rápidamente.

Digamos que tiene una gran cantidad de archivos que necesitan una copia de seguridad, ¿quién no lo hace en estos días? Conecta su disco duro portátil para que pueda hacer una copia de seguridad de los archivos de su computadora, y emita el siguiente comando:

rsync -a /home/geek/files/ /mnt/usb/files/

O, como se vería en una computadora Windows con Cygwin:

rsync -a /cygdrive/c/files/ /cygdrive/e/files/

Bastante simple, y enese punto realmente no hay necesidad de usar rsync, ya que solo puedes 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 datos nuevos al disco duro. Con archivos grandes, y especialmente la transferencia de archivos a través de Internet, eso es un gran problema.

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 requeriría para comenzar a enviar sus archivos a otra computadora por Internet.(uno que ha alquilado, un miembro de la familia, 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 los archivos extraños del destino que ya no existen en el directorio de origen, generará los nombres de los archivos transferidos para que tenga una idea de lo que está sucediendo, y tunelizará rsync a través de SSH en el puerto 12345.

El -a -v -e --los conmutadores de borrado son algunos de los más básicos y comúnmente utilizados;ya deberías saber mucho sobre ellos si estás leyendo este tutorial. Repasemos algunos otros switches que a veces son ignorados pero increíblemente útiles:

--progress - 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 gran cantidad de información sin sentido cuando solo se transfieren archivos pequeños a través de una red rápida.

Un comando rsync con el modificador de progreso como copia de seguridad está en progreso:

--partial - Este es otro conmutador que es particularmente útil cuando se transfieren archivos de gran tamaño a través de Internet. Si rsync se interrumpe por cualquier motivo en medio de una transferencia de archivos, el archivo parcialmente transferido se guarda en el directorio de destino y la transferencia se reanuda donde se detuvo una vez que se ejecuta el comando rsync nuevamente. Cuando transfiere archivos de gran tamaño a través de Internet( digamos, un par de gigabytes), no hay nada peor que tener un segundo corte de Internet, una pantalla azul o un error humano que interrumpan la transferencia de archivos y tengan que volver a comenzar.

-P: este conmutador combina --progress y --partial, así que úsala en su lugar y hará que tu comando rsync sea un poco más ordenado.

-z o --compress - Este interruptor hará que rsync comprima los datos del archivo a medida que se transfiere, reduciendo la cantidad de datos que se deben enviar 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á usando el modificador de progreso, definitivamente querrá usar este también. Es decir, a menos que quiera convertir bytes a megabytes sobre la marcha. El modificador -h convierte todos los números emitidos a un formato legible por humanos, por lo que realmente puede dar sentido a la cantidad de datos que se transfieren.

-n o --dry-run - Este cambio es esencial para saber cuándo está escribiendo su script rsync por primera vez y probándolo. Realiza una ejecución de prueba, pero en realidad no realiza ningún cambio; los cambios potenciales aún se generan como normales, por lo que puede leer todo y asegurarse de que se ve bien antes de poner en producción el script.

-R o --relativo: este modificador se debe usar si el directorio de destino no existe todavía. 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.

--exclude-from - Este modificador se utiliza para vincular a una lista de exclusiones que contiene rutas de acceso de directorio de las que no quiere hacer una copia de seguridad. Solo necesita un archivo de texto sin formato con un directorio o ruta de archivo en cada línea.

--include-from - Similar a --exclude-from, pero se vincula a un archivo que contiene directorios y rutas de archivos de los datos que desea copiar.

--stats - No es realmente un cambio importante de ninguna manera, pero si usted es un administrador de sistemas, puede ser útil conocer las estadísticas detalladas de cada copia de seguridad, solo para que pueda monitorear la cantidad de tráfico que se envía a través de su red y tal.

--log -log - Esto le permite enviar la salida rsync a un archivo de registro. Definitivamente recomendamos esto para copias de seguridad automáticas en las que no esté allí para leer el resultado usted mismo. Siempre proporcione una vez más los archivos de registro en su tiempo libre para asegurarse de que todo esté funcionando correctamente. Además, es un cambio crucial para el administrador de un sistema, por lo que no se preguntará cómo fallaron sus copias de seguridad al dejar al interno a cargo.

Echemos un vistazo a nuestro comando rsync ahora que tenemos algunos switches 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 sigue siendo bastante simple, pero todavía no hemos creado una solución de copia de seguridad decente. Aunque nuestros archivos ahora se encuentran 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: error humano.

Copias de seguridad de instantáneas

Si accidentalmente elimina un archivo, un virus daña alguno de sus archivos o sucede algo más por lo cual sus archivos se alteran indeseablemente y luego ejecuta su secuencia de comandos de copia de seguridad rsync, los datos de la copia de seguridad 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ó los argumentos --backup y --backup-dir para que los usuarios pudieran ejecutar copias de seguridad diferenciales. El primer ejemplo en el sitio web de rsync muestra un script donde se ejecuta una copia de seguridad completa cada siete días, y luego los cambios en esos archivos se respaldan diariamente en directorios separados. El problema con este método es que para recuperar sus archivos, debe recuperarlos de manera efectiva siete veces. Además, la mayoría de los geeks ejecutan sus copias de seguridad varias veces al día, por lo que fácilmente podría tener más de 20 directorios de copia de seguridad diferentes en un momento dado. Ahora no solo es difícil recuperar los archivos, sino que incluso al mirar los datos de la copia de seguridad puede consumir mucho tiempo. Tendría que saber la última vez que se modificó un archivo para encontrar su copia de seguridad 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 de instantáneas al rescate! Las copias de seguridad de instantáneas no son más que copias de seguridad incrementales, pero utilizan enlaces permanentes para conservar la estructura de archivos de la fuente original. Eso puede ser difícil de entender al principio, así que echemos un vistazo a un ejemplo.

Pretendemos que se ejecute un script de copia de seguridad que realice automáticamente una copia de seguridad de nuestros datos cada dos horas. Cada vez que rsync hace esto, nombra cada copia de seguridad en el formato de: Copia de seguridad, mes, día, año y hora.

Entonces, al final de un día típico, tendríamos una lista de carpetas en nuestro directorio de destino de esta manera:

Al recorrer cualquiera de esos directorios, vería cada archivo del directorio de origen exactamente como era en ese momento. Sin embargo, no habría duplicados en ninguno de los dos directorios.rsync logra esto con el uso de enlaces duros a través del argumento --link-dest = DIR.

Por supuesto, para tener estos nombres de directorio bien y prolijamente fechados, vamos a tener 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

sí |cp ~ /backup/ time.txt ~ /backup/ time2.txt

#overwrite antiguo archivo time.txt con nueva hora

echo `date +"% F-% I% p "` & gt;~ /backup/ time.txt

#hacer que el archivo de registro

echo "" & gt;~ /backup/ rsync-`date + "% F-% I% p" `.log

# comando sync

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 se olvide de copiar el archivo de registro y ponerlo con elcopia 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

quesería una secuencia de comandos de rsync snapshot típica. En caso de que lo hayamos perdido en alguna parte, analicémoslo pieza por pieza:

La primera línea de nuestro script copia el contenido de time.txt a time2.txt. La tubería sí es para confirmar que queremos sobrescribir el archivo. A continuación, tomamos la hora actual y la colocamos en time.txt. Estos archivos serán útiles más adelante.

La siguiente línea crea el archivo de registro rsync y lo nombra rsync-date.log( donde la fecha es la fecha y la hora reales).

Ahora, el complejo comando rsync del que le hemos estado avisando:

-avzhPR, -e, --delete, --stats, -log-file, --exclude-from, --link-dest - Justlos interruptores de los que hablamos antes;desplácese hacia arriba si necesita un repaso.

--chmod = Du = rwx, Dgo = rx, Fu = rw, Fgo = r - Estos son los permisos para el directorio de destino. Como estamos haciendo este directorio en el medio de nuestro script rsync, necesitamos especificar los permisos para que nuestro usuario pueda escribir archivos en él.

El uso de los comandos date y cat

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 hay otras maneras de lograr esta funcionalidad, especialmente con el uso de variables de declaración, pero a los efectos de esta guía, hemos decidido utilizar 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 forma, el comando --log-file debería poder encontrar el archivo de registro fechado previamente creado 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 comando --link-dest recibe el directorio de la copia de seguridad anterior. Si estamos ejecutando copias de seguridad cada dos horas, y son las 4:00 PM en el momento en que ejecutamos este script, entonces el comando --link-dest busca el directorio creado a las 2:00 PM y solo transfiere los datos que han cambiado desde entonces( Si alguna).

Para reiterar, es por eso que time.txt se copia a time2.txt al comienzo de la secuencia de comandos, por lo que el comando --link-dest puede hacer referencia a esa hora más tarde.

El directorio de destino se especifica como:

[email protected]: /home/geek2/files/ `date +"% F-% I% p "`

Este comando simplemente coloca los archivos fuente en un directorio que tiene un título de 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

UsamosCopia segura en el puerto 12345 para tomar el registro rsync y colocarlo en el directorio apropiado. Para seleccionar el archivo de registro correcto y asegurarse de que termina en el lugar correcto, se debe hacer referencia al archivo time.txt a través del comando cat. Si te estás preguntando por qué decidimos utilizar time.txt en lugar de simplemente usar el comando date, es porque podría haber pasado mucho tiempo mientras se ejecutaba el comando rsync, así que para asegurarnos de que tenemos el momento adecuado, simplemente catel documento de texto que creamos antes. Automatización

Utilice Cron en Linux o el Programador de tareas en Windows para automatizar su secuencia de comandos rsync. Una cosa que debes tener cuidado es asegurarte de finalizar cualquier proceso rsync actualmente en ejecución antes de continuar uno nuevo. El Programador de tareas parece cerrar automáticamente cualquier instancia que ya esté ejecutándose, 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

Encriptación

No, aún no hemos terminado. Finalmente tenemos una solución de respaldo fantástica( ¡y gratuita!), Pero todos nuestros archivos aún son susceptibles de robo. Con suerte, está realizando una copia de seguridad de sus archivos en algún lugar a cientos de millas de distancia. No importa qué tan seguro sea ese lugar lejano, el robo y la piratería siempre pueden ser problemas.

En nuestros ejemplos, hemos tunelizado todo nuestro tráfico rsync a través de SSH, lo que significa que todos nuestros archivos están encriptados mientras están en tránsito a su destino. Sin embargo, debemos asegurarnos de que el destino sea igual de seguro. Tenga en cuenta que rsync solo cifra sus datos a medida que se transfieren, pero los archivos se abren 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 encriptados y realiza un cambio menor, el archivo completo tendrá que ser retransmitido como resultado del cifrado aleatorizando por completo 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 esta manera, sus datos estarán protegidos en caso de robo, pero los archivos se pueden transferir con rsync y su encriptación no obstaculizará su rendimiento. Hay otras opciones disponibles que funcionan de manera similar a rsync o incluso implementan alguna forma de la misma, como Duplicity, pero carecen de algunas de las funciones que rsync tiene para ofrecer.

Después de configurar las copias de seguridad de las instantáneas en una ubicación externa y cifrar los discos duros de origen y destino, date una palmadita en la espalda para dominar rsync e implementar la solución de copia de seguridad de datos más infalible posible.