WindowVista以降のrobocopyにおける無限ディレクトリの罠。

昨今のマイブームである、バックアップについて、設定したことと罠、対策を記します。

前提。

今回バックアップした端末。
VAIO シリーズ知らん (Windows7 , 使用容量60GBほど)

バックアップ先。
NAS共有フォルダ (LinkStation LS-QVL/R5)

robocopyってナニ?

WindowsVista以降のコマンドプロンプトで、「robocopy」っていう、バックアップにうってつけのコマンドがあるらしいので、これを活用。
参考:http://okanos.com/blog/2008/11/10120000.php

batを作ってみた。

ガサツな自分は、どこのディレクトリをバックアップするとか考えたくないので、「漢ならCドライブまるごとバックアップしてやんよ」的なノリで以下のコマンドを書いてみた。
"robocopy C:\ (NAS共有フォルダ)\backup\c /MIR /R:0 /FFT"

実行。…そして泥沼へ。

早速実行! …お〜。思った通り時間がかかる。
ということで、実行させたまま寝ることに。(この睡魔が後で後悔することになる)

そして朝。…終わってない。
処理中のディレクトリを見ると、「C:\Documents and Settings\All Users\Application Data\Application Data\Application Data\...(以降延々)」

ヒイィ〜!ApplicationDataの無間地獄や〜!

いったん強制終了。
バックアップデータを削除……できない。終わらない。

いろいろ端折って原因。

コマンドプロンプトだとApplication Dataにアクセスできるけど、エクスプローラからはできないこの無限ApplicationData。
どうやら、ジャンクションっていうLinuxでいうシンボリックリンクWindowsにもあるらしい。
これが、Vista以降のディレクトリ構成変更で対応できないアプリのために規定で作成されているそう。

今回の例だと、
C:\Documents and Settings\All Users\Application Data\Application Data...
(1)"c:\"は実体。
(2)"Documents and Settings"はジャンクションで、リンク先は"C:\Users"。
(3)"All Users"はジャンクションで、実体は"Public"。(これは確認できなかった。ジャンクションと違うのかな?)
(4)"Application Data"はジャンクションで、実体は"C:\ProgramData"。
(5)実体"C:\ProgramData"には、ジャンクション"Application Data"がある。
(6) (4)に戻る。

ということで無間地獄に陥っていた模様。
その間にあるファイルを何回も何回もバックアップしてくれた模様。

なんて面倒臭い仕様…!!

対策1:バックアップデータが消せない対策。

はい。消せませんでした。バックアップデータ。
削除したら、Windwosさんが「パスが長すぎる」って。誰のせいでこんな事をしていると…!!

今回、バックアップ先が幸いNASだったので、ネットワークドライブを切って解決。

対策2:無間地獄対策。

robocopyでは、そのへんも考えてくれていたようで、オプション"/XJD"と"/XJF"を加えて解決できそう。
参考:Latest topics > robocopyがシンボリックリンクに捕まってしまってうまく動いてくれない→/XJDオプションでうまくいった - outsider reflex

…前の参考記事にもさりげなく書いてあったのねorz

まとめ

ジャンクションに気をつけよう!高速道路と同じだね!