Permissão de robocópia negada

11

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, posso copiar arquivos para este 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 Eu mapeei com sucesso uma unidade de transmissão para o compartilhamento, mas a robocópia ainda falha

EDIÇÃO 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\
Edosoft
fonte
Você já tentou mapear a pasta compartilhada para uma letra de unidade?
CGA
Sim, eu tentei isso primeiro. Mesmo resultado
Edosoft 24/08/09
Você já tentou se apropriar da pasta compartilhada? Você está em um grupo de trabalho ou em um domínio do Active Directory?
CGA
Estou usando um grupo de trabalho. Eu assumi a propriedade.
edosoft
Se você usar o parâmetro / V, o modo verboso fornece outras informações? O erro 5 é geralmente uma mensagem de acesso negado. Em um prompt de comando, você pode usar o comando COPY? Isso funciona com outras UNCs ou o Drobo é o único que falha? Nesse caso, o povo Drobo pode ser o melhor lugar para procurar respostas.
Jeffery Hicks

Respostas:

12

Citado 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 subdiretórios recorrentes. 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 ao copiar de uma fonte que você está acessando COM permissões herdadas e de 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 obter 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.

harrymc
fonte
5

Tente copiar arquivos usando o Backupsinalizador:

/ B: copia arquivos no modo de backup.

Andreas Grech
fonte
Thx, eu vou tentar isso.
edosoft
Qual é a diferença com o comando / ZB?
Sistemas de engenheiro sênior de
2

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

Marcus
fonte
Portanto, nesse caso, a pasta deve receber a propriedade da conta de usuário do script em lote?
Sistemas de engenheiro sênior de
1

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)

}
N.Naik
fonte
Vale ressaltar que esse script é para ser usado com o Windows Powershell.
precisa saber é o seguinte