¿BTRFS garantiza la consistencia de los datos en cortes de energía?

11

Como ZFS declara exclusivamente ,Se afirma que ZFS es invulnerable ZFS acepta que podría ser vulnerable a fallas de energía.

No pude encontrar tal declaración para BTRFS. ¿Es (o diseñado / planeado para ser) duradero entre cortes de energía?

ceremcem
fuente
Lea de nuevo. "Si su grupo está dañado debido a fallas en el hardware o un corte de energía, consulte Reparación de daños en todo el grupo de almacenamiento de ZFS". (..) Intenta recuperar el grupo usando el zpool clear -F comando
Michael D.
¿Entonces dice "ZFS no garantiza la coherencia de los datos, solo intenta recuperar"?
ceremcem
Si. Hay varias memorias caché con las que lidiar, una memoria caché incorporada en los discos duros, cachés / memorias intermedias del sistema operativo. En algún momento hay una synco una flushque escribe cachés en el disco, o no durante un corte de energía, esos datos se perderán. ZFS podría funcionar perfectamente si el disco duro está en buen estado y no hay cortes de energía (o si un UPS está conectado para apagar la computadora correctamente en caso de un corte). Lo que no puedes decir sobre FAT32 más o menos.
Michael D.
2
La pérdida de datos no es una preocupación, ya que es una consecuencia natural cuando se produce una pérdida de energía, pero la consistencia de los datos es una preocupación en mi caso. Un sistema de archivos puede perder datos en condiciones tan extremas, pero no debe causar datos inconsistentes en el disco. Necesito la instalación de instantáneas continuas, así que seguiré con BTRFS. Sin embargo, NILFS2 es la opción más cercana en mi caso.
ceremcem
1
Hice la pregunta en #btrfs IRC, dijeron should be ok if your hw isn't "buggy"donde no significa "buggy" your hw has correct flush/barrier semantics. He publicado un enlace a esta pregunta en IRC, espero que alguien tome tiempo para elaborar; pero por ahora esto es todo.
Hola Ángel el

Respuestas:

5

Hice la pregunta en #btrfs IRC, dijeron should be ok if your hw isn't "buggy"donde no significa "buggy" your hw has correct flush/barrier semantics.

TL; DR: Esto significa que btrfs está protegido contra la corrupción de datos debido a la pérdida de energía de manera similar a ZFS.

Aquí está la razón: la idea general detrás de ZFS y btrfs es similar. Ambos usan árboles de Merkle como estructura de datos . Las escrituras pueden requerir que se actualicen varios bloques en los discos. El sistema de archivos está manejando esto escribiendo los datos nuevos en bloques vacíos (incluso si se está modificando un archivo existente, por lo tanto, no necesita modificar bloques que reflejen el estado anterior) y construyendo un nuevo árbol actualizado. Una vez que se realiza todo el trabajo pesado y los datos + el árbol actualizado se han escrito en el disco, el puntero de la cabeza se actualiza al nuevo árbol haciendo visible el cambio.

Así es como se supone que deben comportarse las cosas al escribir en un archivo:

  1. Escriba datos en bloques libres en el disco.
  2. Haga una copia del árbol Merkle *, actualícelo de acuerdo con los cambios escritos en (1).
  3. Solicite al hardware que vacíe los datos en el disco: el hardware escribe todos los datos pendientes.
  4. Actualice el puntero de la cabeza al nuevo árbol Merkle.
  5. Bloques viejos gratis que ya no son necesarios.

Si se pierde energía después de (4) la transacción se ha completado. Si se pierde energía durante los pasos (1) a (3), el sistema de archivos mostrará el estado anterior (los datos escritos en el paso (1) se pierden pero el sistema de archivos es coherente). Tenga en cuenta que no es necesario verificar si hay errores en el sistema de archivos, lo que significa que el sistema de archivos está disponible de inmediato, lo cual es una gran ventaja (¡verificar sistemas de archivos grandes puede llevar mucho tiempo!).

Aquí hay un ejemplo de cómo las cosas pueden salir mal con el hardware "defectuoso":

  1. Escriba datos en bloques libres en el disco.
  2. Haga una copia del árbol Merkle *, actualícelo de acuerdo con los cambios escritos en (1).
  3. Solicite al hardware que vacíe los datos en el disco: el hardware confirma que se completó pero no se vacía por completo (por ejemplo, los datos pueden permanecer en la caché de reescritura del disco).
  4. Actualice el puntero de la cabeza al nuevo árbol Merkle. Estos datos se escriben en el disco antes que otros datos pendientes (por ejemplo, porque la cabeza del disco está en la ubicación correcta).
  5. Los datos escritos en los pasos (1) y (2) se escriben en el disco.
  6. Bloques viejos gratis que ya no son necesarios.

El sistema de archivos se volverá inconsistente si se pierde energía entre (4) y (5) o mientras se realiza el paso (5). Como consecuencia, el árbol de Merkle y / o los datos solo pueden escribirse parcialmente, lo que hace que el sistema de archivos se vuelva inconsistente.

En la práctica, debe tener especial cuidado al utilizar controladores RAID . Por lo general, deshabilitan las memorias caché de reescritura en el disco y utilizan su propia memoria caché de reescritura. Hay dos formas comunes de que las cosas salgan mal aquí:

* Estoy simplificando las cosas aquí. En realidad no es necesario copiar todo el árbol. Solo se deben agregar las partes que cambiaron; las partes restantes se pueden compartir entre el árbol antiguo y el nuevo .

Martín
fuente
Gracias por esta linda explicación. Sin embargo, la cita es necesaria para todas las reclamaciones, incluida la conversación del IRC. Entonces su respuesta será aceptada.
ceremcem
Con respecto a los registros de IRC, me refería al comentario de @Hi-Angel aquí. Tal vez él puede proporcionar una referencia? Sin embargo, agregué algunas referencias más a las otras partes.
Martin
BTRFS no usa árboles Merkle, usa árboles B (de ahí 'B-TRee FileSystem'), y sus ejemplos de fallas requieren que las barreras de escritura no sean implementadas adecuadamente por el hardware (que en realidad es un caso bastante inusual en estos días) . De lo contrario, buena respuesta.
Austin Hemmelgarn
Los árboles utilizados por btrfs son en realidad ambos árboles B (esta propiedad es sobre la "forma" del árbol y el hecho de que se autoequilibran) y árboles hash / Merkle (las hojas contienen el hash de algunos datos, los nodos contienen el hash de sus hijos, por lo tanto, cada cambio se propaga hasta la raíz). Ser capaz de verificar estos hashes es lo que permite que btrfs y ZFS detecten datos corruptos (y los lean desde otro disco si se usan en modo "espejo").
Martin