%3F.png)
¿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 /sl
opción, eliminar una copia de seguridad creada con Robocopy debería ser seguro. Sin embargo, si utilizó la /sl
opción, los enlaces simbólicos absolutos podrían causarle problemas, por ejemploal usar el del
comando.
Otras observaciones:
- Un enlace físico siempre produce un archivo vacío.
- La opción
/xjd
omite 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
/xjf
omite 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
/xj
combina/xjd
y/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 /q
en rmdir /s /q
el símbolo del sistema y rm -rf
en el shell MINGW64, todos los cuales no seguirán los atajos y, por lo tanto, no darán lugar a eliminaciones no deseadas.