Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

ハードリンク(ハードリンク)とは | 意味や読み方など丁寧でわかりやすい用語解説

ハードリンク(ハードリンク)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

読み方

日本語表記

ハードリンク (ハードリンク)

英語表記

hard link (ハードリンク)

用語解説

ハードリンクとは、ファイルシステムにおいて、一つのファイルの実体に対して複数の異なる名前(パス)を付与する仕組みである。通常、ファイルは一つの名前と一つの実体を持つが、ハードリンクを用いることで、同じファイルシステム内の同じファイルに複数の入り口や参照パスを作成できる。これにより、あたかも複数の場所に同じファイルが存在するかのように扱えるが、実際にはディスク上のデータは一つであり、ディスク容量を無駄にすることなく、ファイルを複数のパスから参照可能にする。これは、ファイルの実体を指し示すための内部的な識別子(iノード)を複数の名前が共有することによって実現される。

ファイルシステムは、ディスク上にデータを効率的に保存し、管理するための構造である。ここで重要な要素が「iノード(inode)」と「データブロック」である。データブロックは実際にファイルの内容(データ)が保存される最小単位の領域を指し、iノードはファイルに関するメタデータ(ファイルの所有者、アクセス権、最終更新日時、ファイルサイズなど)と、そのファイルが使用しているデータブロックの位置情報を持つ。つまり、ファイルの実体はデータブロックにあり、iノードは「このファイルがどこに、どんな情報で保存されているか」という情報を管理する索引のような役割を果たす。

通常のファイル作成時、ファイルシステムは新しいiノードを割り当て、データブロックにファイルの内容を書き込み、そしてそのiノードを指し示すファイル名をディレクトリ内に登録する。ハードリンクを作成する際にも、新しいiノードは割り当てられない。その代わりに、既存のファイルのiノードを指し示す新しいファイル名をディレクトリ内に登録する。このとき、ファイルシステムはそのiノードに対する参照カウント(リンクカウントとも呼ばれる)を一つ増加させる。この参照カウントは、そのiノードを指し示す名前がいくつ存在するかを示す数値である。

例えば、fileAというファイルを作成すると、iノードXが割り当てられ、参照カウントは1になる。その後、ln fileA fileBというコマンドでfileBというハードリンクを作成すると、fileBもiノードXを指し示すようになり、iノードXの参照カウントは2になる。この状態では、fileAfileBは全く同じファイルの実体を参照している。どちらかのパスからファイルを編集すれば、もう一方のパスからアクセスしてもその変更が反映される。これは、両者が同じデータブロック群を共有しているためである。

ファイルの削除は、通常、rmコマンドなどで行われるが、これは単にディレクトリからファイル名とiノードの関連付けを解除する操作である。同時に、関連付けが解除されたiノードの参照カウントを1減らす。参照カウントが0になった時、ファイルシステムはそのiノードがもはやどのファイル名からも参照されていないと判断し、iノードとそれが指し示していたデータブロックを解放して、ディスク領域を再利用可能にする。したがって、ハードリンクが存在するファイルの場合、一つの名前を削除しても、参照カウントが0にならない限り、ファイルの実体(データブロック)はディスク上から消去されない。すべてのハードリンクが削除され、参照カウントが0になったときに初めてファイルは完全に削除される。

ハードリンクにはいくつかの特性と制限がある。最も重要な制限は、異なるファイルシステム間ではハードリンクを作成できないという点である。iノードの識別子はファイルシステムごとに独立して割り当てられるため、別のファイルシステムのiノードを指し示すことはできない。また、ディレクトリに対してハードリンクを作成することはできない。これは、ディレクトリへのハードリンクを許可してしまうと、ファイルシステムのディレクトリ構造に循環参照が生じ、整合性の維持やパスの解決が複雑化し、困難になるためである。これらの制限は、ファイルシステムの安定性と管理の単純さを保つために設けられている。

ハードリンクの主な利点は、ディスク容量を節約しながら、一つのファイルを複数の場所からアクセスさせたい場合に有効である点だ。例えば、特定の重要な設定ファイルや共有ライブラリなど、同じファイルが複数のアプリケーションやユーザーから参照される必要があるが、それぞれがコピーを持つとディスク容量が無駄になり、更新時に全てのコピーを同期させる手間が発生するようなシナリオで役立つ。ハードリンクであれば、元のファイルを更新するだけで、全ての参照元に最新の変更が反映される。また、あるディレクトリから特定のファイルを移動せずに、別のディレクトリからも同じファイルを扱いたい場合にも便利である。これは、ファイルのバックアップにおいて、ファイルの実体をコピーするのではなく、ハードリンクとして参照を作成することで、容量を節約しつつ、元のファイルが削除されても参照側のパスからアクセスを継続させるといった一時的な利用法も考えられる。ハードリンクは、ファイルシステムにおける柔軟なファイル管理を可能にする重要な機能の一つである。

関連コンテンツ