rsync y enlaces simbólicos

66

Quiero hacer una copia de seguridad de mi directorio de inicio en un disco externo todas las noches usando un crontrabajo para ejecutar rsync. No estoy seguro del comportamiento exacto de rsynclas banderas de enlace simbólico.

  1. rsyncLa -abandera incluye la -lbandera (es decir, "copiar enlaces simbólicos como enlaces simbólicos"). ¿Esto solo significa que copiará el enlace o que seguirá el enlace y copiará todo en el directorio de enlace? Quiero evitar eso porque tengo enlaces a directorios llenos de archivos multimedia que implicarían copiar cientos de gigabytes de los que no necesito hacer una copia de seguridad.
  2. Temiendo (pero no seguro) que rsync -acopiaría todos esos archivos multimedia, agregué la --no-linksbandera. Esto no parece ser el comportamiento que quiero. Simplemente ignora la copia de cualquier enlace que sea problemático porque tengo enlaces que quiero copiar (por ejemplo, enlaces a archivos de encabezado comunes de diferentes directorios de proyectos).
  3. Suponiendo que el número 1 anterior (sin la --no-linksbandera) es lo que realmente quiero y solo copia el enlace sin copiar los archivos vinculados, ¿se romperán los enlaces cuando se realicen copias de seguridad? Por ejemplo puedo rsyncorigen de directorio /home/me/projects/misca /media/extdrive/backup/home/me/projects/misc. En este caso, supongo rsyncque no es lo suficientemente inteligente ni intenta corregir el contenido de los enlaces simbólicos para los cambios relativos del directorio. ¿Es esto correcto? Esto está bien, no importa si los enlaces están rotos en los directorios de copia de seguridad, siempre que se solucionen y funcionen si llega el momento en que deben restaurarse.
sean
fuente
3
La bandera -L es probablemente lo que quieres. Desde la página de manual de rsync en Centos Linux: "-L, --copy-links transforma el enlace simbólico en un archivo / directorio de referencia". Recomiendo probar esto con algunos directorios y enlaces de muestra para asegurarse de no sobrescribir ningún dato que no desee. Editado para incluir advertencia sobre posible pérdida de datos. ;)
Mick T

Respuestas:

86
  1. "Copiar enlaces simbólicos como enlaces simbólicos" significa exactamente lo que dice: si rsync ve un enlace simbólico en el directorio de origen, creará un enlace simbólico idéntico en el destino. Nada mas.

    (Unas pocas líneas en la página del manual, una opción diferente--copy-links , describe el comportamiento opuesto (siempre copiando los datos) que usted describió como indeseable).

    Consulte también la sección "Enlaces simbólicos":

    Si --linksse especifica, los enlaces simbólicos se recrean con el mismo objetivo en el destino.

  2. No es el comportamiento que desea porque está malinterpretando lo que --linkshace y, por lo tanto, pregunta por el comportamiento incorrecto (consulte la respuesta n. ° 1).

  3. Por defecto, copia el destino exactamente.

    Es decir, si el enlace apunta a una ruta absoluta (por ejemplo /home/me/projects), continuará apuntando a la misma ruta; no se romperá , simplemente continuará apuntando a un archivo en su directorio de inicio en lugar del que está en su copia de seguridad.

    Mientras tanto, si el enlace apunta a una ruta relativa (por ejemplo ../../projects), también continuará apuntando a la misma ruta, pero dado que es relativo a la ubicación del enlace simbólico, el enlace simbólico en su copia de seguridad también apuntará a un archivo en su copia de seguridad.

    Desafortunadamente, no parece haber ninguna opción para traducir enlaces simbólicos absolutos para su nueva base (solo una opción para romperlos por completo). Para evitar problemas, debe cambiar los enlaces simbólicos existentes a los relativos (lo cual es una buena idea en general, para enlaces dentro de $ HOME).

Gravedad
fuente
2
ummm entonces, ¿cuál es la diferencia entre --copy-linksy --links?
Alexander Mills
--copy-links= -L, y --links= -l. Vea la descripción de la documentación en mi respuesta aquí: superuser.com/a/1388910/425838
Gabriel Staples
9

@grawity tiene una gran respuesta, pero aquí hay una captura de pantalla de información relevante de la documentación. Aquí está la redacción exacta de las opciones -ly -L, por ejemplo, que parecen ser las más relevantes en cuestión:

ingrese la descripción de la imagen aquí

Fuente: https://linux.die.net/man/1/rsync , o man rsyncpáginas de manual en Linux.

Tenga en cuenta también que la opción -a( --archive) también incluye la -lopción dentro de ella, lo cual es increíble, ya que realmente me gusta usar la -lopción para preservar mis enlaces simbólicos de la fuente como enlaces simbólicos en el destino. De las páginas del manual:

-a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)

Tenga en cuenta que para mis rsynccomandos e instrucciones favoritas , incluida la copia, la duplicación, el progreso total ...

... haciendo ejecuciones en seco, registrando stderr y stdout en archivos (separados), mostrando estadísticas, usando un archivo de ruta de inclusión y un archivo de exclusión , etc., vea mi respuesta completa aquí en la segunda sección, titulada " 2. Línea de comandos rsync herramienta (Linux, Windows con Cygwin) ": https://superuser.com/a/1464264/425838

Gabriel Staples
fuente