Home > Latest topics

Latest topics > robocopyがシンボリックリンクに捕まってしまってうまく動いてくれない→/XJDオプションでうまくいった

宣伝。日経LinuxにてLinuxの基礎?を紹介する漫画「シス管系女子」を連載させていただいています。 以下の特設サイトにて、単行本まんがでわかるLinux シス管系女子の試し読みが可能! シス管系女子って何!? - 「シス管系女子」特設サイト

robocopyがシンボリックリンクに捕まってしまってうまく動いてくれない→/XJDオプションでうまくいった - Mar 09, 2009

robocopyでいけるかも、と書いたけど、全然駄目だった。ある程度まではうまくいくんだけど、途中からログに新しいディレクトリ 190 c:\Documents and Settings\ユーザ名\AppData\Local\Application Data\Application Data\Application Data\Application Data\Temp\Temp6_python24.zip\みたいに出て、再帰っていうか無限ループに陥ってしまう。

ていうかエクスプローラでCのルートとか見てもこんな名前のフォルダは存在しないのに!と思ったけど、「もしや」と思ってフォルダオプションで「保護されたオペレーティングシステムファイルを表示しない」のチェックを外してみたら、出現した。C:\Documents and Settings は C:\Users へのシンボリックリンクで、C:\Users\ユーザ名\AppData\Local\Application Data は C:\Users\ユーザ名\AppData\Local へのシンボリックリンク(Windows Vistaでは過去のアプリケーションとの互換性のためにシンボリックリンクを用意している、という話をそういえば過去に聞いたことがあった。隠しファイルになってるとは思ってもみなかった。)……ということで延々同じ所をスキャンしてたようだ。

検索してみたら似たようなトラブルが起こってるらしい人がいたけど、ちょっと現象が違うみたいで、あまり参考にならなかった……

なんとか回避できないものだろうかと思ってrobocopy /?でオプション一覧を眺めてたら、こんなオプションがあることに気付いた。

/XJD :: ディレクトリの接合ポイントを除外します。
/XJF :: ファイルの接合ポイントを除外します。

そういえばNTFSのシンボリックリンクは本当は「ジャンクション」って名前だってどっかで聞いたなあ、ということはXJDはExclude Junction Directoryの略だろうか? つまりシンボリックリンクを無視するオプションだったりするんだろうか?と思ったので、とりあえずこの2つを引数に加えてもう一度試してみてる。うまくいったらまたここに書くつもり。

……どうやらうまくいったみたいだ。さっきまで詰まってた所を通過して、これまでコピーされてなかったファイルのコピーが始まった。

ちなみに、使ったのはこんな感じの指定です。

robocopy /E /ZB /R:0 /LOG:z:\log.txt /XJD /XJF "c:\" "z:\c\"

あとは世代別バックアップの方法を考えないと。

追記。無事終わったぽ。現段階で170GB弱。4世代くらい取れるか?

バックアップA→バックアップB→バックアップC→バックアップAを差分更新(ミラーリング)→バックアップBを差分更新(ミラーリング) という感じで回していけば、全部丸ごとバックアップよりも負荷が少なく済みそうだけど……こういうのってどうやればいいんだろ。とりあえず現状既にCygwinのbash用シェルスクリプトにしてはいるので、ボチボチ考えよう。

追記。とりあえず形になったようだ。


2020年1月7日追記。ここから10年が経過した現在は、Windowsのバッチファイルを使わずにrsyncを使っています。重要なのは以下の2点です。

  • QNAPのNASを導入(GUIを使わずSSH接続できる)
  • Windows 10でWSLを使ってrsyncで /mnt/c/ 配下の任意のディレクトリをQNAPに同期する

WSLって何?という方はまんがでわかるWSLあたりをご参照下さい。

分類:システム再構築, , 時刻:21:56 | Comments/Trackbacks (1) | Edit

Comments/Trackbacks

ちょっと違う

>そういえばNTFSのシンボリックリンクは本当は「ジャンクション」

正確には違う。振る舞いは同じになることがある。ジャンクションは主にボリュームに対する物。シンボリックリンクは主にフォルダーに対して。

UNIX系でのマウントとは、Windowsではジャンクション。UNIX,LINUX系では、mountコマンドが存在するが、Windowsでは無い(いや、あるが通常使われていない)。

http://answers.microsoft.com/ja-jp/windows/forum/windows_7-security/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE/7a4e3ddd-7892-4b46-88f3-c5ab6db1c932

この辺に簡単に説明がある。今は mklink で同じように扱っている。で、違いがよくわからない人が多い。わからなくて、いいのかもしれない。そうエンドユーザーは、シンボリックリンクとショートカットだけ使えばいいので。

http://search.yahoo.co.jp/search?b=1&n=10&ei=UTF-8&fr=ie8sc&p=Windows+%E3%83%9C%E3%83%AA%E3%83%A5%E3%83%BC%E3%83%A0%E3%82%92%E3%83%9E%E3%82%A6%E3%83%B3%E3%83%88%E3%81%99%E3%82%8B%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89

この辺ならよくわかると思う

Commented by むらさめ at 2011/12/20 (Tue) 15:41:01

TrackBack ping me at


の末尾に2020年11月30日時点の日本の首相のファミリーネーム(ローマ字で回答)を繋げて下さい。例えば「noda」なら、「2009-03-09_robocopy.trackbacknoda」です。これは機械的なトラックバックスパムを防止するための措置です。

Post a comment

writeback message: Ready to post a comment.

2020年11月30日時点の日本の首相のファミリーネーム(ひらがなで回答)

Powered by blosxom 2.0 + starter kit
Home

カテゴリ一覧

過去の記事

1999.2~2005.8

最近のコメント

最近のつぶやき