Los sistemas de archivos de Linux

basic concepts of varios file systems of Linux

A diferencia de Windows y macOS que están estrictamente controlados por las corporaciones Microsoft y Apple respectivamente, Linux es un gran proyecto de código abierto desarrollado por una comunidad de entusiastas. Su código siempre permanece disponible para aquellos que quieran contribuir, y cualquiera es libre de modificarlo según sus requisitos individuales o crear sus propias distribuciones sobre su base. Es por eso que Linux existe en tantas variantes, y lo mismo ocurre con su sistema de archivos, una parte fundamental de cualquier sistema operativo como se menciona en el artículo sobre los conceptos básicos del sistema de archivos. Su núcleo soporta numerosos formatos, pero los más utilizados son los de la familia Ext, XFS, Btrfs, F2FS, JFS y ReiserFS. A continuación están sus descripciones breves con las principales especificidades.

Tenga en cuenta: Linux también proporciona acceso de lectura y escritura a sistemas de archivos de otras plataformas, como NTFS, FAT32 y exFAT de Windows de Microsoft, HFS+ de macOS y ZFS de BSD, Solaris, Unix que se describen en los artículos correspondientes.


Ext

Ext (del inglés Extended File System, Sistema de archivos extendido) se lanzó en 1992 como el primer formato diseñado específicamente para Linux. Sin embargo, tenía limitaciones de rendimiento serias y se reemplazó pronto por Ext2. Este sistema de archivos y sus revisiones posteriores, Ext3 y Ext4, se convirtieron en la opción predeterminada para la gran mayoría de las distribuciones de Linux.

Ext2 ha demostrado ser más eficiente debido a su estructura que se basa en el concepto de inodos. Dicho descriptor de índice (inodo) contiene los atributos de un objeto particular, como un archivo o un directorio, y apunta a las ubicaciones de sus datos. En Ext2, el espacio de almacenamiento se divide en bloques que forman unidades más grandes denominadas Grupos de bloques (Block Groups). La información sobre todos los Grupos de bloques se almacena en la Tabla de descriptores (Descriptor Table) ubicada justo a continuación del Superbloque (Superblock). Cada Grupo de bloques almacena inodos en su propia Tabla de inodos (Inode Table). Adicionalmente, monitorea el estado de sus bloques e inodos utilizando los bitmaps de bloque y de inodo respectivamente. Mientras tanto, el nombre de un archivo o un directorio no forma parte de su inodo: los nombres se asignan a los números de inodo correspondientes a través de directorios, implementados como un tipo especial de archivos.

La mayoría de los sistemas de archivos de Linux son similares en el sentido de que el nombre no se considera un atributo y más bien se define como un alias de un archivo en un directorio determinado. Un objeto de archivo puede estar vinculado desde muchas ubicaciones y existir con diferentes nombres (los llamados enlaces duros o físicos). Esto puede conducir a dificultades graves e incluso insuperables en la recuperación de nombres de archivos después de la eliminación de archivos o en caso de daños lógicos.

Ext3 es, de hecho, una versión mejorada de Ext2 que soporta el registro por diario (journaling). En Ext3, el registro por diario está organizado como un archivo de registro (log) que almacena todos los cambios en el sistema de archivos y lo protege de la corrupción en caso de falla.

En Ext4, se cambió el método de asignación de datos de bloques individuales a extents. La idea detrás de esto es escribir la mayor parte de los datos del archivo en un área continua y luego anotar sólo la dirección de su primer bloque y la cantidad de bloques en la secuencia. Hasta cuatro extents pueden almacenarse directamente en el inodo, mientras que el resto se organizan como un árbol B+. Además, Ext4 pospone la operación hasta que los datos estén realmente metidos en el disco y, así minimiza la fragmentación.

En general, se considera uno de los sistemas de archivos de propósito general más flexibles que también ha ganado reputación por su estabilidad sólida.

XFS

XFS (del inglés Extended File System, Sistema de archivos extendido) es otro sistema de archivos maduro que fue creado por Silicon Graphics e inicialmente empleado en los servidores IRIX de la empresa. En 2001, llegó al núcleo de Linux y ahora se soporta en la mayoría de las distribuciones de Linux, algunas de las cuales, como, por ejemplo, Red Hat Enterprise Linux, incluso lo usan de forma predeterminada.

Este tipo de sistema de ficheros está optimizado para almacenar archivos y volúmenes muy grandes en un solo host. Él divide el espacio de almacenamiento en áreas de igual tamaño denominadas Grupos de asignación (Allocation Groups). Cada uno de los grupos opera como un sistema de archivos distinto, es decir, tiene su propio Superbloque (Superblock) y maneja sus propias estructuras y el uso del espacio. Este último se controla con la ayuda de los árboles B+, uno de los cuales registra el primer bloque en el área de espacio libre continuo y el otro, el número de bloques de los que se compone. Los bloques de almacenamiento se asignan a los archivos aplicando el mismo enfoque basado en los extents. En XFS, todos los archivos y directorios están representados por sus inodos individuales. La asignación de los extents puede almacenarse directamente en el inodo o rastrearse mediante otro árbol B+ vinculado a él en caso de un archivo muy grande o fragmentado. Y al igual que los inodos en Ext, estos no contienen los nombres que, a su vez, están disponibles sólo en las entradas de directorio correspondientes.

XFS emplea el registro por diario (journaling) para hacer cualquier actualización de sus metadatos. Todos los cambios se escriben primero en el Registro (Journal) antes de que se modifiquen los bloques reales, lo que permite su recuperación instantánea en caso de contratiempos. En general, este tipo de sistema de archivos es altamente escalable y funciona muy bien en el hardware de servidor.

Btrfs

Btrfs (del inglés B-tree File System, Sistema de archivos del árbol B) es uno de los formatos de nueva generación más populares para Linux y se está esforzando mucho para hacerlo estable. Fue desarrollado por Oracle y se soporta por el núcleo principal de Linux desde 2009. Fedora y SUSE ya lo emplean de forma predeterminada.

Btrfs está ajustado para funcionar en una amplia gama de dispositivos, desde teléfonos inteligentes hasta servidores de gama alta. Además, cuenta con unas características de un administrador de volúmenes lógicos, puede distribuirse entre múltiples almacenamientos y brinda un montón de otras posibilidades avanzadas.

Como sugiere su nombre, Btrfs se basa en gran medida en los árboles B, cada uno compuesto por nodos internos y hojas. Un nodo interno apunta a un nodo secundario o una hoja, mientras que una hoja contiene un elemento con cierta información. El diseño y el contenido reales de un elemento dependen del tipo de árbol B dado. El árbol B Raíz (Root B-tree), cuya ubicación está disponible en el Superbloque (Superblock), tiene referencias al resto de los árboles B. El árbol B Fragmentos (Chunk B-tree) gestiona el mapeo de direcciones lógicas a físicas, mientras que el árbol B Dispositivos (Device B-tree) vincula a la inversa los bloques físicos de los dispositivos subyacentes con sus direcciones virtuales. El árbol B Sistema de archivos (File System B-tree) es responsable de la distribución de archivos y carpetas. Los archivos pequeños se almacenan allí mismo, en los elementos extents internos. Los grandes se colocan afuera en las áreas contiguas llamadas extents. En este caso, un elemento de extent refiere a todos los extents que contienen los datos del archivo. Los elementos de directorio incluyen nombres de archivo y apuntan a sus elementos de inodo. Los elementos de inodo, a su vez, se utilizan para almacenar otras propiedades, como el tamaño, los permisos, etc.

Btrfs es un sistema de archivos que usa Copy-on-Write (CoW) o Copiar en escrito (VACA). En lugar de emplear el registro (journal), él hace copias de los bloques antes de modificarlos y luego escribe estos datos en una ubicación libre diferente. Este mecanismo ayuda a evitar el riesgo de corrupción de datos en caso de que se interrumpa una actualización, por ejemplo, debido a una pérdida de energía. Gracias a esta y a una amplia variedad de otras características atractivas, Btrfs está ganando cada vez más adeptos entre los usuarios modernos de Linux.

F2FS

F2FS (del inglés Flash-Friendly File System, Sistema de archivos compatible con memoria flash) es otro formato que fue introducido por Samsung Electronics en 2012. Ha sido diseñado específicamente para los dispositivos de almacenamiento basados en la memoria flash NAND y, por lo tanto, se utiliza más ampliamente en los teléfonos inteligentes modernos y medios de almacenamiento portátiles (extraíbles).

F2FS funciona aplicando el enfoque del sistema de ficheros con estructura de registro (LFS o log-structured file systema) y tiene en cuenta las peculiaridades de los dispositivos de memoria flash, como el tiempo de acceso constante y el número limitado de ciclos de reescritura de datos. En lugar de crear un solo fragmento grande para escribir, F2FS ensambla bloques en fragmentos separados (hasta 6) que se escriben simultáneamente.

Él divide el espacio de almacenamiento en segmentos de tamaño fijo. Los segmentos consecutivos forman una sección y varias secciones constituyen una zona. La asignación de datos en ellos se realiza con la ayuda de nodos. Estos últimos vienen en tres tipos: directos, indirectos e inodos. Un inodo almacena los metadatos, incluidos el nombre, el tamaño y otras propiedades del archivo; un nodo directo indica la ubicación de sus bloques de datos, mientras que un nodo indirecto apunta a los bloques en otros nodos. Las direcciones físicas de estos nodos se pueden encontrar en la Tabla de direcciones de nodos (Node Address Table o NIT). El contenido en sí se almacena en el Área principal (Main Area). Las secciones en ella separan los bloques de datos de los bloques de nodos con información de servicio. El estado de uso de todos los bloques se registra en la Tabla de información de segmento (Segment Information Table o SIT). El Área de resumen de segmento (Segment Summary Area o SSA) especifica qué bloques están asignados a qué nodo.

Cuando se le faltan segmentos libres, F2FS se limpia en segundo plano, cuando el sistema está inactivo. El algoritmo de limpieza selecciona los segmentos a limpiar en función del número de bloques utilizados según la tabla SIT o por su "antigüedad".

La organización descrita hace que F2FS funcione bastante bien en los almacenamientos de estado sólido. Sin embargo, hasta ahora, se ha aplicado principalmente en los dispositivos portátiles y rara vez se ha encontrado en los equipos de escritorio y servidores.

JFS

JFS (del inglés Journaled File System, Sistema de archivos de registro) fue creado por IBM en 1990. La versión original, a veces denominada JFS1, se implementó en el sistema operativo AIX de la empresa. Más tarde, se lanzó JFS2 que se llegó a Linux después de hacerse de código abierto.

Un volumen JFS se compone de regiones denominadas Grupos de asignación (Allocation Groups) cada uno de los cuales contiene uno o más Conjuntos de archivos (FileSets). Todos los archivos y directorios están descritos por sus inodos individuales, mientras que el contenido real está representado por uno o más extents. Todos los extents están indexados por un árbol B+ dedicado. El contenido de los directorios pequeños se almacena dentro de sus inodos, mientras que los más grandes están organizados como árboles B+. Los árboles B+ también controlan el uso del espacio de almacenamiento: el primer árbol almacena los bloques iniciales de los extents libres y el segundo, el número de extents libres. JFS también tiene un área de registro separada y escribe en ella cada vez que se producen cambios en los metadatos.

En general, JFS se considera un sistema de archivos rápido y confiable. Aún así, rara vez se mejora y ahora está cayendo en desuso, siendo superado por opciones más modernas.

ReiserFS

ReiserFS es un formato alternativo de Linux que está optimizado para almacenar una gran cantidad de archivos pequeños. Fue diseñado por Namesys en 2001 y trajo una serie de características nuevas que se consideraron muy innovadoras en el momento de su presentación. No obstante, finalmente, su mantenimiento se entregó a voluntarios debido a ciertos problemas técnicos.

ReiserFS se basa en el árbol S+ compuesto por nodos internos y secundarios (hoja). Esta estructura se utiliza para gestionar todos los archivos, directorios y metadatos. Contiene elementos de cuatro tipos básicos: directos, indirectos, de directorio y de estadísticas. Los elementos directos contienen datos reales, los indirectos vinculan a ciertos bloques de datos, los de directorio representan entradas en un directorio y los de estadísticas incluyen propiedades de archivos y carpetas. Cada elemento tiene su clave única que se usa para ubicarlo en el árbol. Esta clave incluye el identificador, la dirección y el tipo del elemento.

Los archivos y fragmentos de archivos que no ocupan todo el bloque se combinan y se almacenan directamente en los nodos hoja (secundarios) del árbol S+. Este mecanismo se denomina tail-packing (empaquetado de cola) y ayuda a reducir la cantidad del espacio desperdiciado y la fragmentación. Además, ReiserFS no realiza ningún cambio directamente en el árbol S+: primero lo escribe en el Registro (Journal) y luego lo copia en la ubicación requerida en el almacenamiento.

Con todo, ReiserFS tiene buenas capacidades de búsqueda y permite asignar archivos pequeños de manera compacta. Pero este formato ya no se soporta activamente y es poco probable que siga siendo relevante en el futuro próximo.

Sugerencia: La información sobre la posibilidad de recuperar datos de los sistemas de archivos anteriormente mencionados se puede encontrar en los artículos que describen los detalles de la recuperación de datos en diferentes sistemas operativos y las posibilidades de recuperación de datos. Para comprender cómo llevar a cabo el procedimiento como tal, por favor, consulte el manual sobre la recuperación de datos en Linux.

Y si desea conocer los sistemas de archivos que se utilizan en otros entornos, lea los siguientes artículos:

Last update: el 25 de abril de 2023

Si le gusta este artículo, compártalo en sus redes sociales: