database design - garantias - ¿El sector del disco está escrito atómico?
garantias acid (8)
Pregunta clarificada:
Cuando el sistema operativo envía el comando para escribir un sector en el disco, ¿es atómico? es decir, la escritura de nuevos datos se realiza correctamente o los datos antiguos se dejan intactos si la energía falla inmediatamente después del comando de escritura. No me importa lo que sucede en las escrituras de sectores múltiples: las páginas rotas son aceptables.
Vieja pregunta
Digamos que tiene datos antiguos X en el disco, usted escribe datos nuevos Y, y un árbol cae en la línea de alimentación durante esa escritura. Sin SAI sofisticado o controlador de disco con batería de respaldo, puede terminar con una página rota, donde los datos en el disco son la parte X y la parte Y. ¿Alguna vez puede terminar con una situación donde los datos en el disco son parte X, parte Y y parte basura?
He intentado comprender el diseño de los sistemas ACID, como las bases de datos, y para mi ingenuidad, parece que Firebird, que no utiliza un registro de escritura anticipada, confía en que una escritura determinada no destruirá los datos antiguos (X). solo no puede escribir completamente nuevos datos (Y). Eso significa que si se sobrescribe una parte de X, solo se puede cambiar la parte de X que se sobrescribe, no la parte de X que pretendemos conservar.
Para aclarar, esto significa que si tiene un búfer de tamaño de página, digamos 4096 bytes, rellenado con la mitad Y, la mitad X que queremos conservar, y le decimos al sistema operativo que escriba ese búfer sobre X, no hay una situación menor que un disco serio falla donde la mitad X que queremos mantener está dañada durante la escritura.
Creo que las páginas rotas no son el problema. Hasta donde yo sé, todas las unidades tienen suficiente energía almacenada para terminar de escribir el sector actual cuando falla la energía.
El problema es que todo el mundo miente.
Al menos cuando se trata de la base de datos que sabe cuándo se ha comprometido una transacción en el disco, todo el mundo miente. La base de datos emite un fsync, y el sistema operativo solo regresa cuando todas las escrituras pendientes se han enviado al disco, ¿verdad? Tal vez no. Es común, especialmente con tarjetas RAID y / o unidades SATA, que se le diga a su programa que todo se ha comprometido (es decir, fsync regresa) y, sin embargo, aún no hay datos en la unidad.
Puede intentar usar la revisión de disco de Brad para averiguar si la plataforma que va a utilizar para su base de datos puede sobrevivir desconectando el sistema sin perder datos. La conclusión: si falla la comprobación del disco, la plataforma no es segura para ejecutar una base de datos. Las bases de datos con ACID se basan en saber cuándo se ha comprometido una transacción con la tienda de respaldo y cuándo no. Esto es así ya sea que las bases de datos usen el log-ahead de escritura (y si la base de datos regresa al usuario sin haber hecho un fsync, entonces las transacciones pueden perderse en caso de falla, por lo que no debe afirmar que proporciona semántica ACID )
Hay un largo hilo en la lista de correo Postgresql que habla de la durabilidad. Comienza hablando de SSD, pero luego entra en unidades SATA, unidades SCSI y sistemas de archivos. Es posible que se sorprenda al descubrir cuán expuestos pueden estar sus datos a la pérdida. Es un buen hilo para cualquier persona con una base de datos que necesite durabilidad, no solo aquellos que ejecutan Postgresql.
Esperaría que una página rasgada constara de la parte X, parte Y, y parte del sector ilegible. Si una cabeza se encuentra en el medio de escribir un sector cuando falla la energía, la unidad debe estacionar las cabezas inmediatamente, de modo que el resto de la unidad (aparte de ese sector) permanezca sin daños.
En algunos casos, esperaría varias páginas rotas que constan de la parte X y la parte Y, pero solo una página rasgada incluiría un sector ilegible. El motivo de varias páginas dañadas es que el disco puede almacenar muchas escrituras internamente, y el orden de escritura puede intercalar varios sectores de varias páginas.
He leído historias contradictorias sobre si una nueva escritura en el sector ilegible lo hará legible de nuevo. Incluso si la respuesta es sí, serán datos nuevos Z, ni X ni Y.
La gente no parece estar de acuerdo con lo que sucede durante un sector escribir si falla la energía. Tal vez porque depende del hardware que se usa, e incluso del sistema de archivos.
Desde wikipedia ( http://en.wikipedia.org/wiki/Journaling_file_system ):
Algunas unidades de disco garantizan la atomicidad de escritura durante un corte de energía. Otros, sin embargo, pueden dejar de escribir a la mitad de un sector después de que se pierde la energía, lo que no coincide con su código de corrección de errores. El sector está así corrupto y su contenido perdido. Un diario físico protege contra dicha corrupción porque contiene una copia completa del sector, que puede reproducir sobre la corrupción en el próximo montaje.
Parece sugerir que algunos discos duros no terminarán de escribir el sector, pero que un sistema de archivos en diario puede protegerlo de la pérdida de datos de la misma manera que el xlog protege una base de datos.
De la lista de distribución de Linux kernel en una discusión sobre el sistema de archivos journaling ext3:
En cualquier caso, la suma de comprobación del sector defectuoso es un error de hardware. Se supone que la escritura sectorial es atómica, ya sea que suceda o no.
Yo tendería a creer eso sobre el comentario de la wiki. En realidad, la mera existencia de una base de datos (firebird) sin xlog implica que la escritura sectorial es atómica, que no puede destruir datos que no pretendías cambiar.
Hay bastante discusión Here sobre la atomicidad del sector escribe, y de nuevo no hay acuerdo. Pero las personas que están en desacuerdo parecen estar hablando de escrituras de sectores múltiples (que no son atómicas en muchos discos duros modernos). Quienes dicen que los escritos del sector son atómicos parecen saber más acerca de lo que están hablando.
La respuesta a su primera pregunta depende del hardware involucrado. Al menos con algún hardware antiguo, la respuesta fue sí: un corte de energía podría ocasionar que se escriba basura en el disco. La mayoría de los discos actuales, sin embargo, tienen un poco de "UPS" integrado en el disco, un condensador lo suficientemente grande como para alimentar el disco el tiempo suficiente para escribir los datos en el caché en disco en el disco. También tienen circuitos para detectar si la fuente de alimentación sigue siendo buena, por lo que cuando la energía se vuelve escamosa, escriben los datos en el caché en el plato e ignoran la basura que pueden recibir.
En cuanto a una "página rasgada", un disco típico solo acepta comandos para escribir un sector completo a la vez, por lo que lo que obtendrá normalmente será un número integral de sectores escritos correctamente, y otros permanecerán sin cambios. Sin embargo, si está utilizando un tamaño de página lógica que es más grande que un sector único, puede terminar con una página parcialmente escrita.
Eso, sin embargo, se aplica principalmente a una conexión directa a un disco duro de tipo disco móvil normal. Con casi cualquier otra cosa, las reglas pueden ser, a menudo, diferentes. Solo por un ejemplo obvio, si está escribiendo sobre la red, estará mayormente a merced del protocolo de red en uso. Si transmite datos a través de TCP, los datos que no coincidan con los CRC serán rechazados, pero los mismos datos transmitidos a través de UDP, con la misma corrupción, podrían ser aceptados.
Nadie parece estar de acuerdo con esta pregunta. Así que pasé mucho tiempo intentando diferentes consultas de Google hasta que finalmente encontré una respuesta.
del Dr. Stephen Tweedie, empleado de RedHat y sistema de archivos kernel de Linux y desarrollador de memoria virtual en una charla sobre ext3 (que él desarrolló) transcripción aquí . Si alguien sabe, sería él.
"No basta con escribir la cosa en la revista, porque debe haber alguna marca en la revista que diga: bueno, (¿tiene este registro de revista en realidad?), ¿Este registro de revista realmente representa una consistencia completa en el disco? La forma en que lo hace es teniendo una operación atómica que marca que la transacción se completó en el disco "[23m, 14s]
"Ahora, los discos actualmente hacen estas garantías. Si comienza una operación de escritura en un disco, incluso si falla la alimentación en medio de ese sector, el disco tiene suficiente energía disponible y puede robar energía de la energía rotacional del husillo, tiene suficiente potencia para completar la escritura del sector que se está escribiendo en este momento. En todos los casos, los discos hacen esa garantía ". [23m, 41s]
No, ellos no son. Peor aún, los discos pueden mentir y decir que los datos están escritos cuando, de hecho, están en la memoria caché del disco, en la configuración predeterminada. Por razones de rendimiento, esto puede ser deseable (la durabilidad real es hasta un orden de magnitud más lenta), pero significa que si pierde potencia y el caché de disco no está físicamente escrito, sus datos desaparecerán.
La durabilidad real desafortunadamente es dura y lenta , ya que necesita hacer al menos una rotación completa por escritura, o 2+ con journalling / undo. Esto lo limita a un par de cientos de transacciones DB por segundo y requiere deshabilitar el almacenamiento en caché de escritura a un nivel bastante bajo.
Sin embargo, a efectos prácticos, la diferencia no es tan grande en la mayoría de los casos.
Ver:
Sospecho que esta suposición es incorrecta.
Los discos duros modernos codifican los datos en sectores y, además, lo protegen con ECC. Por lo tanto, puede acabar con el contenido de todo el sector, simplemente no tendrá sentido con la codificación utilizada.
En cuanto a los discos SSD cada vez más pop, la situación es aún más espantosa: el bloque se borra antes de sobrescribirse, por lo que, dependiendo del firmware que se utilice y de la cantidad de espacio libre, los sectores totalmente independientes pueden dañarse.
Por cierto, un bloqueo del sistema operativo no dará lugar a daños en datos en un solo sector.
al actualizar el disco, la única garantía que fabrican los fabricantes es que una sola escritura de 512 bytes es atómica (es decir, se completará en su totalidad o no se completará en absoluto); por lo tanto, si ocurre una pérdida prematura de energía, solo una parte de una escritura más grande puede completarse (a veces llamada escritura rasgada).