Wie verschiebe ich Verzeichnisse mit gemeinsamen Dateien von einer Partition auf eine andere?
Nehmen wir an, wir haben eine Partition /mnt/X
mit Verzeichnissen gemountet, die Dateien mit Hardlinks gemeinsam nutzen. Wenn Sie solche Verzeichnisse auf eine andere Partition verschieben möchten, müssen Sie /mnt/Y
diese Hardlinks beibehalten.
Zur besseren Veranschaulichung, was ich unter "Verzeichnisse, die Dateien gemeinsam mit Hardlinks nutzen" verstehe, ist hier ein Beispiel:
# let's create three of directories and files
mkdir -p a/{b,c,d}/{x,y,z}
touch a/{b,c,d}/{x,y,z}/f{1,2,3,4,5}
# and copy it with hardlinks
cp -r -l a hardlinks_of_a
Um genauer zu sein, nehmen wir an, dass die Gesamtgröße der Dateien 10 GB beträgt und jede Datei 10 Hardlinks hat. Die Frage ist, wie man es mit 10G ans Ziel verschiebt (jemand könnte sagen, dass es mit 100G kopiert und dann die Deduplizierung ausgeführt wird - es ist nicht das, wonach ich frage).
rsync bietet hierfür die Option
-H
oder--hard-links
und die üblichen Vorteile von rsync, da es angehalten und neu gestartet werden kann und erneut ausgeführt werden kann, um alle Dateien, die während oder nach der vorherigen Ausführung geändert wurden, effizient zu verarbeiten.Lesen Sie die
rsync
Manpage und suchen Sie nach -H. Es gibt dort viel mehr Details zu bestimmten Vorbehalten.quelle
man rsync
: Ab rsync 3.0.0 ist der verwendete rekursive Algorithmus jetzt ein inkrementeller Scan, der viel weniger Speicher als zuvor benötigt und die Übertragung startet, nachdem die ersten Verzeichnisse gescannt wurden. Dieser inkrementelle Scan wirkt sich nur auf unseren Rekursionsalgorithmus aus und ändert keine nicht rekursive Übertragung. Es ist auch nur möglich, wenn beide Enden der Übertragung mindestens Version 3.0.0 sind. Beachten Sie, dass beide--delete-before
und--delete-after
deaktivieren Sie diesen verbesserten Algorithmus.rsync
es unglaublich nützlich ist, ist es nicht immer das beste Werkzeug für jeden Job. Heutzutage bevorzuge ich die Verwendung von ZFS-Datasets, damit ich Snapshots undzfs send
diese erstellen kann. Meistens verwende ich rsync auf Nicht-ZFS-Dateisystemen.btrfs
hat eine ähnliche Schnappschuss- und Sendefunktion.Dritte Antwort: Der POSIX-Weg
POSIX hat das
tar
Dienstprogramm nicht standardisiert , obwohl es dastar
Archivformat standardisiert hat . Das POSIX-Dienstprogramm zum Manipulieren von Tar-Archiven wird aufgerufenpax
und verfügt über die Bonusfunktion, dass das Packen und Entpacken in einem einzigen Vorgang durchgeführt werden kann.quelle
Zweite Antwort: The Ancient UNIX Way
Erstellen Sie ein tar-Archiv im Quellverzeichnis, senden Sie es über eine Pipe und entpacken Sie es im Zielverzeichnis.
quelle
tar
Hardlinks erhalten bleiben. Zumindest in GNU tar können Sie dieses Verhalten mit--hard-dereference
tar x
nicht die vollständige Dateiliste hat, da die Dateien immer noch von der eingespeist werdentar c
. Wenn Sie das gesamte Archiv vor dem Extrahieren gespeichert haben, ist dies wahrscheinlich in Ordnung. Ich würde mich sehr freuen, wenn jemand diese Theorie bestätigen könnte.Quelle: http://www.cyberciti.biz/faq/linux-unix-apple-osx-bsd-rsync-copy-hard-links/
Was Sie brauchen, um eine exakte Kopie zu erstellen, ist
quelle