Der Befehl mv löschte die Quelldateien, obwohl die Datei nicht vollständig verschoben wurde

772
Eli O

Ich habe den Befehl mv verwendet, um mehrere Dateien aus dem Verzeichnis A in das Verzeichnis B zu verschieben. Das Dateisystem, in dem sich das Verzeichnis B befindet, war voll, sodass ich entsprechende Meldungen erhielt. Dateien wurden jedoch leer verschoben (Größe 0) und Quelldateien wurden gelöscht. Also habe ich praktisch alle Dateien verloren, die ich verschieben wollte. Ist es so, wie es sich verhalten sollte?

0
Haben Sie sich innerhalb desselben Dateisystems oder zwischen verschiedenen Dateisystemen bewegt? Barmar vor 7 Jahren 0
Soweit ich das beurteilen kann, sollte dies nicht passieren. Siehe http://unix.stackexchange.com/questions/76727/mv-hat-failed-nur-von-nicht genug-diskspace-what-now und http://unix.stackexchange.com/questions/43014/what -does-mv-do-in-case-of-errors / 43017 # 43017 Barmar vor 7 Jahren 0
Nein, es ist nicht so, wie es sich verhalten sollte, aber vielleicht haben Sie in "mv" einen Fehler in dem von Ihnen verwendeten Linux gefunden. Sie sollten keine Zieldateien für Fehler haben, keine Dateien mit der Länge Null. Alternativ kann es ein Problem mit den Treibern für das Zieldateisystem geben. AFH vor 7 Jahren 1
Es sollte sich nicht so verhalten - in gewissem Sinne: Niemand möchte, dass es sich so verhält. Ich denke, eine andere Erklärung (neben einem Fehler in "mv") ist ein fehlerhaftes / unzuverlässiges Zieldateisystem. Was auch immer es war, das warf Nachrichten an Sie, aber "mv" glaubte, dass alles gut gelaufen ist. Kamil Maciorowski vor 7 Jahren 0
Haben Sie von einer Partition zu einer anderen gewechselt (entweder auf einem Laufwerk oder auf einem anderen Laufwerk)? Das ist der einzige Fall, in dem dies hätte passieren können. Könnten Sie den vollständigen Befehl "mv", den Sie verwendet haben, sowie die vollständigen Pfade von "src" und "dst" und eine Ausgabe von "sudo mount" angeben? prateek61 vor 7 Jahren 0

1 Antwort auf die Frage

1
anotherguy

Hast du dich über einen Bergpunkt bewegt? Normalerweise funktioniert mv einfach mit dem Umbenennen einer Datei. Der vollständige Name einer Datei enthält den absoluten Pfad. Aus diesem Grund sind das Umbenennen und Verschieben derselbe Befehl.

Befindet sich der neue Speicherort jedoch unter einem anderen Mountpunkt als der ältere, kann das Umbenennen nicht funktionieren, da sich die Datei physisch in einer anderen Partition befindet.

Was mv in diesem Fall macht, kopiert und löscht die Datei im Hintergrund. Diese Operation ist jedoch nicht so zuverlässig, wie ich aus eigener Erfahrung erfahren habe. Es wird nicht immer überprüft, ob das Kopieren erfolgreich ist, bevor Sie es löschen.

Um ehrlich zu sein, es ist völlig überflüssig für mv, sich sogar so zu verhalten, wenn Sie einfach den Befehl cp gefolgt von dem Befehl rm verwenden, wenn Sie Informationen über Einhängepunkte übertragen.

Durch das Erzeugen eines einfachen Befehls, der hinter den Kulissen Magie ohne Wissen des Benutzers ausführen soll, haben die Verfasser des Befehls ein weniger transparentes System erstellt, zusätzlich zu einer weiteren Fehleranfälligkeit.

Ich habe nicht umbenannt, ich habe nur Dateien aus dem Hauptverzeichnis in das Archivverzeichnis verschoben. Eli O vor 7 Jahren 0