¿Los sistemas de archivos de diario garantizan la corrupción después de un corte de energía?

28

Estoy haciendo esta pregunta en nombre de otro usuario que planteó el problema en la sala de chat de Ubuntu.

¿Los sistemas de archivos de registro en diario garantizan que no se producirá corrupción si se produce un corte de energía?

Si esta respuesta depende del sistema de archivos, indique cuáles protegen contra la corrupción y cuáles no.

Nathan Osman
fuente

Respuestas:

21

No hay garantías Un sistema de archivos de diario es más resistente y menos propenso a la corrupción, pero no es inmune.

Todo un diario es una lista de operaciones que se han realizado recientemente en el sistema de archivos. La parte crucial es que la entrada del diario se realiza antes de que se realicen las operaciones. La mayoría de las operaciones tienen múltiples pasos. Eliminar un archivo, por ejemplo, puede implicar eliminar la entrada del archivo en la tabla de contenido del sistema de archivos y luego marcar los sectores en la unidad como libres. Si sucede algo entre los dos pasos, un sistema de archivos registrado puede informar de inmediato y realizar la limpieza necesaria para mantener todo coherente. Este no es el caso con un sistema de archivos no registrado que tiene que mirar todo el contenido del volumen para encontrar errores.

Si bien este diario es mucho menos propenso a la corrupción que el no diario, la corrupción puede ocurrir. Por ejemplo, si el disco duro está fallando mecánicamente o si las escrituras en el diario están fallando o se han interrumpido.

La premisa básica del registro en diario es que escribir una entrada de diario es mucho más rápido, por lo general, que la transacción real que describe será. Entonces, el período entre el sistema operativo que ordena una escritura (de diario) y el disco duro que lo cumple es mucho más corto que para una escritura normal: una ventana más estrecha para que las cosas salgan mal, pero todavía hay una ventana.

Otras lecturas

Andrew Lambert
fuente
¿Podría por favor explicar un poco por qué esto es cierto? Quizás podría dar un ejemplo de cómo ocurriría la corrupción en un determinado escenario.
Nathan Osman
1
@ George Edison Vea mi respuesta ampliada.
Andrew Lambert
2
Ese último bit es incorrecto; no hay ventana para que las cosas salgan mal. Dado que registra lo que está a punto de hacer antes de comenzar a hacerlo, la operación se puede reiniciar después de la falla de energía, sin importar en qué punto ocurra durante la operación. Es una cuestión de ordenar, no de tiempo.
psusi
@psusi todavía hay una ventana para interrumpir la escritura en el diario. Las escrituras de diarios pueden parecer atómicas para el sistema operativo, pero aún son escrituras en el disco.
Andrew Lambert
55
@Amazed son atómicos porque tienen números de secuencia y / o sumas de verificación, por lo que la entrada del diario se escribe por completo o no. Si no se escribe por completo, simplemente se ignora después de que el sistema se reinicia, y no se hicieron más cambios en el fs para que permanezca consistente.
psusi
18

No.

El tipo de diario más común, llamado diario de metadatos, solo protege la integridad del sistema de archivos, no de los datos. Esto incluye xfs, y ext3/ ext4en el data=orderedmodo predeterminado .

Si un sistema de archivos sin registro en el diario sufre un bloqueo, se comprobará fscken el próximo inicio. fsckescanea cada inodo en el sistema de archivos, busca bloques que están marcados como usados ​​pero que no son accesibles (es decir, no tienen nombre de archivo), y marca esos bloques como no utilizados. Hacer esto lleva mucho tiempo.

Con un sistema de archivos de registro de metadatos, en lugar de hacer un fsck, sabe qué bloques estaba en medio del cambio, por lo que puede marcarlos como libres sin buscarlos en toda la partición.

Hay un tipo de registro en diario menos común, llamado registro de datos, que es lo que ext3hace si lo monta con la data=journalopción.

Intenta proteger todos sus datos escribiendo no solo una lista de operaciones lógicas, sino también todo el contenido de cada escritura en el diario. Pero debido a que está escribiendo sus datos dos veces, puede ser mucho más lento.

Como otros han señalado, incluso esto no es una garantía, porque el disco duro podría haberle dicho al sistema operativo que había almacenado los datos, cuando de hecho todavía estaba en la memoria caché del disco duro.

Para obtener más información, consulte el artículo del Sistema de archivos de registro de Wikipedia y la sección Modo de datos de la documentación de ext4 .

Mikel
fuente
1
+1 para la distinción entre corrupción del sistema de archivos y corrupción de datos. Esa pequeña distinción es bastante doozy en la práctica.
SplinterReality
Disculpe mi total ignorancia, pero ¿no data=journaltiene sentido como característica?
boehj
Nuevamente, el sistema operativo sabe cuándo la unidad almacena en caché los datos y lo obliga a vaciarlos cuando sea necesario para mantener un fs coherente. Su archivo de datos, por supuesto, puede perderse o corromperse si la aplicación que lo estaba escribiendo cuando falló la alimentación no lo está haciendo con cuidado, y eso se aplica independientemente de si usa data = journal.
psusi
@psusi no importa cuán cuidadoso sea el programa al escribir los datos, muchos discos duros corrompen silenciosamente los datos en READING stackoverflow.com/q/34141117/3338098
user3338098
@ user3338098, las unidades que corrompen silenciosamente los datos se rompen horriblemente y nunca deberían usarse, y son una conversación completamente diferente a la corrupción causada por el software que hace lo incorrecto.
psusi
8

Un sistema de archivos no puede garantizar la consistencia de su sistema de archivos si ocurre una falla de energía, porque no sabe qué hará el hardware.

Si un disco duro almacena datos para la escritura pero le dice al sistema operativo que ha escrito los datos y no admite las barreras de escritura apropiadas, entonces pueden ocurrir escrituras fuera de orden donde una escritura anterior no ha llegado al plato, pero una posterior tiene. Consulte esta respuesta predeterminada del servidor para obtener más detalles.

Además, la posición de la cabeza en un HDD magnético se controla con electroimanes. Si la energía falla en el medio de una escritura, es posible que algunos datos continúen siendo escritos mientras los cabezales se mueven, corrompiendo datos en bloques que el sistema de archivos nunca tuvo la intención de escribir.

camh
fuente
¿No es el firmware de la unidad lo suficientemente inteligente como para suspender la escritura al retraer la cabeza?
Nathan Osman
@George: va a depender de la unidad. Hay muchas cosas por ahí y no sabes qué tan bien funciona tu disco (barato).
camh
1
El disco duro le dice al sistema operativo si usa una escritura detrás de la memoria caché, y el sistema operativo toma medidas para garantizar que se vacíen en el orden correcto. También las unidades están diseñadas para que, cuando falla la alimentación, dejen de escribir. He visto algunos casos en los que el sector que se estaba escribiendo en el momento de la pérdida de energía se corrompe porque no terminó de actualizar el ecc (pero se puede volver a escribir fácilmente correctamente), pero nunca se supo de sectores aleatorios que se corrompen con la pérdida de energía.
psusi
3

ZFS, que está cerca pero no es exactamente un sistema de archivos de registro en diario, garantiza por diseño contra la corrupción después de una falla de energía.

No importa si una escritura en curso se interrumpe en el medio, ya que en tal caso, su suma de verificación será ciertamente incorrecta, por lo que se ignorará el bloque. Como el sistema de archivos se copia al escribir, los datos correctos anteriores (o metadatos) todavía están en el disco y se utilizarán en su lugar.

jlliagre
fuente
2

La respuesta es en la mayoría de los casos no:

  • Como ya dijo mikel , la mayoría de los sistemas de archivos de diario solo pueden proteger los metadatos del archivo (información como el nombre de un archivo, su tamaño, sus permisos, etc.), no los datos del archivo (el contenido del archivo). Esto está sucediendo porque la protección de los datos de los archivos resulta en un sistema de archivos muy lento (en la práctica inútil).
  • Dado que el diario también es un tipo especial de archivo almacenado en el disco duro, puede dañarse después de una falla de energía. Por lo tanto, si el diario está dañado, el sistema de archivos no puede completar ninguna transacción incompleta que estaba teniendo lugar cuando ocurrió la falla de energía.
sakisk
fuente
¿Qué eventos podrían conducir a un diario corrupto? Lo único en lo que podía pensar era en sectores defectuosos: ¿hay algo más?
Nathan Osman
Así es, las fallas de hardware son el caso habitual.
sakisk