OpenZFS 2.1.14 y OpenZFS 2.2.2 llegan solucionando un problema de corrupción de datos

OpenZFS

Logo de OpenZFS

Se dieron a conocer hace poco la liberación de las versiones correctivas de OpenZFS 2.1.14 y 2.2.2, en las cuales el equipo de desarrollo de OpenZFS solucionan un problema en el código de verificación de consistencia de la caché que causa corrupción de datos en archivos que contienen áreas vacías cuando se copian después de realizar cambios.

Y es que un lanzamiento no fue suficiente, sino que se tuvieron que realizar dos nuevos lanzamientos que como tal solucionan el mismo problema. Por su parte, OpenZFS 2.2.2 fue destinada tanto en FreeBSD 14, así como también en varias distribuciones de Linux, incluido Ubuntu 23.10, mientras que la versión de OpenZFS se aplica a FreeBSD desde la versión 12.

Cabe mencionar que el lanzamiento de OpenZFS 2.2.0 sacó a la luz el problema del error de corrupción de datos con la nueva función de clonación de bloques que reemplaza los datos con ceros sin previo aviso, sin detección, sin indicación alguna de algo incorrecto hasta que se intentan leer los datos.

De manera inicial pensó que OpenZFS 2.2.0 era donde se incluía el problema, pero no era asi, ya que como se mencionó, este lanzamiento expuso un error subyacente que había existido durante años y simplemente hizo que el problema existente fuera mucho más probable.

Inicialmente, intentaron solucionar el problema en la versión 2.2.1, pero la solución no fue efectiva. El error pasó desapercibido durante mucho tiempo y comenzó a aparecer después de que se realizaron cambios en la utilidad «cp» en el paquete coreutils 9.x. Se supone que el problema no aparece en Red Hat Enterprise Linux y distribuciones basadas en él, ya que RHEL 9 usa el paquete coreutils 8.x con una lógica diferente para la utilidad “cp”.

El problema ocurre cuando se utilizan utilidades de copia de archivos que pueden identificar y optimizar áreas vacías en los archivos. Pueden ocurrir daños en los sistemas de archivos cargados al copiar un archivo, si la operación se realiza casi inmediatamente después del cambio y algunos de los datos permanecen solo en el caché sucio y aún no se han vaciado al disco.

Para optimizar el manejo de áreas vacías en archivos, OpenZFS, desde la versión 0.6.2, admite las operaciones SEEK_HOLE y SEEK_DATA, que permiten omitir el área vacía de un archivo cuando se lee desde el disco. Las áreas vacías se reconocen y la información sobre ellas se guarda solo después de que todos los datos restantes asociados con el archivo en el caché se hayan vaciado al disco. Para iniciar un vaciado, OpenZFS tiene una verificación que evalúa la presencia de datos no guardados en el caché y fuerza un vaciado en el disco necesario para usar SEEK_HOLE y SEEK_DATA.

Desafortunadamente, la verificación resultó incompleta y, en algunas circunstancias, los datos sobre el estado de reinicio se determinaron incorrectamente y la información antigua sobre el contenido del archivo estaba en el disco si la solicitud se produjo en un pequeño período de tiempo entre las operaciones de vaciado del caché.

Las operaciones de lectura que optimizan la carga de áreas vacías podrían en este momento saltarse la lectura de parte de los datos, considerándolos vacíos, mientras que el programa que trabaja con el archivo podría previamente realizar cambios en las áreas vacías. Como resultado, el uso de la utilidad «cp» podría generar una copia que contuviera áreas vacías donde no había ninguna en el archivo original.

Durante la investigación que se llevó a cabo, se reveló que el error también se confirmó en Illumos, la bifurcación de código abierto de OpenSolaris que ha continuado desarrollándose desde que Oracle acabó con el proyecto de código abierto en 2010.

Además de la corrección de corrupción de datos, el lanzamiento de versión también incluye otras correcciones de errores y mejoras, entre las que se destaca la soluciuon de ZFS para que las snapshot (zfs/snapshot) sean visibles en NFS en FreeBSD, se abordan los problemas de compatibilidad con Linux 6.6 y se corrigen los errores de compilación e inicio de shell en FreeBSD.

Finalmente si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.


Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.