La guía para no principiantes para sincronizar datos con Rsync
El protocolo rsync puede ser bastante simple de usar para tareas de copia de seguridad / sincronización comunes, pero algunas de sus características más avanzadas pueden sorprenderlo. En este artículo, vamos a mostrar cómo incluso los más grandes acaparadores 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: Sólo Geeks avanzados
Si estás sentado allí pensando "¿Qué diablos es rsync?" O "Sólo uso rsync para tareas realmente simples", es posible que desees consultar nuestro artículo anterior sobre cómo usar rsync para hacer una copia de seguridad de tus datos en Linux. 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 siente cómodo con un terminal de Linux, está 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 razón para que no pueda usarlo tan fácilmente 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.
La instalación es sencilla; puede mantener todas las opciones en sus valores predeterminados hasta que llegue a la pantalla "Seleccionar paquetes".
Ahora necesitas hacer los mismos pasos para Vim y SSH, pero los paquetes se verán un poco diferentes cuando los selecciones, así que aquí hay algunas capturas de pantalla:
Instalando 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 icono que el instalador colocó en su escritorio.
Comandos rsync: simple a avanzado
Ahora que los usuarios de Windows están en la misma página, echemos un vistazo a un simple comando rsync, y veamos cómo el uso de algunos interruptores avanzados puede hacer que sea más complejo..
Digamos que tienes un montón de archivos que necesitan copia de seguridad, ¿quién no los tiene en estos días? Usted conecta su disco duro portátil para poder hacer una copia de seguridad de los archivos de su computadora y emitir el siguiente comando:
rsync -a / home / geek / files / / mnt / usb / files /
O, como se vería en una computadora con Windows con Cygwin:
rsync -a / cygdrive / c / files / / cygdrive / e / files /
Bastante simple, y en ese momento no hay necesidad de usar rsync, ya que simplemente 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 requeriría para comenzar a enviar sus archivos a través de Internet a otra computadora ( uno que hayas 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 que se están transfiriendo para que tenga una idea de lo que está sucediendo y haga un túnel rsync a través de SSH en el puerto 12345.
los -a -v -e --delete
Los interruptores son algunos de los más básicos y de uso general; ya deberías saber mucho sobre ellos si estás leyendo este tutorial. Veamos algunos otros conmutadores que a veces se ignoran pero 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 solo se transfieren archivos pequeños a través de una red rápida.
Un comando rsync con el --Progreso
cambiar como una copia de seguridad está en curso:
--parcial
- Este es otro interruptor que es particularmente útil cuando se transfieren archivos grandes a través de Internet. Si rsync se interrumpe por algún motivo en medio de una transferencia de archivos, el archivo parcialmente transferido se mantiene en el directorio de destino y la transferencia se reanuda donde se detuvo una vez que se ejecutó nuevamente el comando rsync. Al transferir archivos de gran tamaño a través de Internet (por ejemplo, un par de gigabytes), no hay nada peor que tener un segundo corte de Internet, pantalla azul o un error de error humano en la transferencia de archivos y tener que comenzar de nuevo..
-PAG
- este interruptor combina --Progreso
y --parcial
, así que úselo en su lugar y hará que su comando rsync sea un poco más limpio.
-z
o --comprimir
- Este modificador 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 conmutador bastante común, pero está lejos de ser esencial, solo te 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ás usando el --Progreso
Cambia, 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 de salida a un formato legible por humanos, de modo que realmente puede entender la cantidad de datos que se transfieren.
-norte
o --correr en seco
- Este interruptor es esencial para saber cuándo es la primera vez que escribe 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 emitiendo de manera normal, por lo que puede leer todo y asegurarse de que se vea bien antes de llevar su script a producción..
-R
o --relativo
- Este modificador debe usarse si el directorio de destino no existe. Usaremos esta opción más adelante en esta guía para que podamos hacer directorios en la máquina de destino con marcas de tiempo en los nombres de las carpetas..
--excluir de
- Este modificador se usa para vincular a una lista de exclusión que contiene rutas de directorio que no desea que se realicen copias de seguridad. Solo necesita un archivo de texto plano con un directorio o ruta de archivo en cada línea.
--incluir desde
- Similar a --excluir de
, pero se vincula a un archivo que contiene directorios y rutas de acceso a los datos de los que desea hacer una copia de seguridad.
--estadísticas
- No es realmente un cambio importante de ninguna manera, pero si es un administrador del sistema, 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 rsync a un archivo de registro. Definitivamente lo recomendamos para copias de seguridad automáticas en las que no está allí para leer la salida usted mismo. Siempre revise los archivos de registro una vez más en su tiempo libre para asegurarse de que todo funciona correctamente. Además, es un interruptor crucial para que lo use un administrador de sistemas, por lo que no se queda preguntándose cómo fallaron sus copias de seguridad mientras dejó al interno a cargo..
Veamos nuestro comando rsync ahora que hemos agregado algunos conmutadores más:
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 copia de seguridad 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 la pérdida de datos: un error humano.
Copias de seguridad de instantáneas
Si borra accidentalmente un archivo, un virus corrompe cualquiera de sus archivos, o algo más sucede, por lo que sus archivos se alteran de forma no deseada, y luego ejecuta su script de copia de seguridad rsync, sus datos respaldados se sobrescriben con los cambios no deseados. Cuando ocurre algo así (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 primer ejemplo en el sitio web de rsync muestra una secuencia de comandos en la que se realiza una copia de seguridad completa cada siete días, y luego se realiza una copia de seguridad de los cambios en esos archivos en directorios separados todos los días. El problema con este método es que para recuperar sus archivos, tiene que recuperarlos efectivamente siete veces diferentes. 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. Recuperar sus archivos ahora no solo es un dolor, sino que solo mirar a través de sus datos respaldados puede llevarle mucho tiempo, tendría que saber la última vez que se cambió un archivo para encontrar su copia respaldada más reciente. Además de todo esto, es ineficiente ejecutar solo copias de seguridad semanales (o incluso menos frecuentes 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 físicos para conservar la estructura de archivos de la fuente original. Puede que sea difícil envolver la cabeza al principio, así que echemos un vistazo a un ejemplo..
Imagina que tenemos un script de copia de seguridad en ejecución que automáticamente realiza 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-año.
Entonces, al final de un día típico, tendríamos una lista de carpetas en nuestro directorio de destino como esta:
Al atravesar cualquiera de esos directorios, vería cada archivo del directorio de origen exactamente como estaba en ese momento. Sin embargo, no habría duplicados en ninguno de los 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 directorio bien ordenados y 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 el script con mayor detalle:
#! / bin / bash
# copia old time.txt a time2.txt
si | cp ~ / backup / time.txt ~ / backup / time2.txt
#overwrite old time.txt file con new time
echo 'date + ”% 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 / 'date + ”% F-% I% p”' /
# no se olvide de scp 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
Eso sería un típico script de rsync de instantáneas. En caso de que te perdamos en algún lugar, vamos a analizarlo pieza por pieza:
La primera línea de nuestro script copia los contenidos de time.txt a time2.txt. El conducto 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 tarde.
La siguiente línea hace el archivo de registro rsync, denominándolo rsync-date.log (donde fecha es la fecha y hora reales).
Ahora, el complejo comando rsync del que te hemos estado advirtiendo acerca de:
-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.
--chmod = Du = rwx, Dgo = rx, Fu = rw, Fgo = r
- Estos son los permisos para el directorio de destino. Ya que estamos haciendo 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 date y cat.
Vamos a revisar 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 formas de lograr esta funcionalidad, especialmente con el uso de declarar variables, pero para el propósito 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 manera, el --archivo de registro
El comando debe 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
Se da el comando al directorio de la copia de seguridad anterior. Si realizamos copias de seguridad cada dos horas, y son las 4:00 PM 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 a time2.txt al principio del script, por lo que --link-dest
comando puede hacer referencia a ese tiempo 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 de origen en un directorio que tiene un título de la fecha y hora actuales.
Por último, nos aseguramos de que una copia del archivo de registro se coloca 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 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 cat time.txt en lugar de usar el comando date, es porque podría haber transcurrido mucho tiempo mientras se ejecutaba el comando rsync, por lo que para asegurarnos de que tenemos el tiempo adecuado, solo podemos el documento de texto que creamos anteriormente.
Automatización
Use Cron en Linux o el Programador de tareas en Windows para automatizar su script rsync. Algo que debe tener cuidado es asegurarse de finalizar todos los procesos rsync actualmente en ejecución antes de continuar con uno nuevo. El Programador de tareas parece cerrar automáticamente las instancias que ya se están ejecutando, pero para Linux necesitará ser un poco más creativo.
La mayoría de las distribuciones de Linux pueden usar el comando pkill, así que asegúrate de agregar lo siguiente al comienzo de tu script rsync:
pkill -9 rsync
Cifrado
No, no hemos terminado todavía. Finalmente, tenemos una solución de respaldo fantástica (¡y gratuita!), Pero todos nuestros archivos siguen siendo susceptibles de robo. Con suerte, estás haciendo una copia de seguridad de tus 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 canalizado 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 hacia su destino. Sin embargo, debemos asegurarnos de que el destino sea igual de seguro. Tenga en cuenta que rsync solo cifra sus datos cuando se transfieren, pero los archivos están completamente 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 encriptados y realiza un cambio menor, el archivo completo tendrá que ser retransmitido como resultado de que el cifrado haya aleatorizado 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 manera, sus datos estarán protegidos en caso de robo, pero los archivos se pueden transferir con rsync y su cifrado no impedirá su rendimiento. Hay otras opciones disponibles que funcionan de manera similar a rsync o incluso que implementan alguna forma de ello, como Duplicity, pero carecen de algunas de las características que rsync tiene para ofrecer..
Después de haber configurado las copias de seguridad de instantáneas en una ubicación remota y cifrado de los discos duros de origen y destino, dése una palmadita en la espalda para dominar rsync e implementar la solución de copia de seguridad de datos más infalible posible.