Robocopy-Erlaubnis verweigert

11

Robocopy ist mit Windows 7 vorinstalliert. Ich habe es in der Vergangenheit oft verwendet. Ich habe versucht, einen Ordner auf eine Remote-Freigabe mit zu kopieren

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

Infolgedessen wird mir die Erlaubnis verweigert. Mit dem Explorer kann ich Dateien auf diese Freigabe kopieren. Ich habe eine Eingabeaufforderung mit Administratorrechten mit demselben Ergebnis geöffnet. Die Freigabe wird für die Öffentlichkeit gelesen / geschrieben.

BEARBEITEN Ich habe der Freigabe erfolgreich einen Driveletter zugeordnet, aber die Robokopie schlägt immer noch fehl

BEARBEITEN Ich habe den Schalter / B ohne Erfolg hinzugefügt. Der genaue Fehler ist:

2009/09/26 20:43:14 ERROR 5 (0x00000005) 
    Accessing Destination Directory \\drobo\Drobo\fotos\__NEW\Ericsson\
Edosoft
quelle
Haben Sie versucht, den freigegebenen Ordner einem Laufwerksbuchstaben zuzuordnen?
CGA
Ja, das habe ich zuerst versucht. Gleiches Ergebnis
Edosoft
Haben Sie versucht, den freigegebenen Ordner zu übernehmen? Befinden Sie sich in einer Arbeitsgruppe oder einer Active Directory-Domäne?
CGA
Ich benutze eine Arbeitsgruppe. Ich habe das Eigentum übernommen.
Edosoft
Wenn Sie den Parameter / V verwenden, gibt Ihnen der Verbose-Modus weitere Informationen? Der Fehler 5 ist normalerweise eine Nachricht, die den Zugriff verweigert. Können Sie an einer Eingabeaufforderung den Befehl COPY verwenden? Funktioniert dies mit anderen UNCs oder ist der Drobo der einzige, der ausfällt? In diesem Fall sind die Drobo-Leute möglicherweise der beste Ort, um Antworten zu erhalten.
Jeffery Hicks

Antworten:

12

Zitiert von hier :

In meinem Fall begann ich mit der vollständigen Kontrolle über die Quell- und Zielfreigaben. Das Problem war, dass Robocopy die ACL auf der Zielfreigabe auf einen Nullwert zurücksetzte (niemand hat die Berechtigung), bevor mit der Rekursion von Unterverzeichnissen begonnen wurde. Nach einigen kurzen Tests bin ich zu dem Schluss gekommen, dass Robocopy keine geerbten Berechtigungen verarbeitet. Angenommen, Sie kopieren C: \ Share1 nach D: \ und C: \ Share1 erbt seine Berechtigungen vom Verzeichnis C: \ root. Es gibt tatsächlich keine explizite ACL. Wenn Sie also die ACL kopieren, kopieren Sie tatsächlich ... nichts. Durch Kopieren einer leeren ACL in Ihr Ziel werden Ihre Berechtigungen im ersten Schritt der Kopie entfernt, und alle nachfolgenden Schreibvorgänge auf die Freigabe schlagen mit Fehler 5 fehl.

Dies ist nur dann ein Problem, wenn Sie von einer Quelle kopieren, auf die Sie mit geerbten Berechtigungen zugreifen, und von einem Ziel, auf das Sie OHNE geerbte Berechtigungen zugreifen. Wenn Sie C: \ (das Sie explizit in seiner ACL hat) nach D: \ kopieren, gibt es kein Problem. Wenn dies tatsächlich Ihr Problem ist, können Sie es beheben, indem Sie sich explizit mit voller Kontrolle zur Quell-ACL hinzufügen. Wenn die Kopie ausgeführt wird, wird Ihr ACL-Eintrag zum Ziel dupliziert, und die nachfolgenden Dateikopien können geschrieben werden. Sie können Ihre Änderungen (sowohl an der Quelle als auch am Ziel) rückgängig machen, nachdem der Kopiervorgang abgeschlossen ist.

Wenn Sie trotz der oben genannten Probleme weiterhin Probleme haben, sollten Sie den Schalter / B ausprobieren, mit dem versucht wird, die Datei mit Ihren Berechtigungen als Sicherungsoperator zu sichern. Auf diese Weise können Sie Dateien kopieren, die Sie sonst nicht kopieren könnten, beispielsweise wenn Sie sich nicht in der ACL Ihrer Zielfreigabe befinden. Bei Robocopy wird standardmäßig versucht, eine neu startbare Kopie zu erstellen. Wenn Sie neu startbare Kopien aufgeben, verlieren Sie im schlimmsten Fall die aktuell übertragene Datei im Falle einer Störung. Der nächste Durchgang startet diese Datei von Anfang an neu, anstatt sie teilweise zu durchlaufen.

Ich hoffe, das hilft. Hier ist ein Zitat aus dem Robocopy-Dokument von Microsoft zum / B-Schalter:

Zitat:

Wenn Sie NTFS-Sicherheitsinformationen (ACLs) zusammen mit Dateidaten kopieren, können Sie Dateien kopieren, auf die Sie Lese-, aber keinen Schreibzugriff haben. Nachdem eine solche Datei einmal kopiert und die ACLs angewendet wurden, wird möglicherweise der Fehler "Zugriff verweigert" angezeigt, wenn Sie versuchen, die Datei erneut zu kopieren. In dieser Situation sollten Sie den Schalter / B oder / ZB verwenden, um die Dateien im Sicherungsmodus zu kopieren.

/ B kopiert alle Dateien mit Sicherungssemantik (Sicherungsmodus). / ZB versucht zunächst, Dateien im neu startbaren Modus zu kopieren (für eine höhere Ausfallsicherheit). Wenn dies jedoch mit dem Fehler "Zugriff verweigert" fehlschlägt, wird die Kopie automatisch im Sicherungsmodus wiederholt.

harrymc
quelle
5

Versuchen Sie, Dateien mit dem BackupFlag zu kopieren :

/ B: Dateien im Sicherungsmodus kopieren.

Andreas Grech
quelle
Thx, ich werde das versuchen.
Edosoft
Was ist anders mit dem Befehl / ZB?
Senior Systems Engineer
2

Zusätzlich zu früheren Antworten kann ich das für mich funktionierende Update erweitern. In meinem Fall hatte ich lokale Ordner und Dateien, deren Besitz von einem anderen Benutzer im System beansprucht wurde. Ich habe einfach den Besitz aller Ordner und Unterordner beansprucht und alles hat ohne den Backup-Schalter einwandfrei funktioniert.

Fordern Sie den Besitz eines Ordners und seiner Unterordner an: http://technet.microsoft.com/en-us/magazine/ff404240.aspx

Marcus
quelle
In diesem Fall muss der Ordner also vom Benutzerkonto des Batch-Skripts als Eigentümer beansprucht werden.
Senior Systems Engineer
1

Sie können auch ein Skript schreiben, um dies automatisch zu beheben

# 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
quelle
Es ist erwähnenswert, dass dieses Skript für die Verwendung mit Windows Powershell vorgesehen ist.
Kevin Fegan