Was macht mv im Fehlerfall?

18

Ich habe gerade versucht, einen großen Baum von einer Scheibe auf eine andere zu verschieben, was zu klein war. Jetzt bleibt mir etwas übrig, das ich nicht wirklich verstehen kann - es sieht so aus, als ob einige Dateien tatsächlich aus dem Quellbaum entfernt wurden, während andere nur kopiert wurden. Dies ist höchstwahrscheinlich nicht wahr, und ich übersehen nur etwas, wie ich es getan habe, als ich den freien Platz auf der Zieldiskette überprüft habe. : D

Der Befehl lautete einfach mv source-dir destination-dir: Beide Verzeichnisse befinden sich auf unterschiedlichen Datenträgern. Ich benutze mv (GNU coreutils) 7.4. Nirgendwo auf der Manpage habe ich die Antworten auf die folgenden Fragen gefunden:

  • Können abgeschnittene Dateien erstellt werden?
  • Wird im Fehlerfall irgendetwas im Quellbaum gelöscht?
  • Wie kann ich mich (auf einfache und schnelle Weise) erholen?
maaartinus
quelle

Antworten:

8

Ich denke, das Intro der infoSeite beantwortet alle Ihre Fragen:

Es wird zunächst der gleiche Code verwendet, der von "cp -a" zum Kopieren der angeforderten Verzeichnisse und Dateien verwendet wird, und dann (vorausgesetzt, die Kopie war erfolgreich) werden die Originale entfernt. Wenn das Kopieren fehlschlägt, wird der Teil entfernt, der auf die Zielpartition kopiert wurde. Wenn Sie drei Verzeichnisse von einer Partition in eine andere kopieren und das Kopieren des ersten Verzeichnisses erfolgreich war, das zweite jedoch nicht, verbleibt das erste auf der Zielpartition und das zweite und dritte auf der ursprünglichen Partition.

Die Wiederherstellung sollte kein Problem darstellen, da die Daten erhalten bleiben. Ich weiß nicht, wie viel es versucht, atomar zu sein ( mkdirz. B. ist; Quellcodeinspektion erforderlich) oder ob es sich überhaupt um eine Domäne handelt (im Gegensatz zum Kernel), aber es kann zu Beschädigungen kommen, wenn die Unterbrechung auftritt, wenn die Datei bereits gelöscht wird Quelle. Zu diesem Zeitpunkt hätten Sie bereits eine gute Kopie im Zielverzeichnis, sodass eine einfache Überprüfung der Bytegröße den Trick ausführen könnte.

BEARBEITEN: Ich habe einige Tests mit riesigen Dateien (ein paar G) durchgeführt, die mit erstellt wurden dd, aber keine abschließenden Ergebnisse lieferten. Ich habe es nie geschafft, nur einige der Quellen zu kopieren. Entweder habe ich den gesamten Vorgang abgebrochen (weil ich zu schnell war) oder danach keine Chance mehr aufgrund von Festplatten-Caching und vielleicht gutem Dateisystem-Design (mein ^ C landete immer, nachdem der Umzug erfolgreich war) ).

lynxlynxlynx
quelle
1
Verstehe ich in Bezug auf die Infoseite, dass sie für jedes Befehlszeilenquellverzeichnis entfernt wird, wenn die entsprechende Kopie erfolgreich war? Ich meine, das mv src1 src2 dstfunktioniert in dieser Hinsicht ähnlich mv src1 dst; mv src2 dstund jeder einzelne mv src dstist wie cp -a src dst && rm -rf src?
Maaartinus
1
So verstehe ich es auch (nur Ihre MV wäre mv && mv). Da cp -aes bereits rekursiv ist, bezweifle ich, dass es für einzelne Dateien und Verzeichnisse gilt, die beim Durchlaufen des Baums gefunden wurden. Ich werde später einige Tests machen.
Lynxlynxlynx
12

Wenn mv in ein anderes Dateisystem wechselt, kopiert es zuerst alle Daten in das neue Dateisystem. Sobald die neuen Daten kopiert wurden, werden die alten Daten entfernt. Dies bedeutet, dass der Quellspeicherort auch dann alle Daten enthalten sollte, wenn das Verschieben unterbrochen wird oder fehlgeschlagen ist.

Bei der Wiederherstellung sollten nur die Zieldaten beschädigt sein. Anstatt erneut mv zu verwenden, verwenden Sie einfach rsync und dann rm manuell

rsync -av source-dir/ dest-dir/
rm -rf source-dir
Jordanien
quelle