Consejos y trucos favoritos de rsync

57

Cuanto más uso, rsyncmás me doy cuenta de que es una navaja suiza de transferencia de archivos. Hay tantas opciones Hace poco descubrí que puedes ir --remove-source-filesy eliminará un archivo de la fuente cuando se haya copiado, lo que lo convierte en un movimiento más en lugar de copiar el programa. :)

¿Cuáles son tus pequeños consejos y trucos favoritos de rsync?

Rory
fuente

Respuestas:

19

¡Intente usar rsync versión 3 si tiene que sincronizar muchos archivos! V3 construye su lista de archivos de forma incremental y es mucho más rápido y usa menos memoria que la versión 2.

Dependiendo de su plataforma, esto puede hacer una gran diferencia. En OSX, la versión 2.6.3 llevaría más de una hora o se bloqueaba al intentar crear un índice de 5 millones de archivos, mientras que la versión 3.0.2 que compilé comenzó a copiar de inmediato.

robar
fuente
Una cosa a tener en cuenta es que si usa algunas opciones (como, --delete-beforepor ejemplo), se usa el antiguo comportamiento de "lista de compilación primero", ya que es necesario para que estas opciones funcionen correctamente, así que si no ve este comportamiento, verifique si Se sabe que otras opciones que está utilizando impiden que sea posible. Esto puede ser útil si está utilizando rsync de forma interactiva en un árbol grande y desea forzar el escaneo inicial para que la salida --progresssea ​​precisa (es decir, el recuento de "objetos para comparar" nunca aumentará ya que no se encontrarán nuevos objetos después del escaneo inicial )
David Spillett el
18

Utilizando --link-destpara crear copias de seguridad basadas en instantáneas de uso eficiente del espacio, por lo que parece tener múltiples copias completas de los datos respaldados (uno para cada ejecución de copia de seguridad) pero los archivos que no cambian entre ejecuciones están vinculados en lugar de crear nuevas copias ahorrando espacio.

(en realidad, sigo usando el método rysnc-seguido por-cp -al que logra lo mismo, consulte http://www.mikerubel.org/computers/rsync_snapshots/ para ver un descuido antiguo pero muy bueno de ambas técnicas y cuestiones relacionadas)

La principal desventaja de esta técnica es que si un archivo está dañado debido a un error de disco, es igual de corrupto en todas las instantáneas que se vinculan a ese archivo, pero también tengo copias de seguridad fuera de línea que lo protegerían en gran medida. La otra cosa a tener en cuenta es que su sistema de archivos tiene suficientes inodes o se quedará sin ellos antes de que realmente se quede sin espacio en disco (aunque nunca he tenido un problema con los valores predeterminados ext2 / 3).

Además, nunca olvides lo muy útil --dry-runpara un poco de paranoia saludable, especialmente cuando estás usando las --delete*opciones.

David Spillett
fuente
66
+1 para --dry-run
David Z
1
Tenga en cuenta que -n es el acceso directo para --dry-run
ctennis
3
Prefiero seguir con los nombres largos, especialmente en los scripts que otros pueden terminar manteniendo. Aclara lo que se pretende sin referencia a los documentos.
David Spillett el
+1 Implementé una solución de respaldo de muchos TB en muchas máquinas con el método --link-dest para instantáneas vinculadas como se describió anteriormente - funcionó perfectamente.
matja
Si te gustan las copias de seguridad --link-dest, echa un vistazo a Dirvish que usa rsync debajo del capó
hfs
14

Si necesita actualizar un sitio web con algunos archivos enormes a través de un enlace lento, puede transferir los archivos pequeños de esta manera:

rsync -a --max-size = 100K / var / www / there: / var / www /

luego haga esto para los archivos grandes:

rsync -a --min-size = 100K --bwlimit = 100 / var / www / there: / var / www /

rsync tiene muchas opciones útiles para sitios web. Desafortunadamente, no tiene una forma integrada de detectar actualizaciones simultáneas, por lo que debe agregar lógica a los scripts cron para evitar la superposición de escrituras de archivos grandes.

Mover
fuente
10

Uso la opción --existente cuando trato de mantener un pequeño subconjunto de archivos de un directorio sincronizado a otra ubicación.

TCampbell
fuente
¡Gracias! Esto me salvó de escribir algo desagradable sobre reglas de filtro.
benzado
8

--rsh es mio.

Lo he usado para cambiar el cifrado en ssh a algo más rápido ( --rsh="ssh -c arcfour") también para configurar una cadena de sshs (recomiendo usarlo con ssh-agent) para sincronizar archivos entre hosts que no pueden hablar directamente. ( rsync -av --rsh="ssh -TA userA@hostA ssh -TA -l userB" /tmp/foobar/ hostB:/tmp/foobar/)

Stephen Paul Lesniewski
fuente
7
--time-limit

Cuando se usa esta opción, rsync se detendrá después de T minutos y saldrá. Creo que esta opción es útil cuando se sincroniza una gran cantidad de datos durante la noche (horas no ocupadas) y luego se detiene cuando es hora de que las personas comiencen a usar la red, durante el día (horas ocupadas).

--stop-at=y-m-dTh:m

Esta opción le permite especificar a qué hora detener rsync.

Batch Mode

El modo de lote puede usarse para aplicar el mismo conjunto de actualizaciones a muchos sistemas idénticos.

jftuga
fuente
¡Útil! Había estado usando el comando "at" antes para matar el proceso
Lionel
Parches de origen: rsync.samba.org/ftp/rsync/rsync-patches-3.1.0.tar.gz ; Win32 binario con parche incluido: itefix.no/i2/cwrsync
jftuga
2
Desafortunadamente, estas opciones no están disponibles en rsync distribuido con las distribuciones Redhat / Centos o Ubuntu.
IanB
@Lionel: ¿Cómo estás usando atpara matar el proceso?
IMTheNachoMan
6

Si se pregunta qué tan avanzado ha llegado un rsync de ejecución lenta, y no usó -v para enumerar los archivos a medida que se transfieren, puede averiguar qué archivos tiene abiertos:

 ls -l /proc/$(pidof rsync)/fd/*

en un sistema que tiene / proc

Por ejemplo, rsync me colgó en este momento, a pesar de que el sistema remoto parecía tener mucho espacio libre. Este truco me ayudó a encontrar el archivo inesperadamente grande que no recordaba, que no cabía en el otro extremo.

También me dio información un poco más interesante: el otro extremo aparentemente se rindió, ya que también había un enlace de socket roto:

/proc/22954/fd/4: broken symbolic link to `socket:[2387837]'
nealmcb
fuente
5

--archive es una opción estándar (aunque no la predeterminada) para trabajos similares a copias de seguridad, lo que garantiza que la mayoría de los metadatos de los archivos de origen (permisos, propiedad, etc.) se copien.

Sin embargo, si no desea usar eso, a menudo aún querrá incluirlo --times, lo que copiará los tiempos de modificación de los archivos. Esto hace que el próximo rsync que se ejecuta (suponiendo que lo esté haciendo repetidamente) sea mucho más rápido, ya que rsync compara los tiempos de modificación y omite el archivo si no ha cambiado. Sorprendentemente (al menos para mí) esta opción no es la predeterminada.

Andrew Ferrier
fuente
4

Definitivamente, el --exclude-fromque más uso es el que le permite especificar un archivo que contiene cosas que se excluirán.

También me parece --chmodmuy útil porque te permite asegurarte de que los permisos terminen en un estado deseable incluso si tu fuente está en mal estado.

innaM
fuente
4

--backup-dir = date +%Y.%m.%d--delete Estamos borrando pero haciendo una copia ... por si acaso


fuente
4

El mío es --inplace. Funciona de maravilla cuando el servidor de copias de seguridad ejecuta ZFS o btrfs y realiza instantáneas nativas.

Hubert Kario
fuente
3

Por supuesto, también hay algo --deleteque elimina cosas del objetivo que no se pueden encontrar en la fuente.

innaM
fuente
2

cwrsync - Rsync para Windows http://www.itefix.no/i2/node/10650

Esta versión incluye OpenSSH para que pueda transferir archivos a través de un canal seguro.

jftuga
fuente
Yo uso cwrsync, y es genial. Me alegra que alguien haya traído esta increíble capacidad a Windows.
Andrew Ensley
2
--partial 

En caso de interrupciones

--bwlimit=100

Para limitar el ancho de banda: bueno para copiar archivos grandes, directorios

rebelbass
fuente
¿Cuál es la unidad de bwlimit? bits por segundo, bytes por segundo?
Timo Kähkönen
@Timo, bwlimit está en KBytes / segundo.
Andrew Ferrier
1

Si tiene rsync configurado como daemon en el servidor, puede explorar los módulos compartidos como cualquier otra lista de directorios. Luego puede ver qué rutas están disponibles y cuáles no.

sybreon
fuente
1

cuando uso GlusterFs tenemos un cuello de botella con archivos T con tamaño cero, para la sincronización entre el ladrillo bloqueado o la réplica que debemos usar --min-size=1para no sincronizar el archivo vacío del servidor bloqueado

vahid chakoshy
fuente