ハードリンク

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索
ふたつのハードリンクによって参照されるファイル

ハードリンクは、コンピュータファイルシステム上のファイルディレクトリ等の資源とその資源につけられた名前を結びつけること、もしくは、その結びつきのことである。

概要[編集]

名前によってアクセスできるファイルは少なくともひとつのハードリンクを持っている。ファイルは複数のハードリンクを持つこともある。この場合、そのファイルは複数の異なった名前でアクセスできる。UNIXを例に言えば、すべてのファイル、ディレクトリにはinodeと呼ばれる固有のIDが割り当てられている。ハードリンクとは同じID(iノード)にアクセスするファイル(ディレクトリ)のことであり、新しくハードリンクを張れば、同じ実体(右図のActual Data on Disk)へアクセスする方法が複数あると言うことになる。そのいずれから変更を加えても、対象となる実体やiノードは同一であるため、見かけ上すべてのファイルに変更が反映される。これにより、あたかもソフトリンクであるかのように機能する。シンボリックリンクでは、リンク対象(オリジナル)が改名されたり、ディレクトリを移動したりするとリンクが無効になってしまう。一方ハードリンクでは、オリジナルは単に先に張られたハードリンクというだけであり、後から張られたハードリンクとの差はない。したがって、オリジナルを改名したり、どこかに移動したりしてもリンクが切れることはない(右図の"LINK A.TXT"をたとえば"LINK C.TXT"のように改名しても、"LINK B.TXT"には影響しない)。

ソフトリンクが名前とファイルへのアクセス方法を結びつけるのに対し、ハードリンクは名前をファイルに直接結びつけるものであるため、ファイルへのアクセスはどの名前からハードリンクをたどっても同じ処理方法となる。ファイルに複数のハードリンクを作ることができるファイルシステムでは、ファイルを削除するというのはハードリンクを削除するという意味で使われる。そのようなシステムではファイルはハードリンクによる参照カウント(リンクカウント)を記録しており、1つのハードリンクが削除された場合でも、別のハードリンクが存在している限り、固有のiノードを持つファイルの実体は削除されずに残る。参照するハードリンクがなくなった時点でファイルが削除される。

なお、ハードリンクはその性質上ファイルシステムの機能に強く依存しているが、異なったボリューム間をまたがったリンクを作成するのは原理的に不可能である。

ファイルに別名をつける機能としてのハードリンクは主にソフトリンク(UNIXではシンボリックリンク)が実装されていなかった時代のUNIXで用いられた。最近ではNTFSHFS+にも実装されており、今日利用されている多くのオペレーティングシステムに備わっているが、ファイルに別名をつける目的には、ボリューム間でもリンクを作ることができ、管理も簡単なソフトリンクを用いることが多い。

UNIXにおいては、各ディレクトリが3種類のハードリンクで参照されているのが特徴的である。tmpディレクトリに対して

  • 親ディレクトリからそのディレクトリを参照するためにつけられた「tmp」という名前
  • そのディレクトリから自身を参照するためにつけられた「.」という名前
  • 子ディレクトリからそのディレクトリを参照するためにつけられた「..」という名前

なお、ハードリンク「..」はそのディレクトリが持つ子ディレクトリと同数が存在する。

Windowsにおいては、WindowsNT3.1からファイルに対するハードリンクをサポートした。その方法はWindows XP以降ではコマンドプロントにて

  • fsutil hardlink create "新しく作られるファイルのパス" "元データとなるファイルのパス"

と入力する。