it-swarm-ko.com

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

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

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

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

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

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

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

여기 에서 인용 :

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

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

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

도움이 되었기를 바랍니다. 다음은/B 스위치에 대한 Microsoft Robocopy 문서의 인용문입니다.

인용문:

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

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

12
harrymc

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

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

5
Andreas Grech

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

폴더 및 하위 폴더에 대한 소유권 주장 : http://technet.Microsoft.com/en-us/magazine/ff404240.aspx

2
Marcus

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

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

}
1
N.Naik