Bei aktuellen Festplatten gibt es nein Gewissheit, dass eine Datei tatsächlich auf die Festplatte geschrieben wird, selbst wenn die Festplatte den Schreibvorgang als abgeschlossen an das Betriebssystem meldet! Dies liegt am eingebauten Cache im Laufwerk.
Auf freeBSD können Sie dies deaktivieren, indem Sie den kern.cam.ada.write_cache
setzen sysctl auf 0. Dies wird degradieren Schreibleistung erheblich . Zuletzt gemessen (WDC WD5001ABYS-01YNA0 Festplatte auf ICH-7 Chipsatz, FreeBSD 8.1 AMD64), kontinuierliche Schreibleistung (gemessen mit dd if=/dev/zero of=/tmp/foo bs=10M count=1000
) von 75.000.000 Byte/s auf 12.900.000 Byte/s gesunken.
Wenn Sie absolut sicher sein wollen, dass Ihre Dateien geschrieben werden;
- Schreibcache mit
sysctl kern.cam.ada.write_cache=0
deaktivieren gefolgt voncamcontrol reset <bus>:<target>:<lun>
. - Öffnen Sie die Datei mit dem
O_SYNC
Möglichkeit.
Hinweis:
- Ihre Schreibleistung (auf einer HDD) wird jetzt absolut beschissen sein.
- Mounten Sie die Partition nicht mit dem
sync
Möglichkeit; das wird alle verursachen E/A (einschließlich Lesevorgänge) müssen synchron ausgeführt werden. - Verwenden Sie nicht
O_DIRECT
. Es wird versuchen, den Cache vollständig zu umgehen. Das wird wahrscheinlich auch den Lesefluss beeinflussen.
O_DIRECT
existiert im Grunde nur für Oracle, um die Puffer-Cache-Schicht des Kernels zu umgehen und sein eigenes Caching durchzuführen. Es hat eine schlecht definierte Semantik, willkürliche Einschränkungen hinsichtlich der Größe und Ausrichtung der Lesevorgänge, die Sie ausführen können, und sollte im Allgemeinen nicht verwendet werden. O_SYNC
soll Ihnen die gewünschten Effekte liefern, aber ohne ein zugrunde liegendes Dateisystem, das gegen Stromausfälle oder Abstürze robust ist, reicht es möglicherweise immer noch nicht für Ihre Anforderungen aus.