3つの仕組み、1つの発想:別の場所を指す
ハードリンクとは、同じファイルへの2つ目のディレクトリ エントリです。どちらの名前も同じ MFT レコードを指し、NTFS はリンクカウンタを管理します。片方の名前を消しても、最後のリンクが消えるまでデータは生き続けます。ハードリンクが機能するのはファイルだけで、フォルダーには使えず、ボリュームをまたぐこともできません。WinSxS の仕掛けがまさにこれです。コンポーネント ストア、System32、そして山ほどの更新バックアップが同じ物理ファイルを共有しているため、どの「コピー」もディスク上の追加コストはゼロです。
ジャンクションはディレクトリに置かれた再解析ポイントで、同じマシン上のあるフォルダーを別のフォルダーへリダイレクトする Windows 2000 時代の技術です。Windows が「Documents and Settings」のような C:\Users を指す互換用の幽霊を作るのはこの仕組みです。シンボリックリンクはその現代的で高機能な版です。フォルダーだけでなくファイルも対象にでき、相対パスを使え、ボリュームをまたげます。ただし作成には管理者権限のコマンドプロンプトか開発者モードが必要です。
コマンドと、実際に何が作られるか
すべて mklink 一本で済み、キモはスイッチにあります。管理者権限のコマンドプロンプトを開けば、下の3つの形式で実際のケースの9割をカバーできます。結果の確認は dir /AL で。再解析ポイントは <SYMLINK>、<SYMLINKD>、<JUNCTION> として表示され、括弧の中にリンク先が示されます。
- mklink /H backup.txt original.txt — ハードリンク:2つの名前、1つのファイル、追加バイトはゼロ
- mklink /J C:\Link C:\RealFolder — ジャンクション:古くて高速、同じボリューム上のフォルダー専用
- mklink /D C:\Link C:\RealFolder — ディレクトリのシンボリックリンク:管理者権限か開発者モードが必要
- fsutil hardlink list file.txt — そのデータに到達できるすべての名前を表示します
- dir /AL — フォルダー内の再解析ポイントを種類とリンク先つきで一覧します
リンクが噛みつく場所:バックアップ、クリーナー、移動
単純な容量カウンタはハードリンクされたファイルをリンクごとに1回ずつ数えるため、健康な Windows 環境で「重複削除」ツールが40GBもの架空の節約を誇らしげに発表する事態が起こります。一部のクリーンアップ系ユーティリティはジャンクションをリンク先まで追いかけて、本当のデータを裏口から削除します。まともなものは再解析ポイントを完全にスキップします。また、ジャンクションを含むフォルダーを別のドライブへドラッグすると、エクスプローラーが知らぬ間にリンクをリンク先の完全なコピーに置き換えることがあります。数ギガバイトがどこからともなく湧くわけです。
安全な習慣はシンプルです。リンクは構造のために使い、保存のために使わない。そしてデータドライブのルートに作ったジャンクションはすべて記録しておく。さらに、ハードリンクを考慮せずにスキャンされたボリューム上のフォルダーサイズは決して信用しないこと。重複らしきファイルを削除する前に fsutil hardlink list を実行してください。データに2つの名前があるなら、それはコピーを見ているのではないのですから。
よくある質問
ジャンクションはショートカットと同じ?
違います。ショートカットは各アプリが自分で解釈する .lnk ファイルですが、ジャンクションはファイルシステムのレベルで動くため、どのプログラムにもリンク先フォルダーの中身が透過的に見えます。
ハードリンクを削除するとオリジナルのファイルも消える?
消えません。データが消えるのは最後のハードリンクが削除されたときだけです。それまでは、どちらの名前も対等な持ち主であり、何か「本物の」オリジナルへの参照ではありません。
購入前にライセンスの内容をご確認ください。
一度限りの 30 分試用では基本ツールを利用できます。PRO 機能は有料ライセンスを有効にするまでロックされています。
次に読む記事
お問い合わせ: [email protected]