Wie kann eine Datei in POSIX dauerhaft umbenannt werden?

Wie kann eine Datei in einem POSIX-Dateisystem dauerhaft umbenannt werden? Fragen Sie sich speziell nach fsyncs auf dem directorys. (Wenn dies von OS / FS abhängt, frage ich nach Linux und ext3 / ext4.)

Hinwei: Auf StackOverflow gibt es noch andere Fragen zu dauerhaften Umbenennungen, aber AFAICT: Sie behandeln nicht das Synchronisieren der Verzeichnisse (was für mich wichtig ist - ich ändere nicht einmal die Dateidaten).

Ich habe derzeit (in Python):

dstdirfd = open(dstdirpath, O_DIRECTORY|O_RDONLY)
rename(srcdirpath + '/' + filename, dstdirpath + '/' + filename)
fsync(dstdirfd)

Spezifische Frage:

Synchronisiert dies implizit auch das Quellverzeichnis? Oder könnte die Datei nach einem Stromausfall in beiden Verzeichnissen angezeigt werden (was bedeutet, dass die Anzahl der festen Verbindungen überprüft und die Wiederherstellung manuell durchgeführt werden muss), d. H. Es ist unmöglich, einen dauerhaften atomaren Verschiebevorgang zu garantieren?Wenn ich das Quellverzeichnis synchronisiereAnstatt vo das Zielverzeichnis, wird das Zielverzeichnis dann auch implizit synchronisiert? Gibt es nützliche Tools zum Testen / Debuggen / Lernen (Fehlerinjektoren, Introspection - Tools, Scheindateisysteme usw.)?

Danke im Voraus

Antworten auf die Frage(8)

Ihre Antwort auf die Frage