Estamos probando cómo se comportará nuestro sistema (que actualmente se ejecuta en Windows 7 integrado) si se corta la energía sin previo aviso. Nuestra PC deliberadamente no funciona con un UPS.
En una prueba, creamos un archivo de texto simple en el Bloc de notas, agregamos algo de texto, guardamos el archivo y luego lo apagamos unos segundos después, es decir, no fue un apagado elegante.
Cuando volvimos a encender, los cambios en el archivo NO se habían guardado.
Tras una investigación más profunda, notamos que nuestro SSD Crucial MX200 tenía marcada la opción "Habilitar almacenamiento en caché de escritura en el dispositivo".
DespuésdesmarcandoCon esa configuración, intentamos nuestras pruebas nuevamente, asumiendo que las escrituras en el disco se escribirían inmediatamente y no se almacenarían en caché.
Pero como antes, los cambios en el archivo aún no se almacenaban si cortamos la energía unos segundos después de "guardar" el archivo.
Actualización: hemos probado este comportamiento utilizando 2 marcas diferentes de SSD y un HDD, y el comportamiento es el mismo. Simplemente parece que el almacenamiento en caché de escritura nunca se desactiva...
¿Hay algo más que nos falta?
Respuesta1
Una vez que confirmamos que nuestro problema no era específico de una marca o tipo de unidad en particular, sospechamos que se trataba del comportamiento de Windows, en nuestro caso, Windows 7.
Después de buscar más, encontramos esta publicación: ¿Con qué frecuencia Windows vacía el caché de escritura?
Lo que confirma que se necesitan 8 segundos para vaciar completamente el caché de archivos interno de Windows.
La solución fue actualizar nuestro código fuente como se indica aquí:https://jeffpar.github.io/kbarchive/kb/066/Q66052/.
Al abrir nuestros archivos usando fopen
, incluimos la opción de modo "c" específica de Microsoft como última opción, y la usamos _flushall()
inmediatamente antes de llamar fclose()
.