Umbenennen einer Datei während des Schreibens

Umbenennen einer Datei während des Schreibens

Ich frage mich, ob dies als sicher gilt. Ich weiß, dass die Dateihandles einwandfrei funktionieren, solange ein Link besteht, und ich weiß, dass der Bezeichner der Inode und nicht der Name ist, aber ich bin nicht sicher, wie es bei verschiedenen FS funktioniert.

Beispielsweise das Kopieren von einer ext4-Festplatte auf einen NTFS-USB-Stick oder das Kopieren von einem FAT-Stick auf ein ext4-Laufwerk.

Ich habe gerade eine Reihe großer Mediendateien kopiert und sie vor dem Kopieren umbenannt. Die Prüfsummen stimmen überein. Ich frage mich, ob das immer sicher ist, ob es auch in die entgegengesetzte Richtung funktioniert, ob es Macken gibt, die ich kennen sollte, oder Gründe, dies zu vermeiden?

Das Betriebssystem/die Distribution ist Ubuntu mit dem Linux-Kernel 5.0.0-15.

Antwort1

Ich bin nicht sicher, wie es bei verschiedenen FS funktioniert.

Der Umbenennungsvorgang selbst wird nicht über verschiedene Dateisysteme hinweg ausgeführt. Es gibt keinen Unterschied zwischen dem Schreiben in eine Datei beispielsweise aus einem Texteditor und dem Schreiben in eine Datei cpmit einer Quelldatei auf einem anderen Dateisystem.

Unter Linux renameist der Systemaufruf für andere Links zur Datei transparent, darunter andere Hardlinks und offene Dateibeschreibungen (und Deskriptoren).Die Manpage besagt ausdrücklich

Offene Dateideskriptoren füralter Pfadsind ebenfalls nicht betroffen.

(Ich qualifiziere nur mit „unter Linux“, weil ich keinen Verweis in POSIX finden konnte. Ich denke, dass dies bei allen POSIX-artigen Betriebssystemen üblich ist.)

Wenn Sie also eine Datei zwischen Dateisystemen kopieren, cpöffnet die Quelle zum Lesen, das Ziel zum Schreiben und beginnt mit dem Kopieren. Umbenennungsvorgänge wirken sich nicht auf die verwendeten Dateideskriptoren aus. Sie können die Quelle und/oder das Ziel umbenennen, ohne dass dies Auswirkungen hat cp.

Man kann sich das auch so vorstellen: Der Name der Datei im Verzeichnis, in dem sie enthalten ist, ist Teil ihres Verzeichniseintrags, der auf ihren Inode zeigt. Offene Dateibeschreibungen sind weitere Zeiger auf den Inode, ebenso wie andere Hardlinks. Das Ändern des Dateinamens hat keine Auswirkungen auf andere vorhandene Zeiger.

Beachten Sie, dass Tools wie mvnicht auf die renameMöglichkeiten des Systemaufrufs beschränkt sind. Wenn Sie mvDateien über mehrere Dateisysteme hinweg verwenden, renameschlägt das fehl (oder mves stellt fest, dass der Vorgang über mehrere Dateisysteme hinweg erfolgt und versucht es erst gar nicht). mvIn diesem Fall muss der Dateiinhalt manuell kopiert und das Original gelöscht werden. Dies führt zu keinen guten Ergebnissen, wenn die umzubenennende Datei gleichzeitig geändert wird.

verwandte Informationen