ハードリンク
ファイルが与えられると、original.txt
ハードリンクはhardlink.txt
同じ inode を指し、original.txt
削除されても存在し続けます。
シンボリックリンク
fileが与えられると、original.txt
シンボリックリンクはsymlink.txt
そのファイル名を指します。
質問:どちらが速く、どちらが小さいですか?
私の直感では、ハードリンクが元のファイルと区別できないため、より高速になると思います。しかし、すべてはシンボリックリンクの速度に依存します。
また、どちらがハードドライブのスペースを占有しませんか?
次の質問のような測定ベースの答えを見たいです。これサイズと速度については簡単に言及しましたが、詳細には言及していません。
答え1
シンボリックリンクは、リンクされたファイルへのパスを含む新しいファイルを作成します。したがって、ターゲットファイル(リンクが指すファイル)のパス(相対または絶対)サイズに似た実際の新しいファイルを作成します。
ハードリンクは、ディレクトリに新しいエントリ(つまり、ディレクトリのinode / nameペアを実際に含む特別なファイル)を作成するだけで、新しいエントリは作成されません。特定のディレクトリがすでに「いっぱい」であるinode / name - ペアテーブルリンクエントリのスペースを確保するには、これを増やす必要があります(たとえば、1024から2048 KB)。
システムは2つのファイル、つまりリンクと実際のファイルを読み取る必要があるため、シンボリックリンクが長くかかるように見えます。 。物理ディスク。ハードリンクは実際のファイルのみを読み取ります。すべてのハードリンクは「同じように生成」され、一度作成されると、どのリンクが最初に出るかは問題ではありません(どのリンクが「ソース」であり、どちらが「宛先」か)。
答え2
シンボリックリンクはある程度間接的な効果を追加するため、ハードリンクよりもゆっくり開かれますが、一般的なユースケースでは大きな違いを生み出すには不十分です。
シンボリックリンクのディスクサイズは、ファイルシステムの実装によって異なります。 「高速シンボリックリンク」を使用して名前の保存を最適化する最新のファイルシステムと同じサイズであるか、特にリンクパス名が長すぎてファイルデータ構造に合わない場合は、少し大きいとします。
一度開くと、シンボリックリンクを使用してもハードリンクを使用しても、読み取り/書き込み操作には影響しません。
編集:シンボリックリンクは、リンクされたファイルのパスをどこかに保存する必要があります。当初、これはデータブロックで行われました。その後、ほとんどのファイルシステムは、パスがファイルデータ構造自体に格納され、読み取りスペースとディスクスペースを節約する高速シンボリックリンクを実装しました。