Los sistemas de archivos de 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 a disposición de quienes 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, así como XFS, Btrfs, F2FS, JFS y ReiserFS. A continuación, se ofrecen sus descripciones breves con las especificidades clave. También puede familiarizarse con las principales tecnologías relacionadas con estos sistemas de archivos de Linux.
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 opciones por defecto en 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) que va justo después del Superbloque (Superblock). Cada Grupo de bloques almacena inodos en su propia Tabla de inodos (Inode Table) y también monitorea el estado de sus bloques e inodos utilizando los bitmaps de bloques y de inodos 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 y se implementan 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 bajo 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 dicho cambio consiste en 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. 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 utilizan de forma predeterminada.
Btrfs ha sido ajustado para funcionar en una amplia gama de dispositivos, desde teléfonos inteligentes hasta servidores de gama alta. Asimismo, 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 ficheros que usa Copy-on-Write (CoW) o Copiar en escrito (VACA). En lugar de emplear el registro (journal), crea copias de 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, así como a un montón de otras características atractivas, Btrfs está ganando a cada vez más adeptos entre los usuarios 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. Se desarrolló 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 system) 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.
Dicho sistema de ficheros divide el espacio de almacenamiento en segmentos de tamaño fijo. Los segmentos consecutivos forman una sección, mientras que 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 que contienen 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 no hay suficientes 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. Aún así, se emplea principalmente en los dispositivos portátiles y rara vez se puede encontrar 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 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 se organizan en forma de á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, 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 (de hojas). 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 encontrarlo 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 de hojas (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.
Otras tecnologías de almacenamiento de datos de Linux
Los sistemas de archivos de Linux son generalmente autónomos y funcionan directamente en una partición, cuando se utilizan en las unidades independientes comunes. Sin embargo, también se pueden emplear tecnologías adicionales entre el almacenamiento físico y un sistema de archivos de Linux para proporcionar funciones más avanzadas. Algunas de esas tecnologías como, por ejemplo, Btrfs, van incluso más allá al integrar ciertas características en su funcionalidad principal, lo que permite evitar usar capas adicionales.
Estas son algunas de las tecnologías de almacenamiento más comunes con las que se pueden combinar los sistemas de archivos de Linux:
-
Logical Volume Manager (LVM): una tecnología de gestión de discos que asegura una asignación más flexible y eficiente de espacio de almacenamiento en comparación con la división en particiones tradicional. Es compatible con la mayoría de los sistemas de archivos de Linux, incluidos Ext2, Ext3, Ext4, XFS, Btrfs, F2FS, JFS y ReiserFS. Con su ayuda, se puede crear grupos de almacenamiento (pools) que abarcan varios dispositivos de almacenamiento físicos y configurar volúmenes lógicos ajustables en ellos. El aprovisionamiento fino (thin provisioning), una característica especial de LVM, permite optimizar el uso del almacenamiento de datos al asignar espacio de almacenamiento de forma dinámica, sólo cuando los datos se escriben realmente en los volúmenes. En este caso, se utiliza un "grupo de almacenamiento fino" (thin pool) dedicado como fuente, y los volúmenes creados dentro de él se denominan "volúmenes finos". Un volumen como este puede tener un tamaño virtual mayor de la cantidad real de espacio de almacenamiento disponible en el grupo de almacenamiento fino.
Sugerencia: Consulte la siguiente guía, si necesita recuperar datos de un volumen LVM con aprovisionamiento fino.
-
mdadm: una utilidad de Linux designada para crear y administrar RAID de software. Combina múltiples unidades físicas en una sola unidad lógica, permitiendo mejorar el rendimiento del almacenamiento y/o asegurar su tolerancia a fallas. mdadm es compatible con varios tipos de RAID, incluidos RAID 0 (striping o bandas), RAID 1 (mirroring o espejo), RAID 5 (striping con paridad), RAID 6 (paridad doble) y RAID 10 (espejo de bandas). El arreglo RAID resultante aparece como un solo dispositivo de bloque lógico en Linux y puede formatearse con cualquier sistema de archivos compatible con el núcleo.
Sugerencia: Lea las instrucciones respectivas, si necesita recuperar datos de un arreglo RAID.
-
LUKS (Linux Unified Key Setup): un estándar de cifrado de dispositivos de bloque en Linux que hace que los datos almacenados en ellos se vuelvan inaccesibles sin la clave de cifrado correcta. LUKS es compatible con una amplia gama de sistemas de archivos de Linux, incluidos Ext2, Ext3, Ext4, XFS, Btrfs, F2FS, JFS y ReiserFS. Asimismo, se puede utilizar junto con otras tecnologías de almacenamiento de Linux, como LVM o mdadm, para cifrar los volúmenes administrados por estos sistemas.
Sugerencia: Por favor, siga las instrucciones, si necesita recuperar datos de un volumen cifrado con LUKS.
-
eCryptfs: un sistema de archivos criptográfico nativo de Linux. Permite cifrar directorios o archivos individuales dentro de un volumen, sin necesidad de emplear el cifrado de disco completo. Al funcionar como un sistema de archivos "apilado", eCryptfs superpone su cifrado encima de un sistema de archivos existente, preservando la estructura del último. De esta manera, un sistema de archivos regular de Linux, como, por ejemplo, Ext2, Ext3, Ext4, XFS, Btrfs, F2FS, JFS o ReiserFS sigue siendo responsable de administrar los bloques de datos y otros metadatos, mientras que eCryptfs garantiza que el contenido de los archivos se cifre y descifre a medida que se accede a ellos.
Sugerencia: Consulte las instrucciones respectivas, si necesita recuperar datos cifrados con eCryptfs.
-
Btrfs-RAID: una funcionalidad de RAID integrada en el sistema de archivos Btrfs. Permite a los usuarios crear volúmenes de almacenamiento de datos flexibles y tolerantes a fallas al unir múltiples dispositivos de almacenamiento. Btrfs es compatible con los arreglos RAID de diferentes tipos, incluidos RAID 0 (striping o bandas), RAID 1 (mirroring o espejo), RAID 5 (striping con paridad), RAID 6 (paridad doble) y RAID 10 (espejo de bandas). A diferencia de los RAID tradicionales, Btrfs-RAID permite agregar, quitar o reemplazar unidades de la matriz de forma dinámica, sin desconectar el sistema (es decir, ponerlo 'fuera de línea').
Sugerencia: Siga las instrucciones del artículo dedicado para recuperar datos de Btrfs-RAID.
Y si busca información sobre los sistemas de archivos que se utilizan en otros entornos, lea los siguientes artículos:
Last update: el 09 de noviembre de 2024