Dereferenzierung von Hardlinks

Dereferenzierung von Hardlinks

Auf der Manualpage des tarBefehls ist eine Option zum Folgen von Hardlinks aufgeführt.

-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

Wie tarerkennt man, dass eine Datei ein Hardlink ist? Wie erkennt manfolgenEs?

Was passiert, wenn ich diese Option nicht wähle? Wie funktioniert esnichtHarte Dereferenzierung?

Antwort1

Wenn Sie eine Datei mit Hardlinks archivieren möchten und mehrere solcher Links zu den zu archivierenden Dateien gehören, wird die Datei standardmäßig tarnur einmal archiviert und die zweite (und alle weiteren Namen) als Hardlinks aufgezeichnet. Das bedeutet, dass die Hardlinks wiederhergestellt werden, wenn Sie das Archiv extrahieren.

Wenn Sie die --hard-dereferenceOption verwenden, tardannnichtHardlinks werden beibehalten. Stattdessen werden sie als unabhängige Dateien behandelt, die zufällig denselben Inhalt und dieselben Metadaten haben. Wenn Sie das Archiv extrahieren, sind die Dateien unabhängig.

Hinweis: Hardlinks werden erkannt, indem zunächst die Anzahl der Links der Datei überprüft wird. Gerätenummer und Inode jeder Datei mit mehr als einem Link werden aufgezeichnet, um zu erkennen, wann dieselbe Datei erneut archiviert wird. (Wenn Sie verwenden --hard-dereference, geschieht dies nicht.)

Antwort2

Sie können eine Datei mit Hardlink(s) von einer Datei ohne Hardlink anhand der „Linkanzahl“ unterscheiden. Ich sehe zwei Möglichkeiten, dies über die Befehlszeile zu erreichen:

% 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: -

Oder

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

Die einsame „2“ vor „bediger“ ist die Linkanzahl. Beachten Sie, dass beide Dateinamen dieselbe Inode-Nummer haben, nämlich 932815.

Ich bin sicher, dass beide Befehle die Anzahl der Links aus dem Feld „st_nlink“ der Struktur „stat“ erhalten, das durch einen stat()Systemaufruf ausgefüllt wird.

Soweit ich es beurteilen kann, bedeutet die Ausführung tarmit --hard-dereference, dass Sie statt einer einzelnen Datei mit zwei unterschiedlichen Dateinamen (wie im obigen Beispiel) zwei Dateien mit jeweils einem einzigen Dateinamen erhalten. tarprüft wahrscheinlich die Anzahl der Links für jede Datei und erstellt standardmäßig beim Extrahieren einen Hardlink für den zweiten Dateinamen, den es für die hart verknüpften Dateidaten hat. Wenn es bei --hard-dereferenceder Archiverstellung mit aufgerufen wird, scheint es eine völlig neue Datei für den zweiten Dateinamen zu erstellen, wenn der Extraktionsaufruf von tarausgeführt wird.

verwandte Informationen