NTFSにおけるリンク

コメントで返答するのが面倒な量になりそうなのでここに書きます。
そもそもなぜ - MasaHeroの日記より

rero 2009/06/12 23:41
>それが文中に出した"リパースポイントによるボリュームのマウント"です。
「ディスクの管理」からできる「空のNTFSフォルダにマウント」ってやつかと思ったんだけど,実態はハードリンクと同じだったりするのかい?

NTFSにおけるハードリンクの実装は、MFT(Master File Table)内のファイルを表すエントリにもう一つ別の$FILE_NAMEアトリビュートを持たせるという方法です。$FILE_NAMEアトリビュートは、"ファイル名"と"親ディレクトリを表すエントリへの参照"を持っています。当然ですがこの方法はMFTがボリューム内で完結しているため同一ボリューム内でのリンクにしか使えません。

ボリュームをまたいで有効なのはジャンクションとシンボリックリンクです。両方ともリパースポイントを使用しますが、リパースタグが異なります。なおシンボリックリンクVistaより実装されたもので、それ以前の実装では使えません。ntfs.sysにパッチを当ててやれば使えるようですが、今回は関係ないので詳細は省きます。また機能としてはシンボリックリンクはジャンクションを内包します。

"「ディスクの管理」からできる「空のNTFSフォルダにマウント」"もジャンクションですし、"別ドライブのディレクトリへのハードリンク"も別のドライブということは別ボリュームなのでハードリンクではなく作成されるのはジャンクションです。Vistaだと後者はシンボリックリンクの可能性もあります。

さてこのジャンクション、いろいろ問題がありまして僕が分かっているだけでも以下の通りです。

  • Windows 2000では、異なるボリュームに対してジャンクションを張ると、そのジャンクションの下にあるファイルやフォルダはエクスプローラから削除できません
  • Windows XPでは、異なるボリュームに対してジャンクションを張るとごみ箱へ入れるためにボリューム間でコピーを行うというかなり本末転倒な動作を行い、さらにはゴミ箱の容量が大きく異なると失敗します
  • Windows 2000/XPのエクスプローラはリンクの存在を認識しないので、ジャンクションのフォルダを削除してごみ箱を空にすると、リンク先のファイルがすべて消え去ります

自分とこが作ったFileSystemなのに自分とこのソフトが対応してないとは、こは如何に。