Robocopy

De Wikipedia, la enciclopedia libre

robocopy, o "Robust File Copy" (Copia de Ficheros Consistente), es un comando de replicación de directorios, disponible desde la Línea de Comandos. Formaba parte del Kit de Recursos de Windows, y se presentó como una característica estándar de Windows Vista y Windows Server 2008.

Características[editar]

Robocopy destaca por superar en funcionalidades a los comandos incluidos en Windows (COPY y xcopy) y además:

  • Puede tolerar cortes de red y continuar la copia por donde la había dejado (los ficheros incompletos se marcan con la fecha 01/01/1980 y contienen un registro de recuperación para que Robocopy sepa por dónde continuar).
  • Puede copiar correctamente atributos, información del propietario, flujos alternos de datos (ADS), información de auditoría y fechas por defecto, sin la necesidad de utilizar los engorrosos parámetros de los comandos.
  • Puede copiar la ACL de NTFS, (si se añade el parámetro /COPYALL /SEC), y hacer valer el "derecho de copia de seguridad" de Windows NT (/B) para que un administrador pueda copiar un directorio completo, incluyendo aquellos ficheros cuya lectura está denegada al administrador.
  • Persistencia por omisión, con un número programable de reintentos automáticos si no se puede acceder a un archivo.
  • Dispone de un modo "espejo", que mantiene la arborescencia sincronizada borrando archivos del destino, opcionalmente, si ya no están en el origen.
  • Puede copiar grandes cantidades de ficheros que harían que con la utilidad XCOPY no se consiguiera.
  • Tiene un indicador de progreso que la línea de comandos que se actualiza continuamente.
  • Puede copiar archivos y carpetas con nombres largos que superen los 256 caracteres —hasta un máximo teórico de 32 000— sin errores.[1]
  • Soporta copiado multihilo (solo en Windows 7).[2]

En particular, Robocopy no puede copiar archivos abiertos en uso por otros usuarios o aplicaciones. El presunto "modo respaldo" es un privilegio administrativo que permite a Robocopy invalidar configuraciones de permisos (en concreto, los de la ACL de NTFS) para la misión de realizar copias de seguridad. El subsistema de Windows Volume Shadow Copy es el único que puede copiar archivos abiertos mientras están en uso. Robocopy no implementa el acceso a este servicio, reduciendo su utilidad como utilidad de copia de seguridad de volúmenes en uso. Sin embargo, se pueden utilizar las utilidades VSHADOW o DISKSHADOW (incluidas en Windows Server 2008) para crear instantáneas de un volumen que se podrá respaldar usando Robocopy.

Por otra parte, por su diseño, la versión original de Robocopy no es capaz de replicar atributos de seguridad de archivos cuyos permisos hayan cambiado después de la replicación inicial.[3]​ Este comportamiento se corrigió en las versiones de Robocopy para Windows 2008 y Vista. Esto conlleva que Robocopy no se comporte igual entre distintas plataformas.[4]

La interfaz[editar]

Aunque Robocopy en sí es una herramienta de la línea de comandos, Microsoft Technet también ha suministrado una interfaz, que requiere .net Framework 2.0. Ha sido desarrollada por Derk Benisch, ingeniero de sistemas junto a grupo MSN de Microsoft.[5]​ Esta interfaz incluye la versión XP026 de Robocopy (para Vista).

Ejemplos de uso[editar]

Copiar el contenido de un directorio recursivamente, de c:\foo a c:\bar

 robocopy C:\foo C:\bar /E

Copiar el contenido de un directorio recursivamente (/E), y copiar toda la información de los ficheros (/COPYALL, que equivale a /COPY:DATSOU, D=Datos, A=Atributos, T=Fecha, S=Seguridad=ACL de NTFS, O=Información del propietario, U=Información de auditoría), sin reintentos sobre archivos bloqueados (/R:0). Nótese que las fechas de los directorios no se restablecerán si se usa una versión más antigua que la XP026:

 robocopy C:\foo C:\bar /COPYALL /E /R:0

Duplicar foo a bar, borrando cualquier fichero en bar que no esté en foo (/MIR), copiar archivos en modo reiniciable (/Z) en caso de que se pierda la conexión de red

 robocopy C:\foo \\backupserver\bar /MIR /Z

Copia carpetas, no archivos[editar]

La sintaxis de Robocopy es claramente distinta de la que usan los comandos de copia normales, por el hecho de que solo acepta nombres de carpetas, no archivos, tanto en el origen como en el destino. No se aceptan ni como origen ni como destino nombres de ficheros y comodines (como "*.*"). Los ficheros se pueden seleccionar o excluir usando argumentos de filtrado, que solo podrán referirse a nombres de fichero relativos a las carpetas ya seleccionadas, pues no se aceptan rutas completas.

Por ejemplo, para copiar el archivo foo.txt del directorio c:\bar a c:\baz, se usaría la siguiente expresión

 robocopy c:\bar c:\baz foo.txt

Lista parcial de parámetros de línea de comandos[editar]

La lista a continuación refleja las opciones de línea de comandos más comunes para Robocopy[6]

Opciones comunes[editar]

/MIR
Activa el modo espejo, borrando cualquier fichero en destino que ya no esté en origen (equivale a /E y /PURGE).
/Z
Copia archivos en modo reiniciable. "Reiniciable" hace mención a que Robocopy escribirá un registro de recuperación en el fichero incompleto en caso de que la operación se vea interrumpida o abortada, para que una futura ejecución de Robocopy pueda continuar por donde ésta lo dejó, en lugar de comenzar otra vez desde el principio. Esto es útil para copias fiables de ficheros grandes o cantidades sobre redes inestables tales como [Red privada virtual|VPN] o Internet. Un fichero incompleto tiene el mismo tamaño que el fichero completo, y se le anota una fecha en un período de 24 horas a partir del 01/01/1980 a las 0:00.
/COPYALL
Comprueba que se ha copiado la seguridad NTFS. Equivale a /COPY:DATSOU, donde D=Datos, A=Atributos, T=Fecha, S=Seguridad=ACL de NTFS, O=Información del propietario, U=Información de auditoría.
/B
Abre el fichero en modo backup (copia de seguridad). Permite abrir los ficheros sin restricciones de seguridad, pero requiere derechos adicionales en origen y destino.
/ZB
Usar modo reiniciable; si se deniega el acceso, usar modo backup.

Opciones especializadas[editar]

/S
Copia subdirectorios si no están vacíos (como XCOPY).
/E
Copia subdirectorios, aunque estén vacíos (como XCOPY).
/M
Copia ficheros con el atributo Archivo (como XCOPY con la opción /M).
/MOV
Mueve los archivos, borrándolos del origen.
/MOVE
Borra ficheros Y carpetas (los borra del origen tras la copia).
/MON:n
Monitoriza y lanza la copia tras n cambios (y MOT minutos).
/MOT:n
Configura el intervalo mínimo de monitorización (n minutos) antes de lanzar otra copia.
/XA:atributos
Excluye ficheros con cualquier de los attributes dados. Ejemplo: /XA:H no copiará archivos con el atributo de oculto.
/XF nombre
Excluye ficheros indicados en nombre. Se aceptan comodines. Ejemplo: /XF *.bak no copiará ningún archivo con la extensión *.bak.
/XD nombre
Excluye directorios indicados en nombre en alguna parte de la ruta. Funciona con comodines (p. ej.: /XD BKUP* no copiará directorios que empiecen por "BKUP", sin importar en qué parte del árbol se encuentren).
/XC
Excluye ficheros con cambios.
/XN
Excluye ficheros nuevos.
/XO
Excluye ficheros más antiguos.
/XX
Excluye ficheros y directorios extra, que puede estar en destino, pero no en origen.
/XL
Excluye ficheros y directorios solitarios; Puede estar en origen, pero no en destino.
/IF
Incluir los siguientes archivos.
/IS
Incluye los mismos archivos.
/IT
Incluye ficheros retocados (p. ej.: si unos tienen atributos de archivos y otros de solo lectura).
/XJ
Excluir enlaces simbólicos. Cuando se copian cuentas de usuario a otra ubicación en Windows Vista, es importante excluir los enlaces simbólicos. El enlace en '\Usuarios\...\AppData\local' denominada 'Application Data' apunta a su enlace superior, creando un bucle que puede hacer caer a Robocopy. Y aún más, si un enlace apunta a un disco origen que se copia a otro disco destino usando /MIR (o /E y /PURGE) y se copia el enlace, éste apuntará al disco origen, que puede resultar en la modificación de los contenidos del disco origen.
/R:n
Le indica a Robocopy los 'n' reintentos antes de terminar con error (1 millón por omisión).
/IPG:n
Le indica a Robocopy la pausa en 'n' milisegundos entre paquetes en transferencia en redes. Útil para preservar ancho de banda en conexiones lentas.
/L
SimuLa la realización de la copia sin hacerla, para probar el resultado de una configuración desde la línea de comandos.
/W:n
Tiempo de espera entre reintentos (30 seconds por omisión).
/PURGE
Borra los archivos que no estén en origen.
/DST
Compensación por diferencias horarias.
/DCOPY:T
COPia Fechas de Directorios. ### Disponible en XP026 (WinXP) & XP027 y posterior (Vista).
/MAXAGE:n
Vida MÁXima de los ficheros - excluye ficheros más antiguos que n días/fecha.
/MINAGE:n
Vida MÍNima de los ficheros - excluye ficheros con menos de n días/fecha.
(Si n < 1900 entonces n = número días, si no n = fecha YYYYMMDD ).
/MT:n
Copia multihilos (multithreaded) (solo Windows 7 ). El valor de n alcanza de 1 a 128 (8 por omisión)
/FFT
Assume FAT File Times (2-second date/time granularity).

Opciones de registro[editar]

/NFL
No registrar nombres de ficheros.
/NDL
No registrar nombres de directorios.
/NS
No registrar tamaños de ficheros.
/NC
No registrar clases de ficheros.
/X
Indicar todos los archivos extra.
/V
Sacar información minuciosa, con los archivos excluidos.
/TS
Incluir las fechas de los archivos de origen.
/FP
Incluir trayectorias completas.
/NP
No mostrar % copiado.
/ETA
Mostrar hora estimada de llegada.
/LOG:fichero.txt
Reemplazar fichero.txt con el estado de la tarea.
/LOG+:fichero.txt
Añadir el estado de la tarea a fichero.txt.
/TEE
Salida a la ventana de consola, así como el archivo de registro.
/NJH
Sin cabecera de la tarea.
/NJS
Sin resumen de tareas.

(Ver lista completa en [1] aquí)

Problemas conocidos[editar]

Hasta XP026

  • La versión XP026 no devuelve los códigos ERRORLEVEL cuando existen directorios/ficheros extra.
  • La nueva opción en Vista (XP027) /EFSRAW : Copiar archivos cifrados en modo EFS RAW; no está disponible para XP (XP026).
  • Robocopy no copiará las fechas de las carpetas de origen. En su lugar, usará la fecha actual al crear las nuevas. Si se desea que ambas copias sean iguales, se tiene que usar otra solución de copia de seguridad. Se ha tratado en la versión XP026 y la versión de Vista (parámetro /DCOPY:T)
  • No copia de manera fiable nombres cortos de ficheros.
  • La copia de ficheros en modo reiniciable es mucho más lenta (alrededor de 6 veces más en red) que en modo normal o de respaldo por la necesaria sobrecarga de administración.
  • Aunque la versión XP026 ya puede copiar archivos comprimidos ocurre una gran fragmentación.
  • El modo Backup no puede invalidar la denegación explícita de permisos ACL de NTFS si el que copia no es un objeto del propietario. (Mensaje de error: ERROR 5 (0x00000005) Copiando seguridad NTFS al directorio de destino. Acceso denegado.) Se puede superar este error con solo copiar los datos con esta configuración de opciones /COPY:DTen lugar de la opción /COPYALL
  • Robocopy no preserva los enlaces duros.
  • Robocopy no puede copiar a través de enlaces FTP.

Códigos de retorno ErrorLevel[editar]

El código de retorno de Robocopy es un mapa de bits, como se puede observar en:[7]

  • 0×16 Error grave. Robocopy no copió ningún fichero. Se debe a un error de utilización o derechos de acceso insuficientes en origen o destino.
  • 0×08 Algunos archivos o carpetas no se han copiado (Hubo errores de lectura y se rebasó el límite de reintentos). Comprobar estos errores más adelante.
  • 0×04 Se han detectado algunas discrepancias en los nombres de archivos y ficheros. Examinar el registro de salida. Probablemente hará falta administración.
  • 0×02 Se han detectado archivos / directorios extra. Examinar el registro de salida. Hará falta administración.
  • 0×01 Se han copiado uno o más ficheros con éxito (o sea, han llegado nuevos ficheros).
  • 0×00 Ningún error, no se ha copiado nada. Origen y destino están completamente sincronizados.

Se puede usar estos códigos para su utilización en fichero por lotes, de la siguiente manera:

if errorlevel 16 echo ***ERROR FATAL*** & goto :eof
if errorlevel 8 echo **COPIAS FALLIDAS** & goto :eof
if errorlevel 4 echo *DISCREPANCIAS* & goto :eof
if errorlevel 2 echo FICHEROS EXTRA & goto :eof
if errorlevel 1 echo Copia correcta & goto :eof
if errorlevel 0 echo –sin cambios– & goto :eof

De forma alternativa, también se pueden usar para dar información más detallada:

if errorlevel 16 echo ***ERROR FATAL*** & goto :eof
if errorlevel 15 echo FAIL MISM XTRA COPY & goto :eof
if errorlevel 14 echo FAIL MISM XTRA & goto :eof
if errorlevel 13 echo FAIL MISM COPY & goto :eof
if errorlevel 12 echo FAIL MISM & goto :eof
if errorlevel 11 echo FAIL XTRA COPY & goto :eof
if errorlevel 10 echo FAIL XTRA & goto :eof
if errorlevel 9 echo FAIL COPY & goto :eof
if errorlevel 8 echo FAIL & goto :eof
if errorlevel 7 echo MISM XTRA COPY & goto :eof
if errorlevel 6 echo MISM XTRA & goto :eof
if errorlevel 5 echo MISM COPY & goto :eof
if errorlevel 4 echo MISM & goto :eof
if errorlevel 3 echo XTRA COPY & goto :eof
if errorlevel 2 echo XTRA & goto :eof
if errorlevel 1 echo COPY & goto :eof
if errorlevel 0 echo –sin cambios– & goto :eof

Versiones[editar]

Nota: Varias versiones de Robocopy no muestran el número de versión al ejecutar 'Robocopy /?' en la línea de comandos.

Versión del producto Versión del archivo Año Origen Otro
1.70 - 1997 Windows NT Resource Kit
1.71 4.0.1.71 1997 Windows NT Resource Kit
1.95 4.0.1.95 1999 Windows 2000 Resource Kit
1.96 4.0.1.96 1999 Windows 2000 Resource Kit © 1995-1997
XP010 5.1.1.1010 2003 Windows 2003 Resource Kit
XP026 5.1.2600.26 2005 Downloaded with Robocopy GUI v.3.1.2
XP027 5.1.10.1027 2008 Bundled with Windows Vista, Server 2008, Windows 7 © 1995-2004
6.1 6.1.7601 2009 KB2639043 © 2009
6.2 6.2.9200 2012 Bundled with Windows 8 © 2012
6.3 6.3.9600 2013 Bundled with Windows 8.1 © 2013
10.0 10.0.10240 2015 Bundled with Windows 10 © 2015

Véase también[editar]

Referencias (en inglés)[editar]

  1. http://windowsitpro.com/Windows/Articles/ArticleID/44324/pg/2/2.html Archivado el 5 de noviembre de 2005 en Wayback Machine. Robocopy XP010 FAQ Wield powerful new switch options.
  2. «Perform Multithreaded File Copies with Robocopy in Windows 7». 
  3. Microsoft's Robocopy compromise.
  4. Ugly bug in Robocopy - ignoring security on file level.
  5. Joshua Hoffman (noviembre de 2006). «Utility Spotlight Robocopy GUI» (html). TechNet Magazine (Microsoft Corporation and CMP Media, LLC). Consultado el 17 de julio de 2008. 
  6. Robocopy.exe, Microsoft Windows Server 2003 Resource Kit, help output when run with /? command line switch. Complete help with /??? command line switch.
  7. «Robocopy Errorlevel Return Codes». Archivado desde el original el 22 de diciembre de 2008. Consultado el 4 de julio de 2009. 

Enlaces externos[editar]