ハードリンクの逆参照


22

tarコマンドのマニュアルページには、ハードリンクをたどるオプションがリストされています。

-h, --dereference
      follow symlinks; archive and dump the files they point to

--hard-dereference
      follow hard links; archive and dump the files they refer to

tarファイルがハードリンクであることをどのようにして知るのですか?それどのように続きますか?

このオプションを選択しないとどうなりますか?どのようにしていないハード逆参照?

回答:


24

デフォルトでは、tarハードリンクを含むファイルをアーカイブするように指示し、そのようなリンクがアーカイブするファイルに複数含まれている場合、ファイルを1回だけアーカイブし、2番目(および追加の名前)をハードリンクとして記録します。つまり、そのアーカイブを抽出すると、ハードリンクが復元されます。

この--hard-dereferenceオプションを使用する場合、ハードリンク保持されtarませ。代わりに、偶然同じコンテンツとメタデータを持つ独立したファイルとしてそれらを扱います。アーカイブを抽出すると、ファイルは独立します。

注:最初にファイルのリンクカウントをチェックすることにより、ハードリンクを認識します。複数のリンクを持つ各ファイルのデバイス番号とiノードを記録し、それを使用して同じファイルが再びアーカイブされていることを検出します。(を使用する場合--hard-dereference、これは行われません。)


7

ハードリンクが設定されたファイルと、「リンクカウント」が設定されたハードリンクされていないファイルを区別できます。コマンドラインからこれを取得する方法は2つあります。

% stat original
  File: ‘original’
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 804h/2052d      Inode: 932815      Links: 2
Access: (0644/-rw-r--r--)  Uid: (  500/ bediger)   Gid: ( 1000/ bediger)
Access: 2012-07-13 22:13:52.317101530 -0600
Modify: 2012-07-13 22:13:52.317101530 -0600
Change: 2012-07-13 22:14:08.050894536 -0600
 Birth: -

または

1010 % ls -li 
total 0
932815 -rw-r--r-- 2 bediger bediger 0 Jul 13 22:13 original
932815 -rw-r--r-- 2 bediger bediger 0 Jul 13 22:13 secondary

「bediger」の前の孤独な「2」がリンク数です。両方のファイル名には同じiノード番号932815があることに注意してください。

これらのコマンドはどちらも、struct statのst_nlinkフィールドからリンクカウントを取得しstat()ます。これは、システムコールによって入力されます。

私が知る限り、「で実行」tar--hard-dereferenceは、2つの異なるファイル名を持つ単一のファイルを取得する代わりに(上記の例のように)、それぞれが1つのファイル名を持つ2つのファイルを取得することを意味します。 tarおそらく各ファイルのリンク数をチェックし、デフォルトでは、抽出時に、ハードリンクされたファイルデータの2番目のファイル名にハードリンクを作成します。--hard-dereferenceアーカイブの作成時に呼び出されると、抽出の呼び出しがtar実行されるときに、2番目のファイル名に対してまったく新しいファイルが作成されるように見えます。


今では、「ハードリンクをたどる」という言葉は間違っていると理解しています。ありがとうございました。しかし、2つの同一ファイルの1つがアーカイブされていない場合はどうでしょうか?このような場合、リンクカウントは誤解を招きます。
ムーサ

2
「2つの同一ファイル」ではなく、2つの名前を持つ1つのファイルです。tarがアーカイブしないファイルは同じです。デフォルトでは、tarはおそらく、ファイルシステムと同じように、2番目のファイル名から最初のファイル名まで、何らかの「ポインター」を保持します。
ブルースエディガー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.