シンボリックリンクが自分に貼れる

とあるフォルダを開くと必ずエクスプローラがクラッシュするようになった。

ファイルシステムが壊れてしまったのかと chkdsk /f をやってみるが異常なし。

コマンドプロンプトでフォルダの中身を見ると、シンボリックリンクが自分に向けて貼ってあるファイルが見つかった。こいつを別の場所に移すと中身が見れるようになるので、どうやらこいつが原因のようだ。

問題のシンボリックリンクは自分が mklink を使って作った覚えがある。普通、自分に向けて作れるものなんだろうか?

D:\foo>mklink a.txt a.txt
a.txt <<===>> a.txt のシンボリック リンクが作成されました

D:\foo>dir
 ドライブ D のボリューム ラベルは bar です
 ボリューム シリアル番号は 0E51-C432 です

 D:\foo のディレクトリ

2009/10/22  14:25    <DIR>          .
2009/10/22  14:25    <DIR>          ..
2009/10/22  14:26    <SYMLINK>      a.txt [a.txt]
               1 個のファイル                   0 バイト
               2 個のディレクトリ  106,123,002,338 バイトの空き領域

なんてこった。普通に作れるぞ*1。もちろん、このフォルダを開くとクラッシュする。

状況証拠からして、どうもタイプミスで自分に向けたシンボリックリンクを作ってしまっていたようだな。mklinkの引数に相対パスを使うときは気を付けること!!

ちなみに、このようなファイルを共有ディレクトリに置くなんてイタズラをしてはいけない。

*1:ループを検出してくれることを期待したが、よく考えるとループさせる方法は他にもあるわけで、例えば a.txt → b.txt → a.txt でもエクスプローラはクラッシュする。