Wie kann ich überprüfen, ob mv
mein fs (ext4) atomar ist?
Das Betriebssystem ist Red Hat Enterprise Linux Server Version 6.8.
Wie kann ich das im Allgemeinen überprüfen? Ich habe mich umgesehen und nicht festgestellt, ob mein Betriebssystem Standard-POSIX ist.
strace
?unlink
oderrename
tragbar und atomar einenlink
Fehler machen?Antworten:
Interessanterweise scheint die Antwort "Es kommt darauf an" zu sein.
Um es klar,
mv
angegeben zuIn der Umbenennungsfunktionsspezifikation heißt es:
Aber die neueste ISO C-Spezifikation für
rename()
Staaten:Beachten Sie überraschenderweise, dass keine explizite Anforderung an die Atomizität besteht. Es ist möglicherweise an einer anderen Stelle im neuesten öffentlich verfügbaren C-Standard erforderlich, aber ich konnte es nicht finden. Wenn jemand eine solche Anforderung finden kann, sind Änderungen und Kommentare mehr als willkommen.
Siehe auch Ist rename () atomar?
Per Linux-Manpage :
Die Linux-Manpage behauptet, dass das Ersetzen der Datei atomar sein wird.
Das Testen und Verifizieren dieser Atomizität kann jedoch sehr schwierig sein, wenn Sie so weit gehen müssen. Sie sind sich nicht sicher, was Sie mit "Wie kann ich überprüfen, ob mv atomar ist" meinen? Möchten Sie Anforderungen / Spezifikationen / Dokumentationen, die atomar sind, oder müssen Sie sie tatsächlich testen ?
Beachten Sie außerdem, dass sich die beiden Operandendateinamen im selben Dateisystem befinden. Ich kann keine Standardbeschränkung für das
mv
Dienstprogramm finden, um dies durchzusetzen.quelle
rename
Atomizität zu sagen ./
als ext4 fs und/tmp
als anderes ext4 fs haben, können Sie nicht atomar von einem zum anderen mv.mv
basiert auf einemrename
Systemaufruf undrename()
ist atomar. Sie können sich die Manpage ansehenrename(2)
.Sie könnten eine Antwort auf Is rename () atomic finden? auf Stapelüberlauf.
Welche Art von fs hast du benutzt?
quelle
Zusätzlich zur Überprüfung der Systemaufrufe und ihrer Atomizität kann dies möglicherweise
inotify-tools
als Test dienen, obwohl ich nicht sicher bin, ob dies ein garantierter Beweis für die Atomizität ist.2 Muscheln öffnen. Beobachten Sie das Zielverzeichnis des Umzugs in einem von ihnen:
Verschieben Sie eine Datei in das Verzeichnis im anderen:
Das
inotifywait
sollte nur eine Zeile anzeigen:Es scheint atomar im Vergleich zu der Antwort auf
ls target/
undtouch target/a
, die mehrzeilige Nachrichten erzeugen wie:PS
Ich denke, zumindest zeigt es, dass die asynchrone Multiprozess-Zusammenarbeit bei Dateien sicher ist
inotify
(praktisch atomar): In jedem Fall würden Sie erst antworten, nachdem Sieinotify
nach der Operation das endgültige Signal gegeben haben. Beispielsweise kann ein Producer-Consumer-Setup mit einfach und sicher implementiert werdeninotify
.quelle