Was passiert, wenn fest verknüpfte Dateien mit „mv“ zwischen Dateisystemen verschoben werden?

Was passiert, wenn fest verknüpfte Dateien mit „mv“ zwischen Dateisystemen verschoben werden?

Ich habe eine Sammlung von Ordnern auf einem Dateisystem, die fest miteinander verknüpft sind (der Inhalt ist identisch).

Was passiert, wenn ich einen der Ordner in ein anderes Dateisystem auf einer anderen Festplatte verschiebe?

Ich verwende Mac OSX Snow Leopard und den Befehlszeilenbefehl mv.

Antwort1

Nein, die mvStandardeinstellungnichtHardlinks beibehalten:

~$ welches mv
/bin/mv
~$ uname -a
Darwin mini.local 13.4.0 Darwin Kernel Version 13.4.0: So., 17. Aug. 2014, 19:50:11 PDT; root:xnu-2422.115.4~1/RELEASE_X86_64 x86_64

~$ cd /Volumes/Backup\ primär/
Primäres Backup$ mkdir test
Primäre Sicherung$ cd test/
test$ echo foo > a
test$ ln ab
test$ ls -li ab
14271856 -rw-r--r-- 2 Benutzer Mitarbeiter 4 Okt 15 19:23 a
14271856 -rw-r--r-- 2 Benutzer Mitarbeiter 4 Okt 15 19:23 b
test$ cd ..
Primäres Backup$ mv test ../Sekundäres Backup/
Primäre Sicherung$ ls -li ../Backup\ sekundär/test/
insgesamt 32
11040478 -rw-r--r-- 1 Benutzer Mitarbeiter 4 Okt 15 19:23 a
11040479 -rw-r--r-- 1 Benutzer Mitarbeiter 4 Okt 15 19:23 b

Antwort2

Notiz

Ordner auf einem Dateisystem, die fest miteinander verknüpft sind

Normalerweise unter UnixDas Hardlinken von Verzeichnissen wird nicht unterstützt.. Ich nehme an, Sie meinen „Dateien in einem Verzeichnis sind Hardlinks zu Dateien in einem anderen Verzeichnis“.


mvVerhalten

Angenommen, Sie haben viele Dateien, die fest miteinander verknüpft sind, d. h. viele Pfade, die zu denselben Daten führen, die einmal im Dateisystem gespeichert sind.

Vergleichendiese Unix- und Linux SE-AntwortDer relevante Teil:

Eine Verschiebung zwischen Dateisystemen (egal, ob auf demselben physischen Medium oder nicht) wird wie ein Dateikopiervorgang gefolgt von einem Löschvorgang behandelt. Genau das mvmacht der Befehl. Das bedeutet natürlich, dass das Zieldateisystem eine neue Kopie der Datei erstellen muss.

Nachdem eine Kopie erstellt wurde, mvwird die Quelle ähnlich wie entfernt rm.Dasgilt:

rmlöscht einfach den Zeiger. Wenn Sie mehrere Zeiger auf die Datei haben (Hardlinks), rmbleiben die anderen Zeiger beim Löschen eines dieser Zeiger völlig unberührt und die Daten sind weiterhin verfügbar.

Wenn Sie also einige der fest verknüpften Dateien in ein anderes Dateisystem verschieben,andere Hardlinks sind sicher. Hardlinks können nicht über Dateisysteme hinweg existieren, die neue Kopie kann also kein Hardlink zu irgendetwas sein, das noch auf dem Quelldateisystem vorhanden ist.

Wenn Sie alle fest verknüpften Dateien verschieben, verschwinden sie alle aus dem Quelldateisystem und erscheinen im Zieldateisystem. Beachten Sie, dass selbst bei einer einzelnen mv(Verschieben mehrerer Dateien) jede neue Datei separat erstellt wird.nicht mehrfest miteinander verknüpft sein. Theoretisch mvkönnte man zusätzliche Arbeit leisten, um Hardlinks zu erkennen und sie im Zieldateisystem neu zu erstellen, aber das funktioniert einfach nicht (wie indies ist eine andere Antwort).


Verschieben von Hardlinks, um Hardlinks zu erhalten

Es gibt andere Tools, die Hardlinks neu erstellen, tardies ist eines davon (obwohl ich nicht sagen kann, ob dies tarunter Mac OS X sicher ist). VergleichenDas:

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.

Beachten Sie, dass Hardlinks zwischen den wiederhergestellten Dateien wiederhergestellt werden (d. h. sie ahmen die Hardlink-Verbindungen der Quelle nach), die wiederhergestellten Dateien jedoch nie erneut mit den Quelldateien (oder ihren möglicherweise noch vorhandenen Hardlinks) verknüpft werden, selbst wenn sie in dasselbe Dateisystem extrahiert werden, taraus dem sie stammen.

Um die Vorteile nutzen zu können, tarohne ein großes Archiv zu erstellen, benötigen Sie einige Shell-Tricks. Beispiel:

tar -c /source/dirA/ /source/file1  | { cd /foo/destination/ && tar -x; }

Der Befehl führt das Kopieren ohne Löschen durch. Wenn Sie die Quelle löschen müssen, tun Sie dies ggf. mit einem separaten Befehl.

verwandte Informationen