Permiso robocopy denegado

11

Robocopy está preinstalado con Windows 7. Lo he usado muchas veces en el pasado. Traté de copiar una carpeta a un recurso compartido remoto con

robocopy c:\source "\\server\share\path" /s /r:2 /w:2` 

Como resultado, obtengo el permiso denegado. Usando el explorador puedo copiar archivos a este recurso compartido. Abrí un símbolo del sistema con permisos de administrador con el mismo resultado. El recurso compartido es de lectura / escritura para público.

EDITAR He asignado correctamente un driveletter al recurso compartido, pero la robocopy todavía falla

EDITAR He agregado el modificador / B sin éxito. El error exacto es:

2009/09/26 20:43:14 ERROR 5 (0x00000005) 
    Accessing Destination Directory \\drobo\Drobo\fotos\__NEW\Ericsson\
Edosoft
fuente
¿Has intentado asignar la carpeta compartida a una letra de unidad?
CGA
Sí, lo intenté primero. Mismo resultado
Edosoft el
¿Has intentado tomar posesión de la carpeta compartida? ¿Estás en un grupo de trabajo o en un dominio de Active Directory?
CGA
Estoy usando un grupo de trabajo. Me hice cargo.
Edosoft
Si usa el parámetro / V, ¿el modo Verbose le proporciona otra información? El error 5 suele ser un mensaje de acceso denegado. Desde el símbolo del sistema, ¿puede usar el comando COPIAR? ¿Funciona esto con otros UNC o es el Drobo el único que falla? Si es así, la gente Drobo puede ser el mejor lugar para buscar respuestas.
Jeffery Hicks

Respuestas:

12

Citado desde aquí :

En mi caso, comencé con el control total de los recursos compartidos de origen y destino. El problema era que Robocopy estaba restableciendo la ACL en el recurso compartido de destino a un valor nulo (nadie tiene permiso) antes de que comenzara a recurrir subdirectorios. Después de algunas pruebas rápidas, mi conclusión es que Robocopy no maneja los permisos heredados. Supongamos que está copiando C: \ Share1 en D: \, y C: \ Share1 está heredando sus permisos del directorio raíz C: \, en realidad no tiene ACL explícita. Por lo tanto, cuando copia su ACL, en realidad está copiando ... nada. Al copiar una ACL vacía en su destino, sus permisos se eliminan en el primer paso de la copia, y todas las escrituras posteriores en el recurso compartido fallan con el Error 5.

Esto es solo un problema cuando está copiando desde una fuente a la que está accediendo CON permisos heredados y un destino al que está accediendo SIN permisos heredados. Si copia C: \ (que lo tiene explícitamente en su ACL), a D: \, no hay problema. Si este es realmente su problema, puede resolverlo agregándose explícitamente a la ACL de origen con control total. Cuando se ejecuta la copia, su entrada de ACL se duplica en el destino y se pueden escribir las copias de archivo posteriores. Puede deshacer sus cambios (tanto en el origen como en el destino) después de que se complete la copia.

Si continúa teniendo problemas a pesar de lo anterior, es posible que desee considerar probar el modificador / B, que intenta hacer una copia de seguridad del archivo utilizando sus privilegios como Operador de copia de seguridad. Esto le permitirá copiar archivos que de otro modo no podría, por ejemplo, si no está en la ACL en su recurso compartido de destino. Robocopy por defecto trata de intentar una copia reiniciable. Al renunciar a copias reiniciables, el peor de los casos es que pierda el archivo que se transfiere actualmente en caso de una interrupción. La próxima pasada reiniciará ese archivo desde el principio en lugar de hacerlo a la mitad.

Espero que ayude. Aquí hay una cita del documento Robocopy de Microsoft con respecto al modificador / B:

Citar:

Si copia la información de seguridad NTFS (ACL) junto con los datos del archivo, es posible copiar archivos a los que tiene acceso de lectura, pero no acceso de escritura. Después de que dicho archivo se copia una vez y se aplican las ACL, es posible que obtenga un error de "Acceso denegado" cuando intente copiar el archivo nuevamente. En esta situación, debe usar el modificador / B o / ZB para copiar los archivos en modo de copia de seguridad.

/ B copia todos los archivos con semántica de respaldo (Modo de respaldo). / ZB primero intenta copiar archivos en modo reiniciable (para una mayor resistencia) pero si eso falla con un error de "Acceso denegado", reintenta automáticamente la copia usando el Modo de copia de seguridad.

harrymc
fuente
5

Intenta copiar archivos usando la Backupbandera:

/ B: copia archivos en modo de copia de seguridad.

Andreas Grech
fuente
Gracias, lo intentaré.
Edosoft el
¿Cuál es la diferencia con el comando / ZB?
Ingeniero de Sistemas Senior
2

Además de las respuestas anteriores, puedo ampliar la solución que me funcionó. En mi caso, tenía carpetas y archivos locales donde la propiedad fue reclamada por otro usuario en el sistema. Simplemente reclamé la propiedad de todas las carpetas y subcarpetas y todo funcionó bien sin el interruptor de copia de seguridad.

Reclame la propiedad de una carpeta y sus subcarpetas: http://technet.microsoft.com/en-us/magazine/ff404240.aspx

Marcus
fuente
Entonces, en este caso, la cuenta de usuario del script por lotes debe reclamar la propiedad de la carpeta.
Ingeniero de Sistemas Senior
1

También puedes escribir un script para arreglar esto automáticamente

# To run robocopy with logging which logs errors
robocopy source dest /MIR /NP /TEE /R:0 /W:1 /FFT /LOG+:log.txt 

# get errors from log and use set-content so it only writes if there are errors.
get-content log.txt | select-string "0x00000005" | set-content errors.log

#if statements to check if it even had errors.  only if errors go into if statement.
if (test-path errors.log) {

    #now capture the paths exactly.  Get-unique so it writes one error only once. 
    #Will assume you're using UNCs to copy vs. drive letters, please modify as necessary
    select-string -path errors.log -pattern "\\\\.*$" | %{ $_.Matches[0].captures[0].value} | get-unique > paths.log

    #just do foreach loop for each path.
    foreach ($path in $paths) { 

        #use subinacl to take ownership and assign permissions, it is better and faster 
        #than icacls and ps ways but you can use whatever works.  Report the changes you 
        #made.  if '$path' is a folder then you will need to modify subinacl command to 
        #inherit etc.  look it up.
        .\subinacl /file "$path" /setowner="YOUR ID" >> change-perms.log
        .\subinacl "$path" /grant="your ID"=F >> change-perms.log

    }

    #run your robocopy command again to copy missed file in previous step. 
    robocopy source dest /MIR /NP /TEE /R:0 /W:1 /FFT /LOG+:log.txt 

    #Delete the error log file so it does not go in to if loop next time you run.
    remove-item error.log (use force, erroraction etc as necessary)

}
N.Naik
fuente
Vale la pena señalar que este script es para usar con Windows Powershell.
Kevin Fegan