¿Cómo maneja Robocopy los enlaces del sistema de archivos (enlaces simbólicos, enlaces físicos y uniones)?

¿Cómo maneja Robocopy los enlaces del sistema de archivos (enlaces simbólicos, enlaces físicos y uniones)?

¿Es seguro eliminar una copia de seguridad de Robocopy? He leído que algunas personas eliminaron accidentalmente archivos fuera de la copia de seguridad porque contenían enlaces/uniones. ¿Puedo evitar esto?

Respuesta1

ElDocumentos de robocopiaenumera opciones que controlan el comportamiento de Robocopy con respecto a los enlaces del sistema de archivos:

/sl No siga enlaces simbólicos y en su lugar cree una copia del enlace.
/xj Excluye los puntos de unión, que normalmente se incluyen de forma predeterminada.
/xjd Excluye puntos de unión de directorios.
/xjf Excluye puntos de unión de archivos.

He creado un script por lotes para descubrir cómo funciona Robocopy con y sin estas opciones. Usamlink. Con mlink, puedes crear:

  • Enlaces simbólicos a archivos y directorios.
  • Enlaces físicos a archivos. Intentar crear un vínculo físico a un directorio genera un error.
  • Cruces, que son enlaces a directorios. Intentar crear una unión para un archivo tendrá éxito, pero la unión se romperá.

Los enlaces simbólicos pueden ser relativos o absolutos, dependiendo de cómo pase el parámetro de destino. Los enlaces duros y los cruces son siempre absolutos, incluso si pasas por un objetivo relativo.

@echo off
set home=C:\my-directory
cd %home%
mkdir robocopy-source
cd robocopy-source
mkdir a
mkdir b
copy NUL b\foo.txt
cd a
mklink /j junction-dir-absolute %home%\robocopy-source\b\
mklink /d symlink-dir-absolute %home%\robocopy-source\b\
mklink /d symlink-dir-relative ..\b\
mklink /h hardlink-file-absolute %home%\robocopy-source\b\foo.txt
mklink symlink-file-absolute %home%\robocopy-source\b\foo.txt
mklink symlink-file-relative ..\b\foo.txt
cd %home%
robocopy robocopy-source robocopy-target /mir /dcopy:dat
robocopy robocopy-source robocopy-target-sl /mir /dcopy:dat /sl
robocopy robocopy-source robocopy-target-xj /mir /dcopy:dat /xj
robocopy robocopy-source robocopy-target-xjd /mir /dcopy:dat /xjd
robocopy robocopy-source robocopy-target-xjf /mir /dcopy:dat /xjf

Utilizando elExtensión de enlace de shell, ahora podemos ver lo que ha sucedido:

Camino Información
robocopy-source\a\junction-dir-absoluto Enlaces a %home%\robocopy-source\b\
robocopy-source\a\symlink-dir-absoluto Enlaces a %home%\robocopy-source\b\
fuente-robocopy\a\symlink-dir-relative Enlaces a ..\b\
fuente-robocopy\a\hardlink-file-absolute Enlaces a %home%\robocopy-source\b\foo.txt (y a sí mismo)
robocopy-source\a\symlink-file-absolute Enlaces a C:\Users\Marco\Desktop\Linktest\robocopy-source\b\foo.txt
robocopy-source\a\symlink-file-relative Enlaces a ..\b\foo.txt
robocopy-target\a\junction-dir-absoluto Directorio con contenido copiado de %home%\robocopy-source\b\
robocopy-target\a\symlink-dir-absoluto Directorio con contenido copiado de %home%\robocopy-source\b\
robocopy-target\a\symlink-dir-relativo Directorio con contenido copiado de %home%\robocopy-source\b\
robocopy-target\a\hardlink-file-absoluto Archivo vacío
robocopy-target\a\symlink-file-absolute Archivo vacío
robocopy-target\a\symlink-file-relative Archivo vacío
robocopy-target-sl\a\junction-dir-absoluto Directorio con contenido copiado de %home%\robocopy-source\b\
robocopy-target-sl\a\symlink-dir-absoluto Enlaces a %home%\robocopy-source\b\
robocopy-target-sl\a\symlink-dir-relativo Enlace a ..\b\
robocopy-target-sl\a\hardlink-file-absoluto Archivo vacío
robocopy-target-sl\a\symlink-file-absoluto Enlaces a %home%\robocopy-source\b\foo.txt
robocopy-target-sl\a\symlink-file-relativo Enlaces a ..\b\foo.txt
robocopy-target-xj\a\junction-dir-absoluto No existe
robocopy-target-xj\a\symlink-dir-absoluto No existe
robocopy-target-xj\a\symlink-dir-relativo No existe
robocopy-target-xj\a\hardlink-file-absoluto Archivo vacío
robocopy-target-xj\a\symlink-file-absoluto No existe
robocopy-target-xj\a\symlink-file-relativo No existe
robocopy-target-xjd\a\junction-dir-absoluto No existe
robocopy-target-xjd\a\symlink-dir-absoluto No existe
robocopy-target-xjd\a\symlink-dir-relativo No existe
robocopy-target-xjd\a\hardlink-file-absoluto Archivo vacío
robocopy-target-xjd\a\symlink-file-absolute Archivo vacío
robocopy-target-xjd\a\symlink-file-relative Archivo vacío
robocopy-target-xjf\a\junction-dir-absoluto Directorio con contenido copiado de %home%\robocopy-source\b\
robocopy-target-xjf\a\symlink-dir-absoluto Directorio con contenido copiado de %home%\robocopy-source\b\
robocopy-target-xjf\a\symlink-dir-relativo Directorio con contenido copiado de %home%\robocopy-source\b\
robocopy-target-xjf\a\hardlink-file-absoluto Archivo vacío
robocopy-target-xjf\a\symlink-file-absoluto No existe
robocopy-target-xjf\a\symlink-file-relativo No existe

Llego a la conclusión de que, a menos que haya utilizado la /slopción, eliminar una copia de seguridad creada con Robocopy debería ser seguro. Sin embargo, si utilizó la /slopción, los enlaces simbólicos absolutos podrían causarle problemas, por ejemploal usar el delcomando.

Otras observaciones:

  • Un enlace físico siempre produce un archivo vacío.
  • La opción /xjdomite enlaces a directorios. Aparte de lo que implican los documentos, no solo omite los cruces, sino también los enlaces simbólicos.
  • La opción /xjfomite enlaces a archivos. Aparte de lo que implican los documentos, no omite uniones de archivos (que de todos modos no existen), ¡sino enlaces simbólicos!
  • La opción /xjcombina /xjdy /xjf.

He reportado elproblema con los documentos.

Información adicional sobre accesos directos (archivos .lnk)

Robocopy trata los accesos directos como archivos normales, por lo quevoluntadgeneralmente apunta fuera de su directorio de respaldo. Sin embargo, otros programas de línea de comandos también los tratan como archivos normales. He verificado esto del /s /qen rmdir /s /qel símbolo del sistema y rm -rfen el shell MINGW64, todos los cuales no seguirán los atajos y, por lo tanto, no darán lugar a eliminaciones no deseadas.

información relacionada