Loading AI tools
De Wikipedia, la enciclopedia libre
rsync es una aplicación libre para sistemas de tipo Unix y Microsoft Windows que ofrece transmisión eficiente de datos incrementales, que opera también con datos comprimidos y cifrados. Mediante una técnica de delta encoding, permite sincronizar archivos y directorios entre dos máquinas de una red o entre dos ubicaciones en una misma máquina, minimizando el volumen de datos transferidos. Una característica importante de rsync no encontrada en la mayoría de programas o protocolos es que la copia toma lugar con sólo una transmisión en cada dirección. rsync puede copiar o mostrar directorios contenidos y copia de archivos, opcionalmente usando compresión y recursión.
rsync | ||
---|---|---|
Información general | ||
Desarrollador | Wayne Davidson | |
Lanzamiento inicial | 19 de junio de 1996 | |
Licencia | GNU General Public License | |
Estado actual | En desarrollo | |
Versiones | ||
Última versión estable | 3.3.06 de abril de 2024 | |
Enlaces | ||
Actuando como un daemon de servidor, rsync escucha por defecto el puerto TCP 873, sirviendo archivos en el protocolo nativo rsync o vía un terminal remoto como RSH o SSH. En el último caso, el ejecutable del cliente rsync debe ser instalado en el host local y remoto.
rsync se distribuye bajo la licencia GNU General Public License.
Los autores originales son Andrew Tridgell y Paul Mackerras. Tridgell usó rsync como el tema de su tesis para su grado de PhD en la Australian National University.[1]
rsync fue anunciado por primera vez el 19 de junio de 1996.[2]
Rsync 3.0 fue lanzado el 1 de marzo de 2008.[3]
El algoritmo en que se basa rsync fue creado por el programador australiano Andrew Tridgell, permite transmitir eficientemente una estructura (como un archivo) a través de un canal de comunicación cuando el receptor ya tiene una versión diferente de la misma estructura. Su funcionamiento a grandes rasgos es el siguiente:
Mientras que el algoritmo rsync forma parte del núcleo de la aplicación rsync y esencialmente optimiza las transferencias entre dos computadoras sobre TCP/IP, la aplicación rsync provee otras funciones que asisten en la transferencia. Estas incluyen compresión y descompresión de los datos bloque por bloque, utilizando zlib al enviar y recibir, y soporte para protocolos de cifrado, tal como SSH, lo que permite transmisión cifrada y eficientemente diferenciada de datos comprimidos usando el algoritmo rsync.
Adicionalmente puede utilizarse una aplicación de tunneling también para crear un túnel cifrado que asegure los datos transmitidos.
Además de archivos, el algoritmo permite copiar directorios, aún recursivamente, así como vínculos, dispositivos, grupos y permisos. No requiere por defecto privilegios de root para su uso.
rsync fue escrito como un reemplazo de rcp y SCP. Una de las primeras aplicaciones de rsync fue la creación de un espejo (mirroring) o copia de respaldo de múltiples clientes Unix dentro de un servidor Unix central, usando rsync/ssh y cuentas estándares de Unix. Habitualmente se ejecuta mediante herramientas de scheduling como cron, para automatizar procesos de sincronización entre múltiples computadoras host y servidores centrales.
La invocación más simple de la aplicación a través de línea de órdenes tiene la siguiente forma:
rsync [OPCIONES]... ORIGEN [ORIGEN]... DESTINO
La simplicidad de la aplicación se puede ver en el siguiente ejemplo (se utilizan opciones largas para facilitar su explicación, pero también se pueden utilizar opciones abreviadas):
rsync --verbose --compress --rsh=/usr/local/bin/ssh --recursive \ --times --perms --links --delete --exclude "*bak" --exclude "*~" \ /www/* webserver:/www
Esta orden ejecuta rsync en modo verboso (muestra mensajes de estado por la salida estándar), con compresión, a través de ssh, en forma recursiva para los subdirectorios, preservando fechas y permisos del archivo origen, incluyendo vínculos, borrando archivos que fueron borrados en el directorio origen, excluyendo backups y archivos temporales (*bak, *~); el origen es el contenido del directorio /www y el destino el directorio /www en el host webserver.
Adicionalmente es necesario configurar uno de los puntos hosts como servidor rsync, ejecutando rsync en modo daemon:
rsync --daemon
y configurando el archivo /etc/rsyncd.conf
.
Una vez configurado un servidor, cualquier máquina con rsync instalado puede sincronizar archivos hacia o desde éste.
Para sincronizar dos carpetas usando las opciones abreviadas:
rsync -au --delete
En el siguiente ejemplo se sincronizan dos carpetas usando las opciones abreviadas, y la información es enviada a un archivo cuyo nombre es la fecha y hora de la sincronización. Los archivos existentes en la carpeta destino que no existen en la carpeta origen, son borrados al finalizar la transferencia de datos:
rsync -auv --delete-after /carpetaorigen /carpetadestino>`date +"%d-%b-%Y-%H:%M"`.log
Existen otras utilidades basadas en el algoritmo de rsync.
Existen además versiones para otros sistemas operativos, como rsyncX, una versión para Mac OS X que permite transferir forks de recursos, y que en su versión rsyncXCD permite además crear particiones booteables.
Incluso es posible utilizar rsync en Microsoft Windows, a través de Cygwin.
rsync debe instalarse en la máquina tanto de origen como de destino.[5]
Otras herramientas que usan rsync son rdiff-backup y osync
rsync se puede usar como una alternativa avanzada para la orden cp o mv, especialmente para copiar archivos más grandes:
$ rsync -P source destination
La opción -P es la misma que Ic|--partial --progress, que mantiene los archivos parcialmente transferidos y muestra una barra de progreso de la transferencia.
Es posible que desee utilizar la opción -r/--recursive para recoger recursivamente el contenido de los directorios.
Los archivos se pueden copiar localmente como con cp, pero el propósito motivador de rsync es copiar archivos de forma remota, es decir, entre dos servidores diferentes. Las ubicaciones remotas se pueden especificar con una sintaxis de dos puntos entre servidores:
$ rsync source host:destination
o
$ rsync host:source destination
Las transferencias de archivos en red utilizan el protocolo SSH de forma predeterminada y host puede ser un nombre de equipo real o un perfil/alias predefinido desde .ssh/config.
Ya sea que transfiera archivos de forma local o remota, rsync primero crea una lista de archivos que contiene información (de manera predeterminada, el tamaño del archivo y la última marca de tiempo de modificación) que luego se utilizará para determinar si el archivo necesita ser construido. Para cada archivo que se construirá, se encuentra una suma de comprobación débil y fuerte para todos los bloques, de modo que cada bloque tenga una longitud de S bytes, que no se superponga y que tenga un desplazamiento que sea divisible por S. Con esta información, se puede construir un archivo grande usando rsync sin tener que transferir todo el archivo. Para obtener una explicación práctica y matemática detallada, remítase a how rsync works y the rsync algorithm, respectivamente.
Para pasar a rsync valores predeterminados rápidamente, se pueden usar algunos alias:
function cpr() { rsync --archive -hh --partial --info=stats1 --info=progress2 --modify-window=1 "$@" }
function mvr() { rsync --archive -hh --partial --info=stats1 --info=progress2 --modify-window=1 --remove-source-files "$@" }
El uso del término checksum («suma de verificación») no es asimilable al comportamiento de la opción --checksum. La opción --checksum afecta a la heurística del archivo utilizada antes de transferir cualquier archivo. Independientemente de la opción ic|--checksum, siempre se usa una «suma de verificación» (checksum) para la construcción de archivos basada en bloques, que es como rynsc transfiere un archivo.[5]
Arch por defecto usa «cp» de GNU. Sin embargo, rsync sigue la convención de BSD para «cp», que da un tratamiento especial a los directorios de origen con una bara diagonal «/». A pesar de que:
$ rsync -r source destination
crea un directorio «destination/source» con el contenido de «source»;
y la orden:
$ rsync -r source/ destination
copia todos los archivos presentes en «source/» directamente a «destination», sin subdirectorio intermedio, como si lo hubiera invocado así:
$ rsync -r source/. destination
Este comportamiento es diferente al de GNU para cp, que trata «source» y «source/» de forma idéntica (pero no «source/.»). Además, algunos intérpretes de órdenes añaden automáticamente la barra inclinada final cuando se completan los nombres de directorios con el tabulador. Debido a estos factores, puede haber cierta tendencia entre los usuarios de rsync nuevos u ocasionales a olvidarse del comportamiento diferente de rsync, y sin darse cuenta provoquen un desastre o incluso sobrescribir archivos importantes al dejar la barra diagonal en la línea de órdenes.
Por lo tanto, puede ser prudente usar un script para eliminar automáticamente las barras diagonales finales antes de invocar rsync:
#!/bin/zsh new_args=(); for i in "$@"; do case $i in /) i=/;; */) i=${i%/};; esac new_args+=$i; done exec rsync "${(@)new_args}"
Este script se puede colocar en algún lugar de la ruta y crear un alias a rsync en el archivo de inicio de shell.
El protocolo rsync puede usarse fácilmente para realizar copias de seguridad, transfiriendo solo los archivos que han cambiado desde la última copia de seguridad. Esta sección describe un script para realizar copias de seguridad programada muy simple que utiliza rsync, el cual generalmente se utiliza para realizar copias a medios extraíbles.[5]
A modo de ejemplo, el script se creará en el directorio /etc/cron.daily, y se ejecutará diariamente si un demonio cron está instalado y configurado correctamente.
Primero, cree un script que contenga las opciones de órdenes apropiadas:
/etc/cron.daily/backup
#!/bin/bash rsync -a --delete --quiet /folder/to/backup /location/of/backup
-a : indica que los archivos deben archivarse, lo que significa que la mayoría de sus características se conservan (no así las ACL, enlaces duros o atributos extendidos como capacidades)
--delete : significa que los archivos eliminados en origen también serán eliminados en la copia de seguridad
Aquí, /folder/to/backup debe cambiarse por aquello que quiere respaldar (/home, por ejemplo) y /location/of/backup es donde se quiere guardar la copia de seguridad (/media/disk, pongamos por caso).
Por último, el script debe hacerse ejecutable:[5]
# chmod +x /etc/cron.daily/backup
Si realiza una copia de seguridad en un servidor remoto utilizando SSH, utilice este script en su lugar:
/etc/cron.daily/backup
#!/bin/bash rsync -a --delete --quiet -e ssh /folder/to/backup remoteuser@remotehost:/location/of/backup
-e ssh : le dice a rsync que use SSH remoteuser : es el usuario en el servidor remotehost -a : agrupa todas estas opciones de -rlptgoD (recursivo, enlaces, permisos, tiempos, grupo, propietario, dispositivos)
Rsync intentará modificar cualquier archivo respaldado previamente en la máquina de destino para que coincida con su estado actual en la máquina de origen, con cada copia de seguridad incremental. Esto significa que al hacer una copia de seguridad de los archivos que son propiedad de root mediante SSH (y al preservar los permisos y las propiedades como con la opción -a), se necesita acceso de root a la máquina de destino. La forma preferida de lograr esto para la automatización es configurar el demonio SSH para permitir que root inicie sesión utilizando una clave pública sin contraseña y ejecutar la orden rsync como root.
Este script inicia una copia de seguridad cuando se establece la conexión de red.
Primero, cree un script que contenga las opciones de órdenes apropiadas:
/etc/NetworkManager/dispatcher.d/backup
#!/bin/bash
if [ x"$2" = "xup" ] ; then rsync --force --ignore-errors -a --delete --bwlimit=2000 --files-from=files.rsync /folder/to/backup / location/to/backup fi
-a : agrupa todas estas opciones de -rlptgoD (recursivo, enlaces, permisos, tiempos, grupo, propietario, dispositivos --files-from : lee la ruta relativa de /folder/to/backup desde este archivo --bwlimit : limita el ancho de banda de E/S; KBytes por segundo
Además, el script debe tener permiso de escritura solo para el root.
En lugar de ejecutar copias de seguridad a intervalos de tiempo según se haya programado, como las implementadas en cron, es posible ejecutar una copia de seguridad cada vez que uno de los archivos de los que está realizando una copia de seguridad cambia. Las unidades systemd.path usan inotify para monitorear el sistema de archivos, y se pueden usar junto con los archivos systemd.service para iniciar cualquier proceso (en este caso su copia de seguridad con rsync) basado en un evento del sistema de archivos.
Primero, debe crearse el archivo systemd.path que monitoreará los archivos que está respaldando:
~/.config/systemd/user/backup.path|
[Unit] Description=Comprueba si las rutas que se están copiando actualmente han cambiado
[Path] PathChanged=%h/documents PathChanged=%h/music
[Install] WantedBy=default.target
Luego cree un archivo systemd.service que se activará cuando detecte un cambio. De manera predeterminada, se activará un archivo de servicio con el mismo nombre que la unidad de ruta (en este caso, backup.path), salvo por la extensión .service en lugar de .path (en este caso backup.service).
Si se necesita ejecutar múltiples órdenes rsync, se utiliza Type=oneshot. Esto le permite especificar múltiples parámetros ExecStart=, uno para cada orden rsync, que se ejecutará. Alternativamente, puede simplemente escribir un script para realizar todas sus copias de seguridad, al igual que con los scripts de cron.
~/.config/systemd/user/backup.service [Unit] Description=Backs up files
[Service] ExecStart=/usr/bin/rsync %h/./documents %h/./music -CERrltm --delete ubuntu:
Ahora se debe iniciar/activar backup.path como un servicio de systemd normal y comenzará a monitorear los cambios de los archivos e iniciará en consecuencia backup.service.
Esta es una opción útil de rsync, que consiste en realizar una copia de seguridad completa (en cada ejecución) y mantener una copia de seguridad diferencial solo de los archivos modificados en un directorio separado para cada día de la semana.
Primero, se crea un script que contenga las opciones de órdenes apropiadas:
/etc/cron.daily/backup #!/bin/bash
DAY=$(date +%A)
if [ -e /location/to/backup/incr/$DAY ] ; then rm -fr /location/to/backup/incr/$DAY fi
rsync -a --delete --quiet --inplace --backup --backup-dir=/location/to/backup/incr/$DAY /folder/to/backup/ /location/to/backup/full/
--inplace : implica la actualización --partial de los archivos de destino en el lugar
La misma idea se puede utilizar para mantener un árbol de instantáneas de sus archivos. En otras palabras, un directorio con copias de los archivos ordenadas por fecha. Las copias se realizan mediante enlaces, lo que significa que solo los archivos que cambiaron ocuparán espacio. En términos generales, esta es la idea detrás de TimeMachine de Apple.
Este script básico es fácil de implementar y crea instantáneas incrementales rápidas utilizando la opción --link-dest para enlazar archivos sin cambios:
/usr/local/bin/snapbackup.sh
#!/bin/bash
# Script básico de copia de seguridad con rsync de estilo de instantáneas # Config OPT="-aPh" LINK="--link-dest=/snapshots/username/last/" SRC="/home/username/files/" SNAP="/snapshots/username/" LAST="/snapshots/username/last" date=`date "+%Y-%b-%d:_%T"`
# Ejecutar rsync para crear una instantánea rsync $OPT $LINK $SRC ${SNAP}$date
# Eliminar la instantánea anterior del enlace simbólico rm -f $LAST
# Crear un nuevo enlace simbólico a la última instantánea ln -s ${SNAP}$date $LAST
Debe existir un enlace simbólico a una copia de seguridad completa como destino para --link-dest. Si se elimina la instantánea más reciente, será necesario volver a crear el enlace simbólico para que apunte a la instantánea más reciente. Si --link-dest no encuentra un enlace simbólico que funcione, rsync procederá a copiar todos los archivos de origen en lugar de solo los cambios.
Una versión más sofisticada mantiene una copia de seguridad completa actualizada $SNAP/latest y, en caso de que un cierto número de archivos haya cambiado desde la última copia de seguridad completa, crea una instantánea $SNAP/$DATETAG de la copia de seguridad completa actual utilizando cp -al para vincular archivos sin cambios:
/usr/local/bin/rsnapshot.sh #!/bin/bash
## mi propio procedimiento de copia de seguridad ## estilo instantánea basado en rsync ## (cc) marcio rps AT gmail.com
# config vars
SRC="/home/username/files/" #no olvidar la barra diagonal final SNAP="/snapshots/username" OPTS="-rltgoi --delay-updates --delete --chmod=a-w" MINCHANGES=20
# ejecutar este proceso con prioridad baja
ionice -c 3 -p $$ renice +12 -p $$
# sincronizar
rsync $OPTS $SRC $SNAP/latest >> $SNAP/rsync.log
# compruebar si ha cambiado lo suficiente y si es así # hacer una copia enlazada denominada por fecha
COUNT=$( wc -l $SNAP/rsync.log|cut -d" " -f1 ) if [ $COUNT -gt $MINCHANGES ] ; then DATETAG=$(date +%Y-%m-%d) if [ ! -e $SNAP/$DATETAG ] ; then cp -al $SNAP/latest $SNAP/$DATETAG chmod u+w $SNAP/$DATETAG mv $SNAP/rsync.log $SNAP/$DATETAG chmod u-w $SNAP/$DATETAG fi fi
Esta sección trata sobre el uso de rsync para transferir una copia de todo el árbol /, excluyendo algunas carpetas seleccionadas. Se considera que este enfoque es mejor que clonar un disco con dd dado que ello utilizar un tamaño diferente, una tabla de partición y un sistema de archivos, y mejor que copiar con cp -a también, porque permite un mayor control sobre los permisos de archivos, atributos, Access Control Lists y extended attributes.
rsync funcionará incluso mientras el sistema se está ejecutando, pero los archivos modificados durante la transferencia pueden o no transferirse, lo que puede causar un comportamiento inesperado de algunos programas que usan los archivos transferidos.
Este enfoque funciona bien para migrar una instalación existente a un nuevo disco duro o SSD.
La siguiente orden debe ejecutarse como root para asegurarse de que rsync pueda acceder a todos los archivos del sistema y preservar su propiedad:
# rsync -aAXv --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} / /path/to/backup/folder
Al utilizar el conjunto de opciones -aAX, los archivos se transfieren en modo de comprimido, lo que garantiza que los enlaces simbólicos, los dispositivos, los permisos, las propiedades, los tiempos de modificación, los ACL y los atributos extendidos se conserven, suponiendo que el file system|sistema de archivos de destino dé soporte a esta función.
La opción --exclude hace que se excluyan los archivos que coinciden con los patrones dados. Se excluye el contenido de /dev, /proc, /sys, /tmp y /run en la orden anterior, porque se rellenan en el arranque, aunque las carpetas no se crean por sí mismas. /lost+found es específico del sistema de archivos. La orden anterior depende de la expansión de llaves disponible tanto en las shells bash como zsh. Cuando se utiliza un shell diferente, los patrones --exclude deben repetirse manualmente. Citar los patrones de exclusión evitará la expansión por la shell, lo cual es necesario, por ejemplo, cuando se realiza una copia de seguridad mediante SSH. Al terminar las rutas excluidas con * se garantiza que dichos directorios se creen si aún no existen.
Es posible que desee incluir opciones rsync adicionales, como las siguientes.
Para restaurar una copia de seguridad, debe usarse la misma orden de rsync que se ejecutó, pero con el origen y el destino invertidos.
rsync proporciona una forma de hacer una copia de todos los datos en un sistema de archivos al tiempo que conserva la mayor cantidad de información posible, incluidos los metadatos del sistema de archivos. Es un procedimiento de clonación de datos en un nivel de sistema de archivos donde los sistemas de archivos de origen y de destino no necesitan ser del mismo tipo. Se puede utilizar para realizar copias de seguridad, migrar sistemas de archivos o recuperar datos.
El modo archive de rsync está cerca de ser apto para el trabajo, pero no realiza una copia de seguridad de los metadatos especiales del sistema de archivos, como listas de control de acceso, atributos extendidos o propiedades de archivos dispersos. Para una clonación exitosa a nivel del sistema de archivos, se deben proporcionar algunas opciones adicionales:
rsync -qaHAXS DIRECTORIO_ORIGEN DIRECTORIO_DESTINO
Y su significado es (de la página de manual):
-H, --hard-links preserva los enlaces duros -A, --acls preserva las ACL (implica -p) -X, --xattrs preserva los atributos extendidos -S, --sparse manejar archivos dispersos de manera eficiente
Se usa -x si existen otros sistemas de archivos montados bajo el árbol que desea excluir de la copia. La copia producida se puede volver a leer y verificar (por ejemplo, después de un intento de recuperación de datos) a nivel del sistema de archivos con la opción recursiva de diff:[5]
diff -r DIRECTORIO_ORIGEN DIRECTORIO_DESTINO
rsync se puede ejecutar como demonio en un servidor que escucha el puerto 873.
Utilización del cliente, por ejemplo listar el contenido del servidor:
$ rsync rsync://server/share
Transferir archivo del cliente al servidor:
$ rsync local-file rsync://server/share/
Todos los datos transferidos, incluida la autenticación del usuario, no están cifrados.[5]
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.