Ich bin ein Doktorand mit Zugang zu einem Linux-Cluster einer Forschungsgruppe an meiner Universität. Im Laufe der Jahre habe ich viele Verzeichnisse gesammelt - ich denke, "Ordner" sind Windows / Mac-Terminologie? - in meinem Home-Verzeichnis ( ~
). Wenn ich an einer neuen Simulation arbeite, erstelle ich ein neues Verzeichnis in meinem Ausgangsverzeichnis mit mkdir
und führe dann die Simulation in diesem Verzeichnis aus.
Aber im Laufe der Zeit habe ich viele solcher Verzeichnisse in meinem Home-Verzeichnis gesammelt. Jetzt möchte ich einige der Verzeichnisse in das Unterverzeichnis verschieben. Beispielsweise möchte ich möglicherweise ein neues Verzeichnis mit dem Namen erstellen simulations1_10
und dann die Verzeichnisse simulation1
,, simulation2
... simulation10
in dieses Verzeichnis verschieben, damit das Stammverzeichnis meines Ausgangsverzeichnisses besser organisiert ist.
Dafür könnte ich verwenden cp
. Zum Beispiel:
cp -r simulation1/ simulations1_10/
würde das Verzeichnis simulation1
(und seinen gesamten Inhalt) in das Verzeichnis kopieren simulations1_10
. Ich könnte dann entfernen simulation1
.
Aber, meine Transfers sind nicht überqueren Dateisystem Grenzen, so mv
ist viel schneller als cp
. ( mv
Natürlich kann ich auch den Schritt zum Entfernen vermeiden.) Zum Beispiel:
mv simulation1/ simulations1_10/
hat schnell den Trick (und im Gegensatz cp
, mv
ist rekursiv Standard). Nach dieser Antwort auf diese Frage , mv
ist viel schneller , weil es „nur die Inode - Datenbank in verschiedenen Verzeichnissen aktualisiert.“
Meine Frage ist, gibt es irgendwelche Gefahren bei der Verwendung mv
?
Ich denke, dass eine Gefahr darin besteht, dass die Datei sowohl in der Quelle als auch im Ziel beschädigt wird, wenn sie während einer Übertragung mv
unterbrochen wird (aufgrund eines Stromausfalls, Drücken des Benutzers Ctrl+ Cusw.) . Ist das richtig?
Wenn ich mv
viel benutze , besteht dann die Möglichkeit, dass die "Inode-Datenbank" zu oft aktualisiert wird, was zu Festplattenfragmentierung oder anderen Festplatten- / Dateisystemproblemen führt?
Antworten:
Die
rename
Funktion (das liegt unter dem Befehlmv
, „The Utility mv Aktionen ausführen soll äquivalent die Umbenennungs () -Funktion“ ) ist atomar (siehe POSIX http://pubs.opengroup.org/onlinepubs/009695399/functions/rename.html , dass bezieht sich auf den C-Standard):(Beachten Sie jedoch die folgenden Vorsichtsmaßnahmen: https://unix.stackexchange.com/a/322074/88983 .)
Unterbrochene Vorgänge, sei es durch Strg-C oder auf andere Weise, sollten niemals zu teilweise übertragenen Dateien führen. Wie Sie bereits erwähnt haben,
mv
kopiert ein einzelnes Dateisystem tatsächlich keinen Dateiinhalt, sondern nur Dateimetadaten. Das Schlimmste, was an dieser Front passieren sollte, ist, teilweise verschobene Verzeichnisse zu sehen (wenn Sie dies tunmv a b c dest
, ist es möglich, zu unterbrechen und nur zBa
zu verschiebendest
, aber alle Dateien und deren Inhalte wurden ordnungsgemäß verschoben), nicht teilweise verschoben Dateien.Zu Ihrer Inode-Nebenfrage würde ich sagen, dass dies im Allgemeinen kein Problem darstellt. Das Aktualisieren von Inodes, um nur wenige Verzeichnisse zu verschieben, ist eine Routineoperation mit geringem Overhead (Schreibvorgänge für Dateiinhalte, die auf demselben Dateisystem ausgeführt werden, sollten je nach Dateisystemtyp einen viel größeren potenziellen Leistungseinbruch oder eine Fragmentierungsursache darstellen).
quelle
cp
möglicherweise tatsächlich mehr Fragmentierung usw. verursacht wird alsmv
?