【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で接続してみると良いでしょう。

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

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

シェアする

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

フォローする