Con los discos duros actuales, no ¡Garantía de que un archivo se escribe realmente en el disco, incluso si el disco informa que la escritura se completó al sistema operativo! Esto se debe a la memoria caché integrada en la unidad.
En freeBSD puede deshabilitar esto configurando el kern.cam.ada.write_cache
sysctl a 0. Esto degradará rendimiento de escritura significativamente . La última vez que lo medí (disco duro WDC WD5001ABYS-01YNA0 en un chipset ICH-7, FreeBSD 8.1 AMD64), rendimiento de escritura continuo (medido con dd if=/dev/zero of=/tmp/foo bs=10M count=1000
) se redujo de 75 000 000 bytes/seg a 12 900 000 bytes/seg.
Si quiere estar absolutamente seguro de que sus archivos están escritos;
- Deshabilitar el almacenamiento en caché de escritura con
sysctl kern.cam.ada.write_cache=0
seguido decamcontrol reset <bus>:<target>:<lun>
. - Abra el archivo con el
O_SYNC
opción.
Nota:
- Tu rendimiento de escritura (en un HDD) ahora será absolutamente malo.
- No monte la partición con el
sync
opción; que causará todas La E/S (incluidas las lecturas) se realizará de forma síncrona. - No use
O_DIRECT
. Intentará omitir el caché por completo. Eso probablemente también influirá en las lecturas.
O_DIRECT
básicamente existe únicamente para que Oracle pase por alto la capa de caché del búfer del kernel y haga su propio almacenamiento en caché. Tiene una semántica mal definida, limitaciones arbitrarias en el tamaño y la alineación de las lecturas que puede realizar y, en general, no debe usarse. O_SYNC
se supone que debe brindarle los efectos que desea, pero sin un sistema de archivos subyacente que sea robusto contra cortes de energía o fallas, aún podría no ser suficiente para sus necesidades.