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.