
Quiero hacer una copia de seguridad de mi directorio personal en una unidad externa todas las noches usando un cron
trabajo para ejecutar rsync
. No estoy seguro del comportamiento exacto de rsync
los indicadores de enlaces simbólicos.
rsync
La bandera de-a
incluye la-l
bandera (es decir, "copiar enlaces simbólicos como enlaces simbólicos"). ¿Esto sólo significa que serácopia 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.- Temiendo (pero no seguro) que
rsync -a
se copiaran todos esos archivos multimedia, agregué la--no-links
bandera. Este no parece ser el comportamiento que quiero. Simplemente ignora copiar cualquier enlace, lo cual es problemático porque tengo enlaces que quiero copiar (por ejemplo, enlaces a archivos de encabezado comunes de diferentes directorios de proyectos). - Suponiendo que el punto 1 anterior (sin la
--no-links
bandera) es lo que realmente quiero y simplemente copia el enlace sin copiar los archivos vinculados, ¿se romperán los enlaces cuando se haga una copia de seguridad de ellos? Por ejemplo, puedorsync
buscar el directorio/home/me/projects/misc
en/media/extdrive/backup/home/me/projects/misc
. En este caso, supongo quersync
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 respaldo, siempre y cuando estén reparados y funcionando si llega el momento en que sea necesario restaurarlos.
Respuesta1
"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 más abajo en la página del manual, undiferenteLa opción,
--copy-links
describe el comportamiento opuesto (siempre copiar los datos) que usted describió como indeseable).Véase también la sección "Enlaces simbólicos":
Si
--links
se especifica, los enlaces simbólicos se recrean con el mismo destino en el destino.No es el comportamiento que desea porque está malinterpretando lo
--links
que desea y, por lo tanto, solicita el comportamiento incorrecto (consulte la respuesta n.° 1).Por defecto copia el destinoexactamente.
Es decir, si el enlace apuntaba a una ruta absoluta (por ejemplo
/home/me/projects
), seguirá apuntando a la misma ruta; no lo hará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éncontinúe 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 por unos relativos (lo cual es una buena idea en general, para enlaces dentro de $HOME).
Respuesta2
@grawity tiene una excelente respuesta, pero aquí hay una captura de pantalla de información relevante dela documentación. Aquí está la redacción exacta de -l
(letra L minúscula, no uno) y -L
las opciones, por ejemplo, que parecen ser las más relevantes en cuestión:
Fuente:https://linux.die.net/man/1/rsync, o man rsync
páginas de manual en Linux.
Tenga en cuenta también que la opción -a
( --archive
) también incluye la -l
opción dentro de ella, lo cual es fantástico, ya que realmente me gusta usar la -l
opción para conservar mis enlaces simbólicos del origen como enlaces simbólicos en el destino. De las páginas del manual ( man rsync
):
-a, --archive archive mode; equals -rlptgoD (no -H,-A,-X)
Y aquí están los significados de -rlptgoD
, también de man rsync
:
--recursive, -r recurse into directories
--links, -l copy symlinks as symlinks
--perms, -p preserve permissions
--times, -t preserve modification times
--group, -g preserve group
--owner, -o preserve owner (super-user only)
-D same as --devices --specials
--devices preserve device files (super-user only)
--specials preserve special files ["such as named sockets and fifos"]
¡Importante!:
Si se usa rsync
enexFAToGORDOsistemas de archivos, sin embargo, lo hacennono admite enlaces simbólicos ni propietarios, grupos ni permisos POSIX, por lo queeliminar -lpgo
y utilizar -rtD
en lugar de -a
!También puede agregar -v
"detallado" si lo desea y usar-vrtD
.
Ver más aquí:
- [mi respuesta]Las mejores configuraciones para usar rsync con sistemas de archivos FAT y exFAT
- rsync parece sobrescribir un archivo ya existente en ExFat
- https://superuser.com/a/384849/425838
- https://learn.microsoft.com/en-us/windows/win32/fileio/filesystem-functionality-comparison
rsync
Tenga en cuenta que mis comandos e instrucciones favoritos , que incluyen copiar, reflejar, mostrar el progreso total...
...haciendo simulacros, registrando stderr y stdout en archivos (separados), mostrando estadísticas, usando unincluir archivo de rutay unexcluir archivo, etc., vea mi respuesta completa aquí en la segunda sección, titulada "2. Herramienta de línea de comandos rsync (Linux, Windows con Cygwin)":https://superuser.com/a/1464264/425838