本気で書いてみた。ハードリンク・ジャンクション・シンボリックリンクとショートカットリンクの違い

2020年1月3日

こんにちわスピカです。

Windows系のOSには、ファイルやフォルダ、ドライブに対し様々なリンク方法が存在します。

一般的なショートカットリンク

Windowsで一般的に使われているショートカットリンク、これって結構みなさん便利に使っていると思います。

たとえば深い階層のフォルダを一々掘り下げるのもめんどくさいため、デスクトップとかその階層の一番上に目的のファイルやフォルダのショートカットリンクを置いたりしていませんか。

でもWindowsに備わっているのはショートカットリンクだけではないのです

どんなリンクがあるの

WindowsにもUnix系と同じようにハードリンク、ジャンクション、シンボリックリンクというのがあります。

違い知っていますか

あまりなじみがない言葉だと思いますが、知っている人はそこそこの中堅ユーザーでは・・

正直私も曖昧な知識しかありませんでした。というか今でも曖昧ですが・・

でネットを徘徊しても、?????っていう感じで取り止めがないくらいもやもやした感じしかわかりません。

多分、このサイトを見に来てくれたユーザーさんも他のサイトを見てからここへ来た人もいるのではないでしょうか。

他のサイトでもわかりやすく書かれていたものもいくつかありましたが私レベルでは読んでいてわからなかった。・・ 単なる私がバカなのか(-"-)

そもそもなぜ知名度がそんなにないのか

なぜ、「ハードリンク」、「 ジャンクション」、「シンボリックリンク」が「ショートカットリンク」より知名度がないのか

それは、Windows系OSではGUIが主体なためデフォルトで備わっているエクスプローラーで ショートカット 以外のリンク操作ができない。

またWindowsを使っている限り、ショートカットリンクでほぼまかなえてしまう点にあると思います。

多少勉強して分かったこと

今回の「ハードリンク」、「 ジャンクション」、「シンボリックリンク」、「ショートカット」ってどれを取っても多少のちがいはあるもののリンクという点において共通なため各々の違いが全然わかりません。

書いてあることは専門用語連発で「リパース・ポイント」がどうとか、「 リファレンス・カウント 」がどうとか。

ハッキリ言ってチンプンカンプン。私程度のレベルでもわかりやすく説明してくれているサイトってないのけ・・

無ければ作るしかない

徘徊したサイトの中には初心者でもわかるように書いているサイトも多少見受けられました。でもほとんどは使い分けの条件的なもの。

例えば、ハードリンクは同一ボリュームのファイルしかできないが、シンボリックリンクなら他ボリュームのフォルダでもファイルも可能。・・とかいうやつ。

これでもわかる人は分かるのだろう。でもなんかモヤモヤがとれない。

じゃあショートカットリンクとハードリンクの違いは・・とかそもそもなんでそんな何種類もリンクが必要なのっていうこと。

そんなこんなで今の時点で分かったことを書いていきたいと思います。多少端折る部分もあると思いますが、大目に見てやってください。

Windows系OSはそもそもショートカットリンクから

まずリンクってファイル操作の利便性を上げるために考え出された技術。Windows系OSはそもそもショートカットリンクしか最初は持っていませんでした。Windows95の時代です。

そのころUnix系OSではハードリンクという機能からシンボリックリンクやジャンクション機能が取り入れられようとしていました。

ドライブレターとマウント

Windows系OSではHDDなどのパーテーション(これをボリュームという)をユーザーが扱う手法としてドライブレターという技法を取り入れました。

例えば「C」ドライブとか「D」ドライブとか言っているやつ。

これはDOSの時代から踏襲しています。Windows系OSも基本この技術を取り入れていますね。

Windows系OSの場合、システムドライブは基本Cドライブとなっています。

なぜCドライブなのかはここ辺りで書いていますので参考にしてください。

比して当時大型コンピュータ(サーバー)のOSはUnix系がほとんど。このUnix系OSで利用されていたファイル操作の技法がマウントと言われるもの。

マウントとは

「接ぎ木」と訳すほうが自然と思いそう書きますが、Unix系OSの場合、ルート(/)を筆頭にフォルダやファイルが接ぎ木のようにつながっているイメージで管理されています。

そのためUnix系OSがHDDなどのパーテーションを管理する手法としてマウントという技法が取り入れられました。

Windows系OSはUnix系を踏襲

そもそも知っている人もいると思いますが、Windows2000(NT5.0)まではUnix系OS(Posix系)のファイルシステムをサポートしていました。XPで外されましたが。

ドライブレターがマウントに劣る?

ドライブレター技法は便利な反面、問題もあります。最大の問題は、アルファベットを使っている関係上26文字しか使用できない。

まあ26個もパーテーションを作ることは今でもあまりないのかもしれませんが。仮想HDDとか使っていると意外と消費するもの。

また好きなフォルダ(ディレクトリ)の下にドライブレターを配置できない。そのため他のパーテーションを呼び出すにはエクスプローラーでいえば一旦最上段のドライブ表示まで戻らないといけない。


マイクロソフトは当時クライアント分野において成功を収めておりサーバー分野においてもなんとかシェアを取りたいと考えていた。

サーバーとなればやはりドライブレターのみだとちょっときついと考えたのでしょう。だから今でもジャンクション機能等はGUIで操作できないのではと思います。

マウント技法の利点

マウント技法については。すでに上記のような欠点はなくなっており使い込むほどに便利なのがわかっていました。

マウントの欠点もある

マウントという習慣がないと最初は結構不便でありその都度マウントさせるのがめんどい。(オートでマウントさせる方法もあるが)

Unix系は基本CUIなためコマンド処理で取り扱うあたりが不便に感じるのだろう。そしていまだジャンクション機能等もWindows系OSでGUIでできないものこのあたりに原因があるのではないでしょうか。

ハードリンクとソフトリンク

このあたりから本題となります。まずリンクは大きく「ハードリンク」と「ソフトリンク」に分けられます。

ハードリンクとは

ハードリンクはよりハード(HDDとかSSDとか)に近い部分で取り扱うリンク

ソフトリンクとは

OSが介在する比がハードリンクにくらべ多く。よりユーザーフレンドリーな処理ができるリンク。ここでいう 「ハードリンク」以外の「 ジャンクション」、「シンボリックリンク」、「ショートカットリンク」 を言います。

まあこう書いてもなんじゃらほいって感じだと思います。私もそうだったので。そこでここではちょっと分かりやすく。具体的に書いていきたいと思います。

まずオブジェクトを明確に

今回の「ハードリンク」、「 ジャンクション」、「シンボリックリンク」、「ショートカットリンク」といった言葉を理解するためには各々を説明するオブジェクトをはっきりさせてやる必要があります。

ということで、3つの具体的なオブジェクトを想定していきたいと思います。

  • HDD等(補助記憶装置)内のファイルデータ。これを「実体データ」とここでは言うことにします。
  • この実体データを目的にしたファイル名、これを「実体ファイル名」とします。
  • そして「実体ファイル名」の化身、これを各々「 ジャンクション」、「シンボリックリンク」、「ショートカットリンク」と呼ぶことにします。

この呼び名はあくまでも便宜上わかりやすく説明するためにこの場において利用するのもので正式な呼称ではないのでこのあたり誤解ないように願います。

ハードリンクとは

実体データ」 をファイルとして取り扱う場合、通常はOSがファイルとして対になるようにその実体データを呼び出してくれます。これが 「実体ファイル名」 です。

簡単にいえばエクスプローラーで見た各々のファイルはHDD等のデータと通常は一対一で対応している 「実体ファイル名」 を見ています。

ところがハードリンクを使うと、「実体データ」に対し複数の「実体ファイル名」を持つことができてしまう。

このあたりがソフトリンクと大きく違うところです。どういうことか

実体データは一個なのにそれを呼び出すファイル名は複数作ることができてしまう。忍者でいえば分身の術みたいな感じですかね。

削除するとどうなるの

分身の術と違うところは本身と化身が同体ということ。だから「実体ファイル名」を作ったあと大元の「実体ファイル名」を削除してもその実体データは残っていることになります。

これってちょっと面白い発想ですよね。ショートカットリンクだけ扱っていては知らなかったことだと思います。

じゃあ、最後の一つの「実体ファイル名」を削除するとどうなるの

いくつも「実体ファイル名」を作っておいて最後のひとつまでは「実体データ」は保持され最後の一つの「実体ファイル名」が削除されたときはじめて「 実体データ 」も削除されます。(厳密にいうと実体データの目次部分が削除されます。詳細は述べませんが)

どうやって管理しているの

当然、最初の「実体ファイル名」以外に「実体データ」に対する「実体ファイル名」がいくつあるかこれがわからないと、最後のひとつが識別できませんよね。

この技法が「NTFSのファイル・オブジェクトのリファレンス・カウント」というやつ。Unix系OSでいうとinodeですね。

この技法を使うことで実体データと複数実体ファイル名を管理しています。

ハードリンクした実体ファイル名は変えられるの

ハードリンクした「実体ファイル名」は作成後変更しても大丈夫。変更したあと元の「実体ファイル名」を削除しても実体データは残ります。

ソフトリンクとは

ハードリンクは上記で書いたように実体データと実体ファイル名の間の管理処理でした。

それに対し、ソフトリンクとは実体ファイル名と化身との管理処理関係をいいます。

ジャンクション」、「シンボリックリンク」、「ショートカットリンク」はすべてソフトリンクになります。

各々どう違うの

基本リンクファイルであることに差はありません。ただ各々の機能が作られた経緯と時期が違うのだと私は考えています。それによって制約がでてきます

まず、 「ショートカットリンク」と 「ジャンクション」、「シンボリックリンク」 の違いから見ていきましょう。

ショートカットリンク」は言わずと知れたWindows固有の機能。(最近ではGnomeやKDEでも使えるらしいですが、Macではエイリアスなんて言ったりするそうですね)

ショートカットリンク」はNT系OSの前身である9x系OSから既に搭載されておりました。

それに対し「ジャンクション」機能はWindows2000で搭載され、「シンボリックリンク」はWindowsvistaで搭載された機能となります。

大きく違うこの 「ショートカットリンク」と 「ジャンクション」、「シンボリックリンク」 の時期。

それはファイルシステムにあります。そもそも9x系OSはFAT(またはFAT32)しかサポートしておりませんでした。

ジャンクション」、「シンボリックリンク」はNTFSが利用できるOSからしかサポートされません。

Windows系OSでは NT系OSしかNTFSをサポートしていません。だからジャンクション機能等が搭載されたのもWindows2000以降。

そもそもがUnix系OSの「ジャンクション」、「シンボリックリンク」を模倣して作られたためでなおかつWindowsNTをサーバー市場に押し上げるためのひとつの技術の投入だと私は思っています。

感のよい人は気づくと思いますが、なぜ今だ正式にこの「ジャンクション」、「シンボリックリンク」、そして「ハードリンク」がGUIで出来ないのか。それはひとえにサーバーOSとしての機能としかマイクロソフトが見ていない証拠だと思います。

こんな機能はクライアントユーザーは使わんのだろうと・・・

機能差

上記でも書いたとおり「ショートカットリンク」と 「ジャンクション」、「シンボリックリンク」ともソフトリンクなためリンクという目的の基本機能に差はありません。

ただ利用上の制約がやはりあります。これが事実上の違いということになります。

「ジャンクション」と「シンボリックリンク」機能の差

これは、 「ジャンクション」機能がUnix系OSでも最初に投入された技術だそうで、そう言った意味でも 「シンボリックリンク」 より劣ります。

「ジャンクション」 機能はフォルダにしか利用できない。その点 「シンボリックリンク」 はファイル、フォルダのどちらでも適用できる。

ネットワーク越しのフォルダに対して、 「ジャンクション」 機能 は適用できないが、「シンボリックリンク」は適用できる。

主だった違いは正直これくらいで、あとは 「ジャンクション」 機能 は相対パスで指定しても絶対パスに変換されてしまう点くらいです。

やはり後発の「シンボリックリンク」機能のほうが「ジャンクション」 機能をすべて包含していると思われます。

唯一「シンボリックリンク」が「ジャンクション」に劣るとしたら、実行時に管理者権限が必要ということくらい。

CS(クライアントサーバー)系では案外クライアントは管理者権限を使えない場合もあり、このあたりがそういった環境で利用されている人からしたら不便ではと思います。

PC、所謂パーソナルコンピュータと言われる場合の利用に関しては管理者と一般ユーザーが同一の場合も多く。そういった環境ではあまり意味を持たないのではないでしょうか。

では「ショートカットリンク」と「ジャンクション」等の違い

ショートカットリンク」とはWindows系OS固有の機能であると上記で書きましたが、そのため「ショートカットリンク」は徐々にバージョンアップしています。

現状、利便性で言ったら、「ハードリンク」、「ジャンクション」、「シンボリックリンク」よりはるかに使い勝手が良いです。

追従性

ショートカットリンク」の元ファイルを移動した場合、「ショートカットリンク」ファイルの内部もそれに沿って変更される。

※実はWindowsXPでは元ファイルを移動した場合リンクエラーとなって追従できません。そういった点でWindows自体のバージョンが上がるとショートカットリンクの機能もアップしているようです。

そのためリンク切れする心配がない。

それに対し「ジャンクション」、「シンボリックリンク」は元ファイルが移動されるとリンク切れが生じる。

元ファイルが削除された場合

元ファイルが削除された場合は、「ショートカットリンク」と 「ジャンクショ」、「シンボリックリンク」すべてリンクファイルは残こる。

一番の大きな違い

実は「ショートカットリンク」と 「ジャンクション」、「シンボリックリンク」の一番の違い、ここが一番書きたかったところです。

そして私もこれを知って初めて「ショートカットリンク」と 「ジャンクション」、「シンボリックリンク」の違いに納得しました。

それは「リンク経路」

ファイルの場合でいうとショートカットリンクはリンク元ファイルまでの経路を直接記憶するに対して、シンボリックリンクはまずリンク先ファイルを経由したのちリンク元までの経路を記憶する

ちょっと分かりにくいので例で説明する

まず自分PCのDドライブにTESTフォルダを作成しその下に「新しいテキスト ドキュメント (2).txt」を作成する(それ以外のファイルもあるが気にしないでね)

そしてその 「新しいテキスト ドキュメント (2).txt」 のショートカットリンクをCドライブ直下に作成したTESTフォルダに作る

また同じように、 「新しいテキスト ドキュメント (2).txt」 のシンボリックリンクをCドライブ直下に作成したTESTフォルダに作る

まずショートカットリンクのプロパティを見ると

次にシンボリックリンクのプロパティを見ると、新たなリンクタブが出来ているのでこれをクリックすると下のようになっている。

ちなみにショートカットタブ自体の表示はショートカットリンクと同じ。

こう考えるとわかりやすかな。シンボリックリンクを実行すると、アプリはともかくデータ自体はまず「C:\test」を見に行ってから「D:\test\新しいテキスト ドキュメント (2).txt」へ飛ぶ。

これをコマンドラインで表記すると

アプリ ”C:\test\新しいテキスト ドキュメント (2).txt” →”D:\test\新しいテキスト ドキュメント (2).txt”

比してショートカットリンクはいきなり「D:\test\新しいテキスト ドキュメント (2).txt」へ飛ぶ。

これをコマンドラインで表記すると

アプリ ”D:\test\新しいテキスト ドキュメント (2).txt”

これはどういことか

アプリから見た場合、ショートカットリンクは”D:\test\新しいテキスト ドキュメント (2).txt”を見ているが、シンボリックリンクの場合、見ているのは”C:\test\新しいテキスト ドキュメント (2).txt”となる。

フォルダで考えると分かりやすい

先ほどの”D:\test\test2”を同じように”C:\test”にシンボリックリンクとショートカットリンクを作ります。


上がシンボリックリンク、下がショートカットリンク。

これを各々ダブルクリックして先フォルダを開くとシンボリックリンクで作った方は”C:\test\test2”となる

それに対し、ショートカットリンクでは

”D:\test\test”を参照している。

これをどう考えるか。

システムやアプリから見た場合、シンボリックリンクはシンボリックの位置にあるかように表示される。

それに対しショートカットリンクは真のリンク先を表示する。

これがもっとも大きな違いです。

じゃあ、どういった事例で使うの

あまり一般的ではないですが、ちょっと前まではSSDをシステムで使いデータはHDDでなんて人も結構いたと思います。

なぜそんなことするかというとSSDはHDDの数倍は早くアクセスできるためシステム起動に、ただ容量が小さくとてもデータやアプリプログラムまで保存できない。

また、ある程度経ってくると"C:\program files"や"C:\Program Data"がCドライブを圧迫してきます。そんなとき "C:\program files"や"C:\Program Data"をDドライブに移動させたい。

ただ単に移動しただけではエラーの連発

ただ単に移動しただけでは次の起動時にエラーが続発し、場合によってはシステムが停止する場合もあります。

そんなとき移動元にショートカットを配置すればいいんじゃないということで配置してもエラー連発になります。

がしかしシンボリックリンクではエラーはでません。

環境変数で出来るだろうという人もいますがすべてのアプリが環境変数を参照しているわけでもないため。安全性はシンボリックリンクのほうが上です。

まとめ

ハードリンク、ジャンクション、シンボリックリンク、ショートカットリンクについて基本的な事柄をなるべくわかりやすいように書いてみました。

多少違和感のある表現もあろうかと思いますがそのあたりはご容赦ください。

話は変わりますがモニタやHDDが激安です NTT-X Storeの特価品販売