rsync es un protocolo creado para sistemas tipo Unix que proporciona una versatilidad increíble para realizar copias de seguridad y sincronizar datos. Se puede usar localmente para hacer una copia de seguridad de los archivos en diferentes directorios o se puede configurar para que se sincronice a través de Internet con otros hosts.
Se puede usar en sistemas Windows, pero solo está disponible a través de varios puertos (como Cygwin), por lo que en este how-to hablaremos de configurarlo en Linux. Primero, necesitamos instalar / actualizar el cliente rsync. En las distribuciones de Red Hat, el comando es “yum install rsync” y en Debian es “sudo apt-get install rsync”.
El comando en Red Hat/CentOS, después de iniciar sesión como root (tenga en cuenta que algunas distribuciones recientes de Red Hat admiten el método sudo).
El comando en Debian/Ubuntu.
¿De qué vamos a hablar?
Uso de rsync para copias de seguridad locales
En la primera parte de este tutorial, haremos una copia de seguridad de los archivos de Directory1 a Directory2. Ambos directorios están en el mismo disco duro, pero esto funcionaría exactamente igual si los directorios existieran en dos unidades diferentes. Hay varias formas diferentes en que podemos abordar esto, dependiendo del tipo de copias de seguridad que desee configurar. Para la mayoría de los propósitos, la siguiente línea de código será suficiente:
€ rsync -av --delete /Directory1/ /Directory2/
El código anterior sincronizará el contenido de Directory1 con Directory2 y no dejará diferencias entre los dos. Si rsync encuentra que Directory2 tiene un archivo que Directory1 no tiene, lo eliminará. Si rsync encuentra un archivo que se ha cambiado, creado o eliminado en Directory1, reflejará esos mismos cambios en Directory2.
Hay muchos interruptores diferentes que puede usar para rsync para personalizarlo según sus necesidades específicas. Esto es lo que el código mencionado anteriormente le dice a rsync que haga con las copias de seguridad:
1. -a = recursivo (recurse en directorios), enlaces (copiar enlaces simbólicos como enlaces simbólicos), permanentes (conservar permisos), tiempos (conservar tiempos de modificación), agrupar (conservar grupo), propietario (conservar propietario), conservar archivos de dispositivo y conservar archivos especiales.
2. -v = detallado. La razón por la que creo que verbose es importante es para que pueda ver exactamente qué rsync está respaldando. Piense en esto: ¿Qué pasa si su disco duro se está estropeando y comienza a eliminar archivos sin su conocimiento, luego ejecuta su script rsync y empuja esos cambios a sus copias de seguridad, eliminando así todas las instancias de un archivo del que no quería deshacerse?
3. –delete = Esto le indica a rsync que elimine cualquier archivo que esté en Directory2 que no esté en Directory1. Si elige usar esta opción, le recomiendo que también use las opciones detalladas, por las razones mencionadas anteriormente.
Usando el script anterior, aquí está el resultado generado mediante el uso de rsync para hacer una copia de seguridad de Directory1 en Directory2. Tenga en cuenta que sin el cambio detallado, no recibiría información tan detallada.
La captura de pantalla anterior nos dice que File1.txt y File2.jpg se detectaron como nuevos o cambiados de las copias existentes en Directory2, por lo que se les dio una copia de seguridad. Consejo noob: Observe las barras diagonales finales al final de los directorios en mi comando rsync: son necesarias, asegúrese de recordarlas.
Repasaremos algunos interruptores más útiles hacia el final de este tutorial, pero solo recuerde que para ver una lista completa puede escribir “man rsync” y ver una lista completa de interruptores para usar.
Eso lo cubre en lo que respecta a las copias de seguridad locales. Como puede ver, rsync es muy fácil de usar. Se vuelve un poco más complejo cuando se usa para sincronizar datos con un host externo a través de Internet, pero le mostraremos una forma simple, rápida y segura de hacerlo.
Uso de rsync para copias de seguridad externas
rsync se puede configurar de varias maneras diferentes para copias de seguridad externas, pero repasaremos el método más práctico (también el más fácil y seguro) de tunelización de rsync a través de SSH. La mayoría de los servidores e incluso muchos clientes ya tienen SSH, y se puede usar para sus copias de seguridad rsync. Le mostraremos el proceso para obtener una máquina Linux para hacer una copia de seguridad en otra en una red local. El proceso sería exactamente el mismo si un host estuviera en Internet en algún lugar, solo tenga en cuenta que el puerto 22 (o cualquier puerto en el que tenga configurado SSH), tendría que reenviarse en cualquier equipo de red en el lado del servidor.
En el servidor (el equipo que recibirá las copias de seguridad), asegúrese de que SSH y rsync estén instalados.
# yum -y install ssh rsync
# sudo apt-get install ssh rsync
Además de instalar SSH y rsync en el servidor, todo lo que realmente necesita hacerse es configurar los repositorios en el servidor donde desea que se realice una copia de seguridad de los archivos, y Asegúrese de que SSH esté bloqueado. Asegúrese de que el usuario que planea usar tenga un complex password, y también puede ser una buena idea cambiar el puerto en el que SSH escucha (el valor predeterminado es 22).
Ejecutaremos el mismo comando que ejecutamos para usar rsync en un equipo local, pero incluiremos las adiciones necesarias para tunelizar rsync a través de SSH a un servidor en mi red local. Para el usuario “geek” que se conecta a “192.168.235.137” y usa los mismos interruptores que los anteriores (-av –delete) ejecutaremos lo siguiente:
€ rsync -av --delete -e ssh /Directory1/ geek@192.168.235.137:/Directory2/
Si tiene escucha SSH en algún puerto que no sea 22, deberá especificar el número de puerto, como en este ejemplo donde uso el puerto 12345:
€ rsync -av --delete -e 'ssh -p 12345' /Directory1/ geek@192.168.235.137:/Directory2/
Como puede ver en la captura de pantalla anterior, la salida dada al hacer una copia de seguridad a través de la red es más o menos la misma que cuando se realiza una copia de seguridad local, lo único que cambia es el comando que usa. Observe también que solicitó una contraseña. Esto es para autenticarse con SSH. Puede configurar claves RSA para omitir este proceso, lo que también simplificará la automatización de rsync.
Automatización de las copias de seguridad de rsync
Cron se puede utilizar en Linux para automatizar la ejecución de comandos, como rsync. Usando Cron, podemos hacer que nuestro sistema Linux ejecute copias de seguridad nocturnas, o con la frecuencia con la que desee que se ejecuten.
Para editar el archivo de tabla cron para el usuario con el que ha iniciado sesión, ejecute:
€ crontab -e
Deberá estar familiarizado con vi para editar este archivo. Escriba “I” para insertar y, a continuación, comience a editar el archivo de tabla cron.
Cron utiliza la siguiente sintaxis: minuto de la hora, hora del día, día del mes, mes del año, día de la semana, comando.
Puede ser un poco confuso al principio, así que déjame darte un ejemplo. El siguiente comando ejecutará el comando rsync todas las noches a las 10 PM:
0 22 * * * rsync -av --delete /Directory1/ /Directory2/
El primer “0” especifica el minuto de la hora, y “22” especifica las 10 PM. Como queremos que este comando se ejecute diariamente, dejaremos el resto de campos con asteriscos y luego pegaremos el comando rsync.
Una vez que haya terminado de configurar Cron, presione escape y, a continuación, escriba “:wq” (sin las comillas) y presione entrar. Esto guardará sus cambios en vi.
Cron puede obtener mucho más en profundidad que esto, pero continuar con esto estaría más allá del alcance de este tutorial. La mayoría de las personas solo querrán una simple copia de seguridad semanal o diaria, y lo que le hemos demostrado puede lograrlo fácilmente. Para obtener más información sobre Cron, consulte las páginas de comando man.
Otras características útiles
Otra cosa útil que puede hacer es poner sus copias de seguridad en un archivo zip. Deberá especificar dónde desea que se coloque el archivo zip y, a continuación, sincronizar ese directorio con el directorio de copia de seguridad. Por ejemplo:
€ zip /ZippedFiles/archive.zip /Directory1/ && rsync -av --delete /ZippedFiles/ /Directory2/
El comando anterior toma los archivos de Directory1, los coloca en /ZippedFiles/archive.zip y luego sincroniza ese directorio con Directory2. Inicialmente, puede pensar que este método resultaría ineficiente para copias de seguridad grandes, teniendo en cuenta que el archivo zip cambiará cada vez que se realice la más mínima alteración en un archivo. Sin embargo, rsync solo transfiere los datos modificados, por lo que si su archivo zip es de 10 GB y luego agrega un archivo de texto a Directory1, rsync sabrá que es todo lo que agregó (aunque esté en un zip) y transfiera solo los pocos kilobytes de datos modificados.
Hay un par de formas diferentes de cifrar sus copias de seguridad rsync. El método más fácil es instalar el cifrado en el propio disco duro (en el que se realiza una copia de seguridad de sus archivos). Otra forma es cifrar sus archivos antes de enviarlos a un servidor remoto (u otro disco duro, sea lo que sea que esté respaldando). Cubriremos estos métodos en artículos posteriores.
Independientemente de las opciones y características que elija, rsync demuestra ser una de las herramientas de copia de seguridad más eficientes y versátiles hasta la fecha, e incluso un simple script rsync puede evitarle perder sus datos.