Hace un tiempo, se ha debatido sobre la posibilidad de que ext4 deje los archivos vacíos después de un desmontaje inmundo, resumido bastante bien en este artículo . Básicamente, debido a la asignación retrasada, las escrituras pueden mantenerse en la caché de escritura durante mucho más tiempo que el intervalo de confirmación predeterminado del diario ext (5 segundos).
Los problemas parecen haberse solucionado en un parche que fuerza la asignación de bloques en ciertas situaciones, forzando así los datos al disco después de 5 segundos como máximo por defecto.
Me pregunto qué sucede cuando una aplicación sobrescribe partes existentes de un archivo, sin truncar o agregar el archivo en sí. ¿Será forzado a grabar en 5 segundos también?
Parece una situación diferente a la de agregar a un archivo: al agregar, el tamaño del archivo cambia, que es un cambio de metadatos; por lo tanto, será necesaria una confirmación del diario dentro de los 5 segundos, y debido a datos = ordenados, los datos deberán escribirse antes debido a problemas de seguridad (de lo contrario, partes del archivo eliminado de otros usuarios podrían aparecer para el propietario del anexo). archivo).
Al sobrescribir los datos del archivo, no hay ninguna razón por la que la escritura de datos deba realizarse antes de la confirmación del diario de metadatos, ya que los datos antiguos pertenecen al mismo usuario que el nuevo. Entonces, ¿la escritura ocurre antes de la confirmación de todos modos, o puede retrasarse más que el intervalo de confirmación del diario? Si es así, ¿cuánto tiempo?
Actualización: Sé que todo esto es irrelevante al hacer lo correcto, es decir, usar fsync (). (Esta fue la razón principal de toda la discusión sobre ext4 y la pérdida de datos; el problema solo se refería a aplicaciones que no fsync () o no en los momentos correctos). No estoy escribiendo mi propia aplicación, pregunto porque no sé si todas mis aplicaciones hacen lo correcto, y quiero saber un marco de tiempo aproximado para tales escritos "peligrosos". La razón para preguntar es que mi controlador de gráficos causa pánico del kernel regularmente, y quiero saber si tengo que preocuparme por más de los últimos 5 segundos de escrituras de datos.
fuente
sync
(o, equivalentemente, cuando se activa el temporizador de intervalo de confirmación). En el momento en que sesync
completa, no hay absolutamente ninguna información sucia, metadatos o páginas de diario. Cualquier cambio en el sistema de archivos durante la transferencia de datos síncronos se bloquea hasta que se complete.commit=...
ysync
NO son equivalentes? ¿O tytso implica que incluso con unsync
no compromete páginas no asignadas? No puedo imaginar que ese sea el caso, ya que violaría las especificaciones POSIX. Tal vez podría usar ese script bash que proporcioné para una mejor seguridad de los datos: PCualquiera sea la respuesta a su pregunta, no importa.
El comportamiento expuesto garantizado del sistema de archivos ext4 es que "los datos estarán en el disco después de una llamada
sync
/ exitosafsync
". Por lo tanto, si tiene una aplicación que le hace hacer esta pregunta, debe insertar llamadas de sincronización en los puntos críticos donde debe garantizarse la integridad de los datos. Si es un usuario preocupado por el mismo problema, puede llamar a lasync
utilidad de línea de comandos antes de hacer cualquier comportamiento peligroso que pueda causar un cierre impuro.fuente