Corrupción de datos en archivos binarios debido al apagado forzado de la computadora

Corrupción de datos en archivos binarios debido al apagado forzado de la computadora

Guardé algunos datos en un archivo binario usando C++. Dos minutos después de guardar los datos, de repente se cortó la energía de la computadora. Cuando reinicié la computadora, los datos estaban dañados. Cuando leí el archivo binario, todos los valores eran 0, que ciertamente no es lo que había escrito en el archivo.

¿Es posible que el apagado repentino de la computadora haya dañado los datos de mis archivos? ¿O es que este no puede ser el caso porque los datos, una vez escritos y guardados en el disco, no se corrompen, incluso en caso de un apagado repentino? Si es lo último, tendré que iniciar una investigación detallada del problema, pero realmente no sospecho que algo más pueda haber salido mal. El programa es muy simple y ha estado en uso durante 2 años, y esta es la primera vez que veo daños en los datos de los archivos escritos con el programa.

PD: De hecho, el archivo había terminado de guardarse. El programa que guardó el archivo administra la E/S del archivo correctamente: cierra el archivo una vez que termina de escribirlo. Además, el programa ni siquiera estaba ejecutándose cuando se produjo el corte de energía. Esto sucedió en Windows 8.1.

Respuesta1

Simplificado, cuando creas un archivo de datos, el sistema operativo debe hacer estas tres cosas:

  1. Asigne los bloques necesarios para contener los datos.
  2. Escriba ceros en esos bloques o haga que se presenten ceros si intenta leerlos.
  3. Escriba sus datos en los bloques asignados.

El paso 2 es un requisito debido a la seguridad del sistema. Es posible que los bloques asignados hayan contenido previamente datos de otra persona y sería una violación de seguridad que el sistema le permitiera leer sus datos antiguos. Entonces obtienes ceros en su lugar. Si se corta la energía entre los pasos 2 y 3, verás ceros en lugar de tus datos.

Dependiendo del sistema operativo y del sistema de archivos subyacente, a menos que sincronice explícitamente sus datos con el disco dentro de su programa, el paso 3 podría ocurrir un tiempo arbitrariamente largo después del paso 2.

En sistemas compatibles con POSIX, llamesincronización()para garantizar que sus datos hayan alcanzado el almacenamiento permanente.

información relacionada