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 2009

共有フォルダの所有権を取得してみましたか?ワークグループまたはActive Directoryドメインにいますか?
CGA

ワークグループを使用しています。私は所有権を取得しました。
Edosoft 2009

/ Vパラメータを使用する場合、詳細モードでは他の情報が提供されますか?エラー5は通常、アクセス拒否メッセージです。コマンドプロンプトからCOPYコマンドを使用できますか?これは他のUNCでも機能しますか、それともDroboは失敗する唯一のものですか?もしそうなら、Droboの人々が答えを求めるのに最適な場所かもしれません。
Jeffery Hicks

回答:


12

ここから引用:

私の場合は、ソースと宛先の両方の共有を完全に制御することから始めました。問題は、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)をファイルデータと共にコピーすると、読み取りアクセス権はあるが書き込みアクセス権がないファイルをコピーすることができます。そのようなファイルが1回コピーされ、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.