【robocopy /B】で『アクセスが拒否されました』と表示される場合の対処

Windowsは管理者(admin)権限でもアクセス権が無ければアクセス拒否される

Windows は Linux とは異なり、administrator であってもアクセス権が付与されていないファイル/フォルダについてはアクセス拒否されます。

robocopy においても同様ですが、robocopy には /B オプションが用意されており、これを使うことでアクセス権無視でコピーが可能になります。

robocopy /B とは

robocopy で /B オプションを使うと『バックアップモード』と呼ばれるモードで実行します。このモードで動作させた場合、アクセス権を無視したファイルコピーが可能となります。

ただし条件があります。それは『SeBackupPrivilege』と呼ばれる権限を持つユーザで実行することです。この権限は Administrator の他、ビルトイングループの『BackupOperators』に与えられています。

なので robocopy をバックアップモードで動作させるためには、Administrator、もしくは BackupOperators グループに所属しているユーザでログインし、そのユーザ権限で実行する必要があります。

バックアップモードで『アクセスが拒否されました』と出るケースは?

バックアップモードで動作しても『アクセスが拒否されました』『0x00000005』『ERROR_ACCESS_DENIED』といったエラーが表示されることがあります。バックアップモードが正しく動作すれば、理論上はこのエラーは発生しません。何が足りないのでしょうか?

実際の挙動を確認したところ、CIFS 共有を使って roboopy /B をする場合は、以下2つの条件が必要なようです。

  1. CIFS 共有に使うユーザでも『SeBackupPrivilege』権限のあるユーザで実行する必要がある
  2. ユーザ名はローカルとリモートで同じアカウント名を使う必要がある(つまりローカルでのログインユーザとCIFS共有で使うユーザが同じ綴りである)

パスワードは異なっていても良いようです。

もし上記エラーが出た場合は、Local Administrator にログインし、CIFS 共有接続でもリモートサーバの Local Administrator で接続してみると良いでしょう。

それでもダメな場合はファイルが特殊かも?

例えば EFS(Encrypted File System)により暗号化されたファイルは、暗号化した本人の権限でないとリモートへコピーできません。

これは、EFS がリモートコピー時に自動的に復号化を試みる動きをするためです。本人でないユーザが行うとアクセス拒否されます(adminであってもダメ)。

このケースでは /EFSRAW オプションにより暗号化されたままコピーすることが出来ます。ただし、移動先ボリュームには復号化のための鍵が無いので、根本的な解決にならない場合があります(本人がEFSの鍵をバックアップしていればセーフ)。

回復エージェントを設定していれば、admin権限にて復号可能です。

また、その他のケースとしては Linux ベースで作成した SymbolicLinkファイルを Windows へコピーしようとする場合や、Windows 固有のもの(代替データストリーム等)の含まれたファイルやフォルダを Linux へコピーしようとする場合に、上記エラーを吐くことがあるようです。

その場合は個別対処となりますが、Linux ベースのファイルやフォルダについては rsync を使ってコピーするか、バックアップ製品のボリューム単位での復元を行う方法があります。一方、Windows 固有のものが代替データストリームである場合は、この代替データストリームを引き継がないようにする(/DCOPY に D を付けない)か、事前にスクリプトで全検索・削除します。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする