ごみ箱は 2 つあったッ!!

ウィルススキャンをしながら、スキャン状況をぼーっと眺めていたら、何年も前に削除したはずのファイルがスキャンされていることに気付いた。
パスを見ると、リムーバブル HDD の Recycled というディレクトリに入っているらしい。

僕は、Recycled という名前を見て、「あぁ、それって確か、ごみ箱の実体だよな。『ごみ箱を空にする』をやれば OK かな」と思ったのだが、エクスプローラでごみ箱を開いても、問題のファイルは表示されない。どういうわけだ! 削除したファイルの亡霊だというのか……!!
……落ち着いて調べてみると、実はごみ箱が 2 つ存在していて、片方はエクスプローラからは見えていない、ということがわかった。問題の亡霊ファイルは、その見えない方のごみ箱に残っていたという話。

新手のスタンド攻撃かッ!?

まずはこちらの画像を見て頂こう。とあるリムーバブル HDD を、左はデフォルト設定で、右は少し設定を変更してエクスプローラで表示した様子である。

デフォルト設定では「デスクトップ」のすぐ下に表示されているごみ箱だが、設定を変えた右の画像では、リムーバブル HDD に謎のディレクトリがいくつか表示され、その中にごみ箱のアイコンが 2 つ表示されている。双子の亡霊であろうか……。

本体を探し出せッ!!

エクスプローラ上では「デスクトップ」直下に表示されるごみ箱だけど、実体は各ドライブ直下にこっそり作られるディレクトリで、ユーザが削除した (つもりの) ファイルは、実際にはそのディレクトリに移動されただけで、中身はそのまま保存されている。「ごみ箱は空にする」を実行した場合には、こうやって移動されていたファイルが、今度こそ本当に*1削除されることになる。
このディレクトリはドライブごとに作られるけど、エクスプローラで普通に見たときに見える「ごみ箱」は、各ドライブの内容をまとめて表示する仕組みになっている。
僕の場合、ここまでは知ってたんだけど、その先をよく知らなかった。問題となるのは、ごみ箱の実体となるディレクトリが、なんという名前で作られるか。これが、条件によって違うらしい。

条件 ディレクトリ名
Windows XP までの OS で、HDD のフォーマットが NTFS Recycler
Windows XP までの OS で、HDD のフォーマットが NTFS 以外 Recycled
Windows Vista $RECYCLE.BIN

どの場合も、デフォルトの設定ではエクスプローラでは表示されない。設定を変更するには、エクスプローラのメニューから「ツール」→「オプション」を選択する*2。ダイアログが表示されるので、以下の箇所を変更すれば OK。

  • 「すべてのファイルとフォルダを表示する」を選択する
  • 「保護されたオペレーション システム ファイルを表示しない」のチェックを外す (警告が表示されるので、「はい」ボタンをクリック)

上の画像を見るとわかるとおり、実体の名前は違うのに、エクスプローラ上では「ごみ箱」と表示されたりするのが紛らわしい。Vista の場合、エクスプローラのアドレスバーで右端をクリックすると、本名が表示される。なんか混乱しそうだけど、とにかく、「ごみ箱」という名前のディレクトリは実際には存在しないってこと。

僕の環境では、E: ドライブに Recycled と $RECYCLE.BIN という 2 つのごみ箱が存在していて、OS (Vista) はそのうち $RECYCLE.BIN だけをごみ箱として扱っているようだ。そういえばこの HDD は FAT32 フォーマットで、以前 Windows 2000/XP の環境で使っていたのを、去年 Vista のマシンに移したのだった。どうやら、Vista は以前の OS 向けで使われていたごみ箱ディレクトリがあっても無視して、自分用に $RECYCLE.BIN を自動作成するようだ。

鏡に「中の世界」なんて

ここで、2 つある実体ディレクトリの中身を見ようとすると、さらに混乱することになる。というか僕がちょっと混乱した。ここでまた 2 枚の画像を見てもらおうと思う。

左は、Vista がごみ箱として認識している $RECYCLE.BIN ディレクトリ (表示上は「ごみ箱」)。右は、以前に作られていた Recycled ディレクトリの方。表示されているファイルの一覧がまったく同じであることにお気づきでしょうか。
これは、Windows が「特定のディレクトリについては、表示をカスタマイズする」という仕組みがあって、そのせいでどちらのディレクトリを開いたときも、エクスプローラが「素直にディレクトリの中身を表示するのではなく、ごみ箱として表示するんだな」と認識してしまっている。コマンドプロンプトを使うと、ディレクトリの中に desktop.ini というファイルがあり、その中になにやら英数字が書かれていることを確認できる*3

おおまかに説明すると、Recycled ディレクトリを開こうとしたとき、エクスプローラの内部では

  1. ディレクトリ内に desktop.ini があることに気付く
  2. 中を見ると、ごみ箱として表示してねという指示が書かれている
  3. 各ドライブの $RECYCLE.BIN ディレクトリの内容を調べ、まとめて表示する

ということが行われる。したがって、表示されるのは、実際にそのディレクトリに格納されているファイルの一覧じゃない、ということになる。
面倒なことに、ごみ箱として表示されるからといって、実際にごみ箱の管理下にあるとは限らない。Recycled を開いたときも確かにごみ箱として表示されるんだけど、Vista が実際にごみ箱の実体だと思っているのは各ドライブの $RECYCLE.BIN だけなので、ごみ箱として表示されるファイル一覧には、Recycled 内のファイルが反映されていない。「ごみ箱を空にする」を実行したとしても、各ドライブの $RECYCLE.BIN の中身が消されるだけで、Recycled の中身はそのまま残ってしまう。これが、今回の亡霊ファイルの正体だ。

オラオラオラオラオラ

さて、ここまでわかったことをまとめると、

  • 同じドライブに、$RECYCLE.BIN の他に、以前作られた Recycled というディレクトリにファイルが残ってしまっている
  • Vista の「ごみ箱」は $RECYCLE.BIN しか見ていないので、「ごみ箱を空にする」を実行しても、Recycled 内のファイルは削除できない

というわけで、Recycled ディレクトリごと削除する必要がありそう。
一番簡単に見えるのは、Recycled ディレクトリをエクスプローラで削除することだけど、よく言われているように、これだけだとデータの痕跡が残ってしまい、後から復元することができてしまう。完全に消えてほしい場合はそれなりの手間をかける必要がある。
結局のところ、HDD を Vista マシンに流用する前に、いったんすべてまっさらにするべきだったんだと思う。今回見つかったファイルは、タイムスタンプが 2005 年になっていた。たまたま見つけたから消せたけど、もしかしたら永遠に亡霊ファイルが残りっぱなしになっていたかもしれない。後から気付いて完全に消すのは、すごく大変だ。

ちなみに

上に挙げた画像を注意深く見た人は気付いたかもしれない。
エクスプローラの設定を変えてディレクトリがすべて表示されるようにしたとき、他にもいくつかのディレクトリが出現していて、その中に .Trashes というのがある。これは、同じ HDD を Mac OS X からも使った時に作られた、Mac OS X 用の「ごみ箱の実体」。

*1:厳密に言うと、ごみ箱を空にしただけでは HDD 上に痕跡が残ってしまうため、多くの場合は後から復元できてしまう。

*2:Vistaエクスプローラではメニューが非表示になっているが、Alt キーを押すと表示される

*3:Windows である程度プログラムを書いた経験のある人であれば、書かれているのが GUID であることがわかるでしょう。