Ich habe eine SATA-Festplatte mit Schreib-Cache deaktiviert:Funktioniert fsync (fd) in einer Datei, die von einem externen Programm erstellt wurde?
hdparm -W0 /dev/foo
ich mit diesem Mount-Optionen (unter anderem) auf einer ext4
Partition am Betrieb:
data=ordered
auto_da_alloc
Linux-Kernel-Version ist 2.6.32-5-686
.
Jetzt habe ich ein externes Programm, das ich nicht ändern kann, aber dass ich weiß, erstellt eine Datei auf folgende Weise:
int fd = open(path);
write(fd, data, data_size);
close(fd);
D.h. Es fsync nicht vor dem Schließen. Zu diesem Zeitpunkt befinden sich die Daten möglicherweise im RAM, irgendwo in kernel/fs-Caches.
Hinweis: die Metadaten sind noch kein Problem: die endgültigen Metadaten werden geschrieben und fuzzed nach Ich habe sichergestellt, dass die Daten die Disk-Platten erreicht hat. Die Daten selbst sind das Problem.
Die Frage ist also, wie kann ich helfen, die Daten erreichen die tatsächlichen Platten Platten? danach dieses separates Programm laufen dachte
Ich habe:
int fd = open(path);
fsync(fd);
close(fd);
Wird das helfen, die Daten zu spülen, oder sollte ich einen anderen Ansatz?