Skip to content
Latchkey

ハードリンクとは? 1つのファイルへの2つ目の名前

ハードリンクは、別の名前と同じ基盤ファイルデータそのものを指し示す追加の名前(ディレクトリエントリ)であり、パスを指すものではありません。

パスを指し示すシンボリックリンクとは異なり、ハードリンクはディスク上のまさに同じファイルデータへの2つ目の名前です。両方の名前は対等です。一方を削除しても、別の名前が残っている限りデータは無傷のままです。ハードリンクは、一部のパッケージマネージャーやcacheが使う高速で省スペースなコピーといった機能を支えています。

ハードリンクとは何か

ディスク上では、ファイルデータはinodeによって追跡され、ファイル名はそのinodeへのポインタにすぎません。ハードリンクは同じinodeを指す2つ目のファイル名であり、両方の名前が同一のデータを参照します。

作成する

ハードリンクはln target linkname(-sなし)で作成します。その後、両方の名前は同格です。同じinodeを共有しているため、意味のある意味での「オリジナル」は存在しません。

ハードリンク対シンボリックリンク

  • ハードリンクはinodeを共有し、シンボリックリンクはパスを格納します。
  • ハードリンクされた名前の一方を削除しても、もう一方を通じてデータは残ります。
  • ハードリンクは通常、ファイルシステムをまたいだりディレクトリをターゲットにしたりできません。

ハードリンクが役立つ理由

データが共有されるため、ハードリンクは追加スペースをほとんど消費しません。ツールはこれを利用してファイルを瞬時に「コピー」します。これは一部のパッケージマネージャーが依存関係ツリーを安価に作成する方法です。

CIにおけるハードリンク

pnpmのようなパッケージマネージャーはハードリンクを使って依存関係を重複排除し、ディスクと時間を節約します。そのようなstoreをcacheする際、cacheはリンク構造を保持する必要があります。さもないとリストアされたinstallがサイズ的に膨れ上がったり壊れたりすることがあります。

マネージドrunnerでの重複排除されたinstall

Latchkeyのrunnerでは、ハードリンクベースの依存関係storeは、cacheがリンクを無傷に保つと最も速くリストアされます。cacheがハードリンクを保持することを検証すれば、installを高速かつ正確に保てます。

重要なポイント

  • ハードリンクは、同じファイルデータ(inode)を指し示す2つ目のファイル名です。
  • シンボリックリンクと異なり、データを直接共有し、もう一方の名前を削除しても生き残ります。
  • CIでは、pnpmのようなツールがハードリンクを使って依存関係を効率的に重複排除します。

関連ガイド