Robocopy 권한이 거부되었습니다. “\\server\share\path” /s /r:2

Robocopy는 Windows 7에 사전 설치되어 있습니다. 과거에는 여러 번 사용했습니다. 폴더를 원격 공유에 복사하려고했습니다.

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

결과적으로 권한이 거부되었습니다. 탐색기를 사용하여 파일을이 공유에 복사 할 수 있습니다. 동일한 결과로 관리자 권한으로 명령 프롬프트를 열었습니다. 공유는 공개 읽기 / 쓰기입니다.

편집 드라이브 레터를 공유에 성공적으로 매핑했지만 robocopy는 여전히 실패합니다.

편집
나는 / B 스위치를 성공적으로 추가했습니다. 정확한 오류는 다음과 같습니다.

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


답변

여기 에서 인용 :

필자의 경우 소스 및 대상 공유에 대한 모든 권한을 가지고 시작했습니다. 문제는 하위 디렉토리 재귀를 시작하기 전에 Robocopy가 대상 공유의 ACL을 null 값으로 재설정하고 있다는 것입니다 (아무도 권한이 없음). 빠른 테스트 후 Robocopy는 상속 된 권한을 처리하지 않는다는 결론을 내 렸습니다. C : \ Share1을 D : \로 복사하고 C : \ Share1이 C : \ 루트 디렉토리에서 권한을 상속한다고 가정하면 실제로 명시적인 ACL이 없습니다. 따라서 ACL을 복사 할 때 실제로는 아무것도 복사하지 않습니다. 비어있는 ACL을 대상에 복사하면 복사본의 첫 번째 단계에서 권한이 제거되고 공유에 대한 모든 후속 쓰기는 오류 5와 함께 실패합니다.

WITH 상속 된 권한에 액세스하는 소스와 WITHOUT 상속 된 권한에 액세스하는 대상에서 복사하는 경우에만 문제가됩니다. ACL에 명시 적으로있는 C : \를 D : \에 복사하면 문제가 없습니다. 이것이 실제로 문제인 경우 모든 권한을 사용하여 소스 ACL에 명시 적으로 추가하여 해결할 수 있습니다. 사본이 실행되면 ACL 항목이 대상에 복제되고 후속 파일 사본을 쓸 수 있습니다. 복사가 완료된 후 변경 사항을 취소 할 수 있습니다 (소스 및 대상 모두에서).

위의 사항에도 불구하고 계속 문제가 발생하면 / B 스위치를 사용하여 백업 운영자 권한을 사용하여 파일을 백업하려고 시도 할 수 있습니다. 이렇게하면 예를 들어 대상 공유의 ACL에없는 경우 다른 방법으로는 할 수없는 파일을 복사 할 수 있습니다. Robocopy는 기본적으로 재시작 가능한 복사본을 시도합니다. 다시 시작할 수있는 사본을 포기하면 최악의 경우 중단시 현재 전송중인 파일이 손실됩니다. 다음 패스는 그 파일을 부분적으로 시작하는 대신 처음부터 다시 시작합니다.

희망이 도움이됩니다. 다음은 / B 스위치에 관한 Microsoft Robocopy 문서의 인용문입니다.

인용문:

파일 데이터와 함께 NTFS 보안 정보 (ACL)를 복사하면 읽기 권한은 있지만 쓰기 권한은없는 파일을 복사 할 수 있습니다. 이러한 파일을 한 번 복사하고 ACL을 적용한 후 파일을 다시 복사하려고하면 “액세스 거부”오류가 발생하는 것을 알 수 있습니다. 이 경우 백업 모드에서 파일을 복사하려면 / B 또는 / ZB 스위치를 사용해야합니다.

/ B는 모든 파일을 백업 의미 체계 (백업 모드)로 복사합니다. / ZB는 먼저 다시 시작 가능한 모드로 파일을 복사하려고 시도하지만 (복원성 향상) “액세스 거부”오류와 함께 실패하면 백업 모드를 사용하여 복사를 자동으로 다시 시도합니다.


답변

Backup플래그를 사용하여 파일을 복사하십시오 .

/ B : 백업 모드에서 파일을 복사합니다.


답변

이전 답변 외에도 저에게 효과적 인 수정으로 확장 할 수 있습니다. 제 경우에는 로컬 폴더가 있었고 파일은 시스템의 다른 사용자가 소유권을 주장했습니다. 나는 단순히 모든 폴더와 하위 폴더의 소유권을 주장했으며 백업 스위치없이 모든 것이 잘 작동했습니다.

폴더 및 해당 하위 폴더의 소유권 주장 : http://technet.microsoft.com/en-us/magazine/ff404240.aspx


답변

자동으로 수정하는 스크립트를 작성할 수도 있습니다

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

}