Azure StorageをバックアップするならネットワークドライブじゃなくUNCで指定しよう
アーザスでは事業継続性の観点から、リソースのクラウド移行を進めています。その一環でAzure Storageをファイルサーバとして利用しています。
当然バックアップ処理が必要なのですが、そこでプチハマりしてしまいました。
robocopyでバックアップ
バックアップ処理は、タスクスケジューラからバックアップバッチを起動するシンプルな方法をとりました。
ファイルのコピーはお約束の robocopy を使います。
ちなみにroboはロボットじゃなくロバスト(堅牢な)って意味です。
▼こんな感じ
[code]robocopy Z:¥common %DST% /MIR /FFT /NP /COPY:DT /DCOPY:T /R:0 /W:0 /LOG+:"%LOG%"[/code]
利便性を考えて、Azure Strageをネットワークドライブ(Z:)として設定しています。
タスクスケジューラで起動すると動かない
バッチを直接実行すると、ちゃんとファイルがコピー(バックアップ)されました。良かった良かった。
で、タスクスケジューラで起動してみると・・・エラー。
▼こんなログが出力されてました
[code highlight=”6,7″]
——————————————————————————-
ROBOCOPY :: Windows の堅牢性の高いファイル コピー
——————————————————————————-
開始: yyyy年mm月dd日 0:05:38
yyyy/mm/dd 00:05:38 エラー 3 (0x00000003) コピー元のファイル システムの種類を取得しています Z:\common\
指定されたパスが見つかりません。
[/code]
いやいや、そのパスあるし。
タスクスケジューラで起動したバッチの場合、パスはUNCで指定すること
結論から言うと、ネットワークドライブでパス指定したのが誤りでした。
ネットワークドライブは対話形式でWindowsにログインしないと機能しません。要するに普通のログインです。
サービスやタスクスケジューラから起動したバッチはネットワークドライブなんて知りません。だからエラーになったんですね。
UNCでパス指定したら動いた
▼ということでコピー元のAzure StorageをUNCで指定したら、
[code]robocopy ¥¥xxxx.file.core.windows.net¥common %DST% /MIR /FFT /NP /COPY:DT /DCOPY:T /R:0 /W:0 /LOG+:"%LOG%"[/code]
▼あっさり動きました。
[code]
——————————————————————————-
ROBOCOPY :: Windows の堅牢性の高いファイル コピー
——————————————————————————-
開始: yyyy年mm月dd日 0:05:01
コピー元 = \\xxx.file.core.windows.net\xxx\アーザス管理部\
コピー先 : E:\backup\アーザス管理部\
[/code]
最後に
よくよく考えたらネットワークドライブが使えないのが当たり前ですね。
みなさんはこんなことでハマらないように!