Conociendo el sistema de archivos XFS
El núcleo Linux moderno soporta una amplia variedad de sistemas de archivos, cada uno de los cuales adopta su propio enfoque para guardar y solicitar datos de un medio digital. Este hecho, por supuesto, abre muchas oportunidades. Pero, al mismo tiempo, impone responsabilidad adicional a los usuarios que necesitan obtener al menos una comprensión básica de sus peculiaridades. Aparte de ext4, la opción predeterminada para la mayoría de las distribuciones, el sistema XFS se considera una de las mejores opciones y requiere una consideración más detallada. Entonces, ¿qué tipo de sistema de archivos es y en qué se diferencia del resto?
Introducción a XFS
XFS es uno de los sistemas de archivos más robustos implementados en Linux. Fue diseñado por Silicon Graphics Inc. y lanzado en 1994 en su plataforma IRIX basada en UNIX. Más tarde, el sistema de archivos fue entregado a la comunidad de código abierto que en 2001 lo incorporó al núcleo. Desde entonces, se ha abierto camino en todas las principales distribuciones de Linux. Las basadas en Red Hat, por ejemplo, CentOS, RHEL y Rocky Linux, incluso establecen este formato por defecto durante la instalación.
Creado teniendo en mente los dispositivos de alta capacidad, XFS se conoce ampliamente por su alto rendimiento cuando se trata de grandes cantidades de datos. Este sistema de archivos generalmente se emplea en servidores, matrices de almacenamiento y, con menos frecuencia, en computadoras personales. Su popularidad ha aumentado con el uso generalizado de dispositivos NAS, una gran parte de los cuales se suministran con XFS del fabricante, incluidos LinkStation y TeraStation de Buffalo y varios productos de NetGear, LaCie, Iomega y otras empresas.
A pesar de que no es nuevo, el sistema de archivos aún sigue desarrollándose activamente. Ha sometido a una serie de modificaciones, y ahora tenemos la tercera generación de XFS que se usa ampliamente en los últimos años:
La primera generación de XFS – XFS simple por SGI para el sistema operativo IRIX basado en UNIX;
La 2da generación de XFS – XFS de Linux más antiguo de formato extendido, actualmente utilizado principalmente en los dispositivos NAS;
La 3ra generación de XFS – XFS de Linux (generación 3), la versión más nueva utilizada en los sistemas modernos basados en Linux, en la que se cambió el formato de metadatos en el en disco para facilitar su identificación y verificación.
XFS permite crear un volumen de 18 exabytes de tamaño y gestionar archivos individuales de hasta 9 exabytes. El número de archivos está limitado únicamente por la cantidad de espacio a su disposición. El sistema de archivos puede crecer siempre que haya bloques sin asignar e incluso puede abarcar varios dispositivos físicos.
Como un sistema de registro por diario, XFS registra las modificaciones antes de que se confirmen en sus estructuras internas, lo que garantiza su consistencia general en caso de una falla o pérdida de energía.
Estructura básica del sistema de archivos
XFS tiene una organización orientada a los llamados ‘extents’. En lugar de asignar su espacio en bloques individuales, los combina en unidades contiguas de longitud variable denominadas extents. Un solo archivo puede constar de varios extents cuando no hay disponible un rango contiguo en el almacenamiento. Sin embargo, XFS trata de mantener su número lo más pequeño posible y fusionar extents a medida que crece el archivo. La información sobre un archivo (los metadatos del archivo) se almacena en su inodo. Dichos inodos se asignan en fragmentos, 64 por cada uno.
El sistema de archivos en sí se puede dividir en hasta tres partes separadas:
- Sección de datos
La sección de datos contiene los metadatos del sistema de archivos y los datos del usuario. El espacio de almacenamiento en ella se subdivide en grupos de asignación de igual tamaño. El tamaño mínimo de un grupo de asignación es de 16MB y el máximo es de aproximadamente 1TB. Cada grupo de asignación controla de forma autónoma el uso del espacio dentro de sus límites. Por lo tanto, los procesos concurrentes pueden realizar asignaciones en todo el sistema de archivos en paralelo y no interferir entre sí.
Los extents libres en un grupo de asignación se administran mediante un par de árboles B+. Sus entradas contienen información sobre la dirección del bloque inicial de una región de espacio libre y su longitud en bloques. El primer árbol B+ está indexado por el valor de la dirección, mientras que el segundo – por el valor de la longitud.
Las ubicaciones de los inodos dentro de un grupo de asignación también se indexan mediante un árbol B+. Sus registros contienen un offset para cada fragmento de 64 inodos y una marca para cada inodo dentro del fragmento que indica si está en uso.
Se utiliza un enfoque similar para hacer un seguimiento de los extents asignados a los archivos. El descriptor de cada extent, además de su dirección y longitud en bloques, contiene el offset lógico del inicio del archivo y un indicador que caracteriza un extent como preasignado, pero aún no ocupado. Los descriptores de extents generalmente se almacenan como una matriz lineal incrustada en el inodo del archivo. Con todo, si el número de extents es demasiado grande, se indexan utilizando otro árbol B+, cuya raíz se ubica en el inodo del archivo.
XFS emplea la asignación retrasada para mejorar el rendimiento de escritura y reducir la fragmentación del sistema de archivos. Primero se crea un extent virtual en la memoria y se reserva la cantidad adecuada de espacio para él en el sistema de archivos. Aún así, la ubicación exacta de los datos permanece desconocida hasta que XFS tome la decisión de escribirlos. De esta manera, es posible que algunos archivos temporales de corta duración nunca se asignen a bloques reales en el almacenamiento.
- Sección de registro por diario (journal)
En esta área se almacenan las modificaciones a los metadatos del sistema de archivos. En el registro, la entrada para cada elemento estructural consta de información de encabezado que lo describe y una copia de la nueva imagen del elemento tal como debería aparecer en el disco. La entrada permanece en el registro hasta que esos cambios se confirmen realmente en la sección de datos. En caso de un fallo, se puede leer el registro para completar las operaciones interrumpidas y restaurar la consistencia del sistema de archivos. Esta sección puede ubicarse dentro de la propia sección de datos o incluso externamente en un dispositivo separado para una mejor velocidad/confiabilidad, según la configuración.
- Sección en tiempo real
En esta sección opcional se almacenan sólo los datos de los archivos en tiempo real, aquellos con requisitos especiales de velocidad de E/S. Por lo general, se encuentra en un dispositivo de almacenamiento de alto rendimiento separado. La sección se divide en un número de extents de tamaño fijo. La asignación en ella se realiza de una manera más simple. Se gestiona con la ayuda de un mapa de bits lineal y el espacio libre se indexa mediante una matriz bidimensional.
Ventajas y desventajas de XFS
Gracias a su diseño, XFS destaca en la organización de archivos, directorios y volúmenes de gran tamaño, así como una gran cantidad de archivos. Además, ofrece muchas características que lo hacen óptimo para grandes sistemas informáticos y otros entornos que requieren un sistema de archivos confiable de alto rendimiento. Entre ellas vale la pena resaltar:
- Fragmentación y dispersión de archivos reducidas
XFS se esfuerza por almacenar archivos de la forma más contigua posible. El concepto de extents le permite asignar eficientemente los rangos libres de bloques adyacentes, mientras que los árboles B+ facilitan la búsqueda de extents libres. Si hay "agujeros" en un archivo, XFS simplemente omite ellos, sin desperdiciar el espacio de almacenamiento en bloques vacíos. El uso de la asignación retrasada le permite estimar el tamaño final del archivo. Una vez determinado el número de bloques para asignar, XFS a menudo logra ajustar todo el archivo en un solo extent, siempre que haya espacio contiguo para almacenarlo, o al menos asignarlo en extents mucho más grandes, si no sería posible de otra manera. En adición, el almacenamiento en búfer de los archivos temporales reduce su impacto en la fragmentación y la cantidad de actualizaciones de metadatos.
- Idoneidad para sistemas de almacenamiento de varios componentes
XFS puede abarcar múltiples dispositivos de almacenamiento y tiene su propio administrador de volúmenes. Para matrices de discos en bandas/stripes (por ejemplo, RAID 5), se puede definir el tamaño de cada unidad de stripe y el número de unidades por stripe en el momento de la creación del sistema de archivos. XFS utilizará esta información para organizar los datos de acuerdo con las especificaciones del almacenamiento y así lograr un mejor rendimiento.
El administrador de volúmenes XLV utilizado por XFS sirve como una capa adicional de abstracción entre el sistema de archivos y los dispositivos de almacenamiento físico subyacentes. Gracias a él, XFS soporta el striping de discos (división en bandas) para un mayor rendimiento de E/S, el espejo (mirroring o duplicación) para una mayor confiabilidad y la concatenación para crear volúmenes lógicos muy grandes. Asimismo, XLV permite realizar la reconfiguración en línea del volumen ya montado y activo. Por ejemplo, se puede expandir el tamaño del volumen o desfragmentarlo casi sin tiempo de inactividad.
- Operaciones de E/S rápidas paralelas
XFS está optimizado para el acceso paralelo. Como ya se ha mencionado, divide el espacio de almacenamiento en grupos de asignación independientes. Cada grupo de asignación funciona casi como un sistema de archivos separado: controla el uso del espacio por sí mismo y escribe sus propios metadatos. Así que, dichos grupos de asignación pueden ser abordados simultáneamente por el kernel y múltiples operaciones paralelas no afectan el rendimiento.
- Altas probabilidades de recuperación
XFS utiliza el journal de metadatos, lo que facilita su recuperación después de fallas del sistema o cortes de energía. Los datos del usuario, en caso de pérdida, también son muy probables de recuperarse, aunque con herramientas externas de recuperación de datos, como UFS Explorer o Recovery Explorer. Cuando se elimina un archivo, el sistema de archivos borra parcialmente la información sobre su inodo y actualiza el árbol B+ de extents libres. La información sobre el nombre del archivo se desenlaza de la entrada de directorio correspondiente. Sin embargo, con la ayuda de la heurística, el software adecuado puede encontrar el nombre, el tamaño y la posición de dicho archivo redondeado al bloque. La probabilidad de que se restaure es cercana al 100%, y con su nombre real – al 80%. En el caso de formateo accidental del sistema de archivos, la información sobre los extents utilizados se destruye y los grupos de asignación se actualizan. No obstante, la información sobre los archivos del usuario permanece en el almacenamiento, por lo que es casi 100% probable que el software recupere ellos.
Sin embargo, este robusto sistema de archivos tiene unos puntos débiles. En primer lugar, XFS no utiliza sumas de verificación (checksums). Por esto no puede garantizar que los datos almacenados en él permanezcan siempre intactos. Algunos archivos pueden corromperse silenciosamente y los bits dañados pueden descubrirse demasiado tarde, lo que puede resultar en una pérdida de datos grave. Por otro lado, XFS no registra ningún cambio en los datos del usuario, como lo hace con sus estructuras internas. De esta manera, un cierre inesperado del sistema operativo puede provocar la pérdida de información de los archivos creados o modificados recientemente. Asimismo, no hay opción para deshabilitar el registro por diario por completo, lo que puede afectar la vida útil de las unidades de estado sólido. Eventualmente, este sistema de archivos no puede presumir de una amplia compatibilidad. Este hecho puede ser un problema en el caso de un dispositivo externo o un sistema de arranque dual, ya que sistemas operativos como Windows y macOS no son nativamente compatibles con XFS.
En general, aunque tiene algunas desventajas menores, XFS es un sistema de archivos bastante confiable y versátil. Por lo tanto, puede ser una excelente opción de formato, especialmente para soluciones de almacenamiento de gran capacidad.
Última actualización: 20 de agosto de 2022