Autorizzazione Robocopy negata


11

Robocopy è preinstallato con Windows 7. L'ho usato molte volte in passato. Ho provato a copiare una cartella in una condivisione remota con

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

Di conseguenza mi viene negata l'autorizzazione. Usando explorer posso copiare i file su questa condivisione. Ho aperto un prompt dei comandi con autorizzazioni di amministratore con lo stesso risultato. La condivisione è in lettura / scrittura per pubblico.

EDIT Ho mappato con successo un driveletter alla condivisione, ma robocopy non riesce ancora

EDIT Ho aggiunto l'opzione / B senza successo. L'errore esatto è:

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

Hai provato a mappare la cartella condivisa su una lettera di unità?
CGA

Sì, l'ho provato per primo. Stesso risultato
Edosoft,

Hai provato a diventare proprietario della cartella condivisa? Fai parte di un gruppo di lavoro o di un dominio di Active Directory?
CGA,

Sto usando un gruppo di lavoro. Ho preso la proprietà.
Edosoft,

Se si utilizza il parametro / V, la modalità dettagliata fornisce altre informazioni? L'errore 5 è in genere un messaggio di accesso negato. Da un prompt dei comandi è possibile utilizzare il comando COPIA? Funziona con altri UNC o Drobo è l'unico a fallire? In tal caso, le persone Drobo potrebbero essere il posto migliore in cui cercare risposte.
Jeffery Hicks,

Risposte:


12

Citato da qui :

Nel mio caso, ho iniziato con il pieno controllo sia delle condivisioni di origine che di destinazione. Il problema era che Robocopy stava ripristinando l'ACL sulla condivisione di destinazione su un valore null (nessuno ha l'autorizzazione) prima che iniziasse a ricorrere a sottodirectory. Dopo alcuni rapidi test, la mia conclusione è che Robocopy non gestisce le autorizzazioni ereditate. Supponiamo che tu stia copiando C: \ Share1 in D: \ e C: \ Share1 stia ereditando le sue autorizzazioni dalla directory C: \ root, in realtà non ha un ACL esplicito. Pertanto, quando copi il suo ACL, in realtà stai copiando ... niente. Copiando un ACL vuoto nella destinazione, le autorizzazioni vengono rimosse nel primo passaggio della copia e tutte le successive scritture nella condivisione falliscono con Errore 5.

Questo è solo un problema quando si esegue la copia da un'origine a cui si accede CON autorizzazioni ereditate e una destinazione a cui si accede SENZA autorizzazioni ereditate. Se copi C: \ (che ti ha esplicitamente nella sua ACL), in D: \, non ci sono problemi. Se questo è davvero il tuo problema, puoi risolverlo aggiungendoti esplicitamente all'ACL di origine con il pieno controllo. Quando la copia viene eseguita, la voce ACL viene duplicata nella destinazione e le successive copie dei file possono essere scritte. È possibile annullare le modifiche (sia sull'origine che sulla destinazione) al termine della copia.

Se continui ad avere problemi nonostante quanto sopra, potresti prendere in considerazione la possibilità di provare l'opzione / B, che tenta di eseguire il backup del file utilizzando i tuoi privilegi come Operatore di backup. Ciò ti consentirà di copiare file che altrimenti non potresti, ad esempio, se non ti trovi nella LCA della condivisione di destinazione. Per impostazione predefinita, Robocopy tenta di eseguire una copia riavviabile. Rinunciando alle copie riavviabili il caso peggiore è che si perde il file attualmente trasferito in caso di interruzione. Il passaggio successivo riavvierà quel file dall'inizio anziché a metà.

Spero possa aiutare. Ecco una citazione dal documento Robocopy di Microsoft riguardante l'opzione / B:

Citazione:

Se si copiano le informazioni di sicurezza (ACL) NTFS insieme ai dati dei file, è possibile copiare i file a cui si ha accesso in lettura, ma non l'accesso in scrittura. Dopo aver copiato una volta tale file e aver applicato gli ACL, è possibile che si verifichi un errore "Accesso negato" quando si tenta di copiare nuovamente il file. In questa situazione è necessario utilizzare l'opzione / B o / ZB per copiare i file in modalità di backup.

/ B copia tutti i file con semantica di backup (modalità di backup). / ZB tenta innanzitutto di copiare i file in modalità riavviabile (per una maggiore resilienza) ma se ciò fallisce con un errore "Accesso negato", riprova automaticamente la copia utilizzando la modalità di backup.



2

Oltre alle risposte precedenti, posso estenderlo con la correzione che ha funzionato per me. Nel mio caso avevo cartelle e file locali in cui la proprietà era rivendicata da un altro utente sul sistema. Ho semplicemente rivendicato la proprietà di tutte le cartelle e sottocartelle e tutto ha funzionato bene senza l'opzione di backup.

Rivendica la proprietà di una cartella e delle sue sottocartelle: http://technet.microsoft.com/en-us/magazine/ff404240.aspx


Quindi, in questo caso, la cartella deve essere rivendicata dalla proprietà dall'account utente dello script batch?
Senior Systems Engineer,

1

Puoi anche scrivere uno script per risolvere questo problema 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)

}

Vale la pena notare che questo script è per l'uso con Windows Powershell.
Kevin Fegan,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.