it-swarm-pt.tech

Permissão de robocópia negada

O Robocopy está pré-instalado no Windows 7. Eu o usei várias vezes no passado. Tentei copiar uma pasta para um compartilhamento remoto com

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

Como resultado, recebo permissão negada. Usando o Explorer, eu posso copiar arquivos para esse compartilhamento. Abri um prompt de comando com permissões de administrador com o mesmo resultado. O compartilhamento é de leitura/gravação para público.

EDIT Mapeei com êxito uma unidade de transmissão para o compartilhamento, mas a robocópia ainda falha

EDIT Adicionei a opção/B sem êxito. O erro exato é:

2009/09/26 20:43:14 ERROR 5 (0x00000005) 
    Accessing Destination Directory \\Drobo\Drobo\fotos\__NEW\Ericsson\
11
Edosoft

Citado em aqui :

No meu caso, comecei com controle total sobre os compartilhamentos de origem e destino. O problema era que o Robocopy estava redefinindo a ACL no compartilhamento de destino para um valor nulo (ninguém tem permissão) antes de começar a recorrer subdiretórios. Após alguns testes rápidos, minha conclusão é que o Robocopy não manipula permissões herdadas. Digamos que você esteja copiando C:\Share1 para D:\e C:\Share1 esteja herdando suas permissões do diretório raiz C: \; na verdade, ele não possui ACL explícita. Portanto, quando você copia sua ACL, na verdade está copiando ... nada. Ao copiar uma ACL vazia para o seu destino, suas permissões são removidas na primeira etapa da cópia e todas as gravações subsequentes no compartilhamento falham com o Erro 5.

Isso é apenas um problema quando você está copiando de uma fonte que você está acessando COM permissões herdadas e um destino que você está acessando SEM permissões herdadas. Se você copiar C:\(que possui explicitamente em sua ACL) para D: \, não haverá problema. Se esse for realmente o seu problema, você poderá resolvê-lo adicionando-se explicitamente à ACL de origem com controle total. Quando a cópia é executada, sua entrada da ACL é duplicada para o destino e as cópias subsequentes do arquivo podem ser gravadas. Você pode desfazer suas alterações (na origem e no destino) após a conclusão da cópia.

Se você continuar tendo problemas, apesar do acima, considere tentar a opção/B, que tenta fazer backup do arquivo usando seus privilégios como um operador de backup. Isso permitirá que você copie arquivos que de outra forma não poderia, por exemplo, se você não estiver na ACL do seu compartilhamento de destino. O padrão de robocópia é tentar uma cópia reinicializável. Ao desistir de cópias reinicializáveis, o pior caso é que você perde o arquivo atualmente sendo transferido no caso de uma interrupção. A próxima passagem reiniciará esse arquivo desde o início, em vez de parcialmente.

Espero que ajude. Aqui está uma citação do documento Robocopy da Microsoft sobre a opção/B:

Citar:

Se você copiar informações de segurança NTFS (ACLs) junto com os dados do arquivo, será possível copiar os arquivos aos quais você tem acesso de leitura, mas não o acesso de gravação. Depois que esse arquivo é copiado uma vez e as ACLs são aplicadas, você pode receber um erro de "Acesso negado" ao tentar copiar o arquivo novamente. Nessa situação, você deve usar a opção/B ou/ZB para copiar os arquivos no modo de backup.

/ B copia todos os arquivos com semântica de backup (modo de backup). O/ZB tenta primeiro copiar arquivos no modo reinicializável (para maior resiliência), mas se isso falhar com o erro "Acesso negado", ele tenta novamente a cópia automaticamente usando o Modo de backup.

12
harrymc

Tente copiar arquivos usando o sinalizador Backup:

/ B: copia arquivos no modo de backup.

5
Andreas Grech

Além das respostas anteriores, posso estender a correção que funcionou para mim. No meu caso, eu tinha pastas e arquivos locais em que a propriedade foi reivindicada por outro usuário no sistema. Eu simplesmente reivindiquei a propriedade de todas as pastas e subpastas e tudo funcionou bem sem a opção de backup.

Reivindique a propriedade de uma pasta e suas subpastas: http://technet.Microsoft.com/en-us/magazine/ff404240.aspx

2
Marcus

Você também pode escrever um script para corrigir isso automaticamente

# 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)

}
1
N.Naik