
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 mv
StandardeinstellungnichtHardlinks 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“.
mv
Verhalten
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
mv
macht der Befehl. Das bedeutet natürlich, dass das Zieldateisystem eine neue Kopie der Datei erstellen muss.
Nachdem eine Kopie erstellt wurde, mv
wird die Quelle ähnlich wie entfernt rm
.Dasgilt:
rm
löscht einfach den Zeiger. Wenn Sie mehrere Zeiger auf die Datei haben (Hardlinks),rm
bleiben 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 mv
kö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, tar
dies ist eines davon (obwohl ich nicht sagen kann, ob dies tar
unter 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
tar
nur 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, tar
aus dem sie stammen.
Um die Vorteile nutzen zu können, tar
ohne 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.