ハードリンク

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ

では、コンピューティングハードリンクがあるディレクトリエントリ(でディレクトリベースのファイルシステムに名前を関連付ける)ファイルすべてのファイルには、ファイルごとに少なくとも1つのハードリンクが必要です。追加のハードリンクを作成すると、1つのファイルに複数の名前(おそらく異なるディレクトリでも)を付ける効果があり、そのすべてがディスク上の同じデータに個別に接続します。[1]これにより、エイリアス効果が発生します。プロセスは、任意の名前でファイルを開き、その内容を変更できます。対照的に、ソフトリンクまたは「ショートカット」 ファイルへのリンクは、データ自体への直接リンクではなく、ハードリンクまたは別のソフトリンクへの参照です。

すべてのディレクトリはそれ自体が特別なファイルであり、ファイルシステムによって維持されるファイル名のリストが含まれているだけです。ディレクトリ自体はファイルであるため、ディレクトリへの複数のハードリンクが可能であり、ツリーのような分岐構造ではなく、循環ディレクトリ構造を作成する可能性があります。そのため、一部のファイルシステムでは、ディレクトリへのハードリンクの作成が禁止されています。

POSIX準拠のオペレーティング・システムのような、LinuxのアンドロイドMacOSの、およびWindows NTのファミリー[2]ファイル・システムに応じて、同じファイルに複数のハードリンクをサポートします。たとえば、NTFSはハードリンクをサポートしていますが、FATReFSサポートしていません。

操作

ハードリンクの概念の図解

「LINKA.TXT」と「LINKB.TXT」という名前の2つのハードリンクが同じ物理データを指すようにします。テキストエディタは、「LINK A.TXT」を開き、修正をして保存します。エディター(または他のアプリ)が「LINKB.TXT」を開くと、両方のファイル名が同じデータを指しているため、「LINKA.TXT」に加えられた変更を確認できます。

ただし、emacsなど、一部のエディターはハードリンクの概念を破っています。 「LINKB.TXT」などの編集用ファイルを開くと、emacsは「LINKB.TXT」の名前を「LINKB.TXT〜」に変更し、「LINK B.TXT〜」をエディターにロードして、変更した内容を保存します。新しく作成された「LINKB.TXT」へ。これで、「LINKA.TXT」と「LINKB.TXT」は同じデータを共有しなくなりました。 (この動作はemacs変数を使用して変更できますbackup-by-copying。)

物理データへのハードリンクはいくつでも作成できます。データにアクセスするには、ユーザーは既存のリンクの名前を指定するだけで済みます。オペレーティングシステムは、実際のデータの場所を解決します。ユーザーがハードリンクの1つを削除した場合でも、残っている他のリンクを介してデータにアクセスできます。ユーザーがすべてのリンクを削除した後、ファイルを開いているプロセスがない場合、オペレーティングシステムは、ファイルがかつて占有していたディスク領域を解放します。

参照カウント

典型的なUN * Xファイルシステム上のハードリンクの簡略図。ファイル「A」と「D」はどちらもファイルシステムのiノードテーブル内の同じインデックスエントリを指しているため、参照カウントは2になります。

ハードリンクをサポートするほとんどのファイルシステムは参照カウントを使用します。システムは、データを指すために作成されたハードリンクの総数を表す各論理データセクションに整数値を格納します。新しいリンクが作成されると、この値は1つ増加します。リンクが削除されると、値は1つ減少します。カウンタがゼロになると、オペレーティングシステムは論理データセクションを解放します。 (OSは、パフォーマンス上の理由から、またはundeleteコマンドを有効にするために、処理のファイルハンドルが開いている場合など、すぐにそうしない場合があります

ゼロ値は空き領域を示し、ゼロ以外の値は使用済み領域を示すため、これはファイルシステムが特定のストレージ領域の使用を追跡するための簡単な方法です。この値を維持することで、どこにもぶら下がっているハードリンクがないことが保証されます。データセクションと関連するiノードは、単一のハードリンク(ディレクトリ参照)がそれを指しているか、プロセスが関連ファイルを開いたままにしている限り、保持されます。

上のPOSIX準拠のオペレーティング・システム、ファイルまたはディレクトリの参照カウントがで返されるSTAT()内またはFSTAT()システムコールst_nlinkのフィールドstruct stat

制限事項

ファイルシステムのループを防ぎ、 " .."ファイル(親ディレクトリ)の解釈の一貫性を保つために、オペレーティングシステムはディレクトリへのハードリンクを許可していません。UNIX System Vはそれらを許可しましたが、そのようなリンクを作成する権限を持っていたのスーパーユーザーだけでした[3] のMac OS X 10.5(Leopardの)との新しい使用ディレクトリのハードリンクをタイムマシンのみバックアップメカニズム。[4]

ハードリンクは、同じボリューム上、つまり同じファイルシステム内のファイルにのみ作成できます。(ボリュームが異なればファイルシステムも異なる場合があります。ターゲットボリュームのファイルシステムがハードリンクと互換性があるという保証はありません。)

1つのファイルへのハードリンクの最大数は、参照カウンターのサイズによって制限されます。 Unixライクなシステムでは、カウンターは4,294,967,295(32ビットマシンの場合)または18,446,744,073,709,551,615(64ビットマシンの場合)です。一部のファイルシステムでは、ハードリンクの数はディスク上の形式によってより厳密に制限されます。たとえば、Linux 3.11の時点で、ext4ファイルシステムはファイル上のハードリンクの数を65,000に制限しています。[5] Windowsの制限により、NTFSボリューム上のファイルへのハードリンクは1024に制限されます[6]

のLinuxウィークリーニュース彼らはアーカイバとディスクの使用状況ツールを含むハンドルディレクトリツリー、というプログラムの設計を複雑にするので、ニール・ブラウンはハードリンクを批判したが、高メンテナンスとして批判されました。これらのアプリは、階層内で複数回リンクされているファイルの重複を排除するように注意する必要がありますBrownは、Unixの後継となる予定のBellLabsのPlan9には、ハードリンクの概念が含まれていないと述べています。[7]

プラットフォームのサポート

Windows NT 3.1以降は、NTFSファイルシステムでハードリンクをサポートしています[8] Windows 2000には、CreateHardLink()ハードリンクを作成する機能が導入されていますが、ディレクトリではなくファイルに対してのみです。[9]DeleteFile()機能は、それらを除去することができます。

Windowsでハードリンクを作成するには、エンドユーザーは次を使用できます。

ファイルのハードリンクを調べるために、エンドユーザーは次を使用できます。

  • fsutilユーティリティ[10]
  • PowerShellGet-ItemおよびGet-ChildItemコマンドレット。これらのコマンドレットは、各ファイルをオブジェクトで表します。PowerShellは、それぞれに読み取り専用のLinkTypeプロパティを追加します。HardLinkファイルに複数のハードリンクがある場合、このプロパティは「」を返します。[13]

Windowsコンポーネントストアは、ハードディスクドライブに保存されているコンポーネントの異なるバージョンを追跡するためにハードリンクを使用しています。

上のUnixライクなシステムでは、link() システムコールは、既存のファイルに追加のハードリンクを作成することができます。ハードリンクを作成するために、エンドユーザーは以下を使用できます。

  • LNのユーティリティ
  • リンクユーティリティ
  • New-ItemPowerShellコマンドレット[12]

ファイルのハードリンクを調べるために、エンドユーザーは次を使用できます。

  • statコマンド
  • ls -lコマンド
  • PowerShellGet-ItemおよびGet-ChildItemコマンドレット(上記を参照)[13]

CygwinSubsystemfor UNIXベースのアプリケーションなど、Microsoft Windowsで実行されているUnixライクなエミュレーションまたは互換性ソフトウェアを使用すると、POSIXインターフェイスを使用できます。

OpenVMは、ODS-5ファイルシステムでハードリンクをサポートしています[14] Unixとは異なり、VMSはディレクトリへのハードリンクを作成できます。

も参照してください

  • シンボリックリンク:ファイルデータ自体ではなく、ハードリンクを指します。したがって、ボリュームとファイルシステム全体で機能します。
  • NTFSリンク:NTFSがサポートする4つのリンクタイプ(ハードリンク、シンボリックリンク、ジャンクションポイント、およびボリュームマウントポイント)の詳細
  • ショートカット:ローカルまたはリモートの場所にある別のファイルを指す小さなファイル
  • freedupfreedupコマンドは、重複するデータストアを自動生成されたハードリンクに置き換えることにより、ディスク領域を解放します

参考文献

  1. ^ 投手、リュー。「Q&A:ハードリンクとソフトリンクの違い」
  2. ^ 「リンクシェル拡張」
  3. ^ バッハ、モーリスJ.(1986)。UNIXオペレーティングシステムの設計プレンティスホール。NS。128. ISBN 9780132017992
  4. ^ 池、ジェームズ(2013年8月31日)。「TimeMachineがその魔法をどのように機能させるか」ファイルシステムイベントストア、ハードリンク2019年5月19日取得
  5. ^ 「Linuxカーネルソースツリー、fs / ext4 / ext4.h、229行目」
  6. ^ 「CreateHardLinkA関数(winbase.h)」Windowsアプリ開発2021年10月13日– MicrosoftDocs経由
  7. ^ ブラウン、ニール(2010年11月23日)。「過去のUnixの幽霊、パート4:高メンテナンス設計」Linuxウィークリーニュース取得した20年4月2014
  8. ^ 「ハードリンクのしくみ」MicrosoftDocs
  9. ^ 「CreateHardLink関数」Windows開発Microsoft2011年7月2日に元から3月10日、2011年アーカイブ-経由MSDN既存のファイルと新しいファイルの間にハードリンクを確立します。この機能は、NTFSファイルシステムでのみサポートされており、ディレクトリではなくファイルでのみサポートされています。CS1 maint:不適切なURL(リンク
  10. ^ a b "Fsutilハードリンク"Windowsアプリ開発Microsoft2012年4月18日– MicrosoftDocs経由。
  11. ^ 「Mklink」MicrosoftDocsMicrosoft2012年4月18日。
  12. ^ a b "New-Item(PowerShell 3.0)"MicrosoftDocsMicrosoft2020年6月22日。場所がFileSystemドライブ内にある場合、次の値が許可されます。場所がFileSystemドライブ内にある場合、次の値が許可されます:File [、] Directory [、] Junction [、] HardLink
  13. ^ a b "FileSystemProvider.cs"PowerShell / PowerShellリポジトリMicrosoft11月20日2021行8139から8234 -経由GitHubの
  14. ^ 「OpenVMSシステムマネージャのマニュアル、第1巻」(PDF)VSI。2019年8月2021年1月23日取得