Umbenennen eines riesigen Ordners: Ist es riskant?

19

Ist es riskant, Ordner mit 180 GB mit dem mvBefehl umzubenennen ?

Wir haben einen Ordner /data, der 180 GB enthält.

Wir wollen den /dataOrdner /BD_FILESmit dem mvBefehl in umbenennen .

Ist das ungefährlich?

yael
quelle
14
Warum und wie sollte es riskant sein? Wenn Sie sich nicht sicher sind, rufen Sie mvmit der -iOption an.
Dessert
5
Gibt es irgendetwas in Ihrer Umgebung, das Sie zu der Annahme veranlasst, dass es riskant sein könnte?
Jeff Schaller
2
Meinen Sie damit, ob die Gefahr besteht, dass die Handlung an und für sich ein Problem verursacht, oder ob die Gefahr besteht, dass es problematische Auswirkungen gibt? Wenn Sie Programme haben, die einen / data-Ordner erwarten, kann das Umbenennen Probleme verursachen.
Akkumulation
3
Randnotiz: Fast alles ist sicher, wenn Sie Backups überprüft haben. Nichts ist so sicher, wie es sein sollte, wenn Sie es nicht tun. Mit anderen Worten: Bei der Frage "Ist es sicher?" Sollte Ihr erster Gedanke "Habe ich meine Backups überprüft?" Sein.
RedGrittyBrick
2
Ich meine, das Risiko, das problematisch sein könnte, wenn ein riesiger Ordner mit Daten von diesem Betriebssystem
verschoben wird,

Antworten:

71

Das Ändern des Namens eines Ordners ist sicher, wenn er sich im selben Dateisystem befindet.


Wenn es sich um einen Einhängepunkt handelt ( /datafür mich sieht es so aus, als wäre es ein Einhängepunkt, überprüfen Sie dies mit mount), müssen Sie etwas anderes als nur einen einfachen mvVorgang mv /data /BD_FILESausführen, da die Daten in die Root-Partition verschoben werden (was möglicherweise nicht der Fall ist) du willst passieren).

Sie sollten die /etc/fstabBereitstellung des Dateisystems aufheben , das jetzt leere Verzeichnis umbenennen, mit dem neuen Speicherort für dieses Dateisystem aktualisieren und dann das Dateisystem am umbenannten Speicherort erneut bereitstellen.

Mit anderen Worten,

  1. umount /data
  2. mv /data /BD_FILES(Angenommen, /BD_FILESes existiert noch nicht, dann schiebe es zuerst aus dem Weg.)
  3. Aktualisieren /etc/fstab, Ändern des Einhängepunkts von /dataauf/BD_FILES
  4. mount /BD_FILES

Dabei werden keine Dateien kopiert, sondern lediglich der Name des Verzeichnisses geändert, das als Mount-Punkt für das Dateisystem fungiert.


Wenn das Umbenennen des Verzeichnisses das Verschieben in ein neues Dateisystem umfasst (was der Fall wäre, wenn /datasich dieses auf einer Festplatte befindet, während /BD_FILESsich diese auf einer anderen Festplatte befindet, was häufig der Fall ist , wenn Sie beispielsweise Dinge auf eine größere Partition verschieben) Ich würde empfehlen, die Daten zu kopieren, während das Original intakt bleibt, bis Sie überprüfen können, ob die Kopie in Ordnung ist. Sie können dies mit tun

rsync -a /data/ /BD_FILES/

Lesen Sie jedoch im rsyncHandbuch nach, was dies bewirkt und was nicht (beispielsweise werden keine festen Links beibehalten).


Nach dem Umbenennen des Ordners müssen Sie auch sicherstellen, dass vorhandene Prozeduren (Programme und Benutzer, die den Ordner verwenden, Sicherungen usw.) über die Namensänderung informiert sind.

Kusalananda
quelle
9
Es besteht das Risiko, dass man damit rechnet mv, nur einen renameSystemaufruf auszuführen, aber aufgrund von Umständen, die man nicht bemerkt hat, werden die Dateien kopiert und das Original gelöscht. Wenn ich absolut sicher sein muss, dass nur ein renameSystemaufruf erfolgt und mvhinter meinem Rücken nichts "Kluges" geschieht, öffne ich eine Python-Shell und benutze sie os.rename.
Kasperd
3
Mit einem relativ neuen Linux-Kernel können Sie stattdessen den Mount-Punkt verschieben:mkdir /BD_FILES && mount -M /data /BD_FILES && rmdir /data
David Foerster,
2
@MichealJohnson Das wird wahrscheinlich auf einem Linux-System funktionieren, ja. Das rsyncSchöne daran ist, dass es neu gestartet werden kann.
Kusalananda
3
@MichealJohnson Man verwendet offensichtlich die Tools, die man am bequemsten benutzt. Ja, es werden rsync -afast alle Metadaten beibehalten, jedoch keine festen Links, ACLs oder erweiterten Attribute (dafür hinzufügen -HAX).
Kusalananda
3
@Max Unterschiedliche Distributionen haben unterschiedliche renameBefehle mit unterschiedlichem Verhalten. Ich denke, das ist Grund genug, den renameBefehl nicht zu verwenden, wenn Sie sicher sein möchten, was er tun wird.
Kasperd
16

Sie benennen nicht jede Datei im Verzeichnis um, sondern nur eine Datei in /. Das ist, weil:

  1. Verzeichnisse sind Dateien und
  2. Das Dateisystem kümmert sich wirklich um die Inode, nicht um den eigentlichen Text.

Das Umbenennen eines Verzeichnisses, egal wie viele Dateien oder wie viele Daten sich darin befinden, ist daher trivial.

RonJohn
quelle
14

Wenn Sie nur umbenennen (Quelle und Ziel im selben Dateisystem), handelt es sich lediglich um eine Umbenennung eines Verzeichniseintrags. Es ist entweder erfolgreich und das Verzeichnis hat einen neuen Namen oder schlägt fehl. In diesem Fall ändert sich nichts * .

Wenn sich die Quelle und das Ziel auf unterschiedlichen Dateisystemen befinden, müssen die Daten von kopiert werden mv. Unterschiede in den Dateisystemfunktionen, wie z. B. die maximale Dateigröße, Einschränkungen bei den Dateinamen usw., können Probleme verursachen. Um Probleme zu vermeiden, zuerst Kopieren von Dateien ( cp, rsync, ...) und nach dem Kopieren erfolgreich abgeschlossen ist , entfernen Sie die Dateien in der ursprünglichen Position.

* Es gibt jedoch einige Eckfälle, die beispielsweise im Abschnitt BUGS in Man 2 Rename erwähnt werden

sebasth
quelle
> "Es ist entweder erfolgreich und das Verzeichnis hat einen neuen Namen oder schlägt fehl. In diesem Fall ändert sich nichts." Wie ist es garantiert? Gilt das für alle Dateisysteme? Gibt es dazu Unterlagen?
Turbanoff
Rename ist ein einzelner Systemaufruf, es gibt jedoch einen Hinweis zu NFS im BUGS- Abschnitt von man rename : Rename kann erfolgreich sein, auch wenn bei Verwendung von NFS ein Fehler zurückgegeben wird (siehe Details in der Manpage). Ich habe auch eine Notiz in die Antwort eingefügt. Ich erwarte nicht, dass ein Dateisystem im Kernel es für annehmbar hält, wenn ein Verzeichniseintrag verschwindet, sollte ein Umbenennen fehlschlagen.
25.
8

Wie bereits erwähnt, stellt das Umbenennen eines Ordners kein inhärentes Risiko für den Inhalt dar. Es gibt jedoch ein anderes Risiko, das Sie in Betracht ziehen sollten.

Bestehende Prozeduren, Skripte, benutzerdefinierte Verknüpfungen und Konfigurationen, die auf den ursprünglichen Speicherort verweisen, können durch diese Änderung beschädigt werden. Wenn die Pfade beispielsweise in einer Datenbank gespeichert sind, kann das Aktualisieren eine große Aufgabe sein.

Sie können einen symbolischen Link für den neuen Verzeichnisnamen erstellen, den alten Namen jedoch für eine Weile beibehalten. So haben Sie Zeit, die Auswirkungen dieser Änderung zu bewerten. Sie können den alten Namen vorübergehend entfernen, um festzustellen, ob Probleme vorliegen, und den alten Namen einfach neu erstellen, damit die Benutzer weiterarbeiten können, während Sie herausfinden, was aktualisiert werden muss.

Ein Befehl wie dieser sollte es tun: ln -s /data /BD_FILES

Grill
quelle
4
Ein milderes Risiko, das noch niemand erwähnt hat, besteht darin, dass es je nach Sicherungsstrategie für diesen Ordner zu Speicherplatz- und Latenzproblemen auf dem Sicherungslaufwerk kommen kann, da plötzlich 180 GB "neuer" Daten auftauchen und müssen gesichert werden.
Kent
Ich bevorzuge so etwas mv thing1 thing2 ; ln --symbolic ./thing2 thing1. Auf diese Weise habe ich den neuen Namen und kann die Abwesenheit des alten einfach testen, indem ich den Symlink lösche.
can-ned_food
3

Umbenennen ist atomar. Das einzige vernünftige Risiko besteht darin, dass mvaus irgendeinem Grund entschieden wird, alles zu kopieren, und dass es auf halbem Weg zum Absturz kommt. Wenn Sie GNU haben mv, mv -Twird dieses Risiko beseitigt.

mv -Tsagt, mvdass es in einen Nicht-Ordner verschoben wird; Dies führt dazu, dass es sich weigert, mkdir()was wiederum dazu führt, dass es fehlschlägt, wenn ein Ordner verschoben wird und es aus irgendeinem Grund beschlossen hat, zu kopieren.

Ich war vor Jahren an der mv -TArbeit an meiner Masterarbeit beteiligt, als ich Wanzen aus meiner Arbeit herausschüttelte . Früher hat es bei zu vielen Randfällen das Falsche getan.

Andererseits verfügen Sie über 180 GB Benutzerdaten auf der Root-Partition. Sie möchten dies wahrscheinlich von der Root-Partition entfernen.

Joshua
quelle
Man kann unmöglich allein anhand des Namens erkennen, ob sich etwas in der "Root-Partition" befindet oder nicht.
Peter
@ Peter: Wenn es nicht auf der Root-Partition ist, ist es ein Mountpoint. Sie können gemountete Mountpunkte nicht mit dem Befehl mv umbenennen.
Joshua