Robocopy 권한이 거부되었습니다.


11

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\

공유 폴더를 드라이브 문자에 매핑하려고 했습니까?
CGA

예, 먼저 시도했습니다. 같은 결과
Edosoft

공유 폴더의 소유권을 가져 보셨습니까? 작업 그룹 또는 Active Directory 도메인에 있습니까?
CGA

작업 그룹을 사용하고 있습니다. 나는 소유권을 가져 갔다.
Edosoft

/ V 매개 변수를 사용하는 경우 상세 모드가 다른 정보를 제공합니까? 오류 5는 일반적으로 액세스 거부 메시지입니다. 명령 프롬프트에서 COPY 명령을 사용할 수 있습니까? 이것은 다른 UNC와 함께 작동합니까 아니면 Drobo가 실패한 유일한 것입니까? 그렇다면 Drobo 사람들이 답변을 얻을 수있는 가장 좋은 장소 일 수 있습니다.
Jeffery Hicks

답변:


12

여기 에서 인용 :

필자의 경우 소스 및 대상 공유에 대한 모든 권한을 가지고 시작했습니다. 문제는 하위 디렉토리 재귀를 시작하기 전에 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는 먼저 다시 시작 가능한 모드로 파일을 복사하려고 시도하지만 (복원성 향상) "액세스 거부"오류와 함께 실패하면 백업 모드를 사용하여 복사를 자동으로 다시 시도합니다.



2

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

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


따라서이 경우 폴더는 배치 스크립트 사용자 계정?
선임 시스템 엔지니어

1

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

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

}

이 스크립트는 Windows Powershell에서 사용하기위한 것입니다.
Kevin Fegan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.