El sistema Linux original usaba un sistema de archivos simple que imitaba la funcionalidad del sistema de archivos Unix. En este tutorial, analizaremos el sistema de archivos básico utilizado en Linux.
El sistema de archivos ext
El sistema de archivos original introducido con el sistema operativo Linux se denomina sistema de archivos extendido (o simplemente ext para abreviar). Proporciona un sistema de archivos básico similar a Unix para Linux, utilizando directorios virtuales para manejar dispositivos físicos y almacenando datos en bloques de longitud fija en los dispositivos físicos.
El sistema de archivos ext utiliza un sistema llamado inodos para rastrear información sobre los archivos almacenados en el directorio virtual. El sistema de inodos crea una tabla separada en cada dispositivo físico, denominada tabla de inodos, para almacenar la información del archivo. Cada archivo almacenado en el directorio virtual tiene una entrada en la tabla de inodos. La parte extendida del nombre proviene de los datos adicionales que rastrea en cada archivo, que consisten en:
- El nombre del archivo
- El tamaño del archivo
- El propietario del archivo
- El grupo al que pertenece el archivo
- Permisos de acceso para el archivo
- Puntero a cada bloque de disco que contiene datos del archivo
Linux hace referencia a cada inodo en la tabla de inodos usando un número único (llamado número de inodo), asignado por el sistema de archivos a medida que se crean los archivos de datos. El sistema de archivos usa el número de inodo para identificar el archivo en lugar de tener que usar la ruta y el nombre completo del archivo.
El sistema de archivos ext2
El sistema de archivos ext original tenía bastantes limitaciones, como limitar los archivos a solo 2 GB de tamaño. No mucho después de la introducción de Linux, el sistema de archivos ext se actualizó para crear el segundo sistema de archivos extendido, llamado ext2. Como puede adivinar, el sistema de archivos ext2 es una expansión de las capacidades básicas del sistema de archivos ext pero mantiene la misma estructura. El sistema de archivos ext2 expande el formato de la tabla de inodos para rastrear información adicional sobre cada archivo en el sistema.
La tabla de inodos ext2 agrega los valores de tiempo de creación, modificación y último acceso de los archivos para ayudar a los administradores del sistema a rastrear el acceso a los archivos en el sistema. El sistema de archivos ext2 también aumenta el tamaño máximo de archivo permitido a 2 TB (luego, en versiones posteriores de ext2, se incrementó a 32 TB) para ayudar a acomodar archivos grandes que se encuentran comúnmente en los servidores de bases de datos.
Además de expandir la tabla de inodos, el sistema de archivos ext2 también cambió la forma en que los archivos se almacenan en los bloques de datos. Un problema común con el sistema de archivos ext era que a medida que se escribe un archivo en el dispositivo físico, los bloques utilizados para almacenar los datos tienden a estar dispersos por todo el dispositivo (lo que se denomina fragmentación). La fragmentación de bloques de datos puede reducir el rendimiento del sistema de archivos, ya que lleva más tiempo buscar en el dispositivo de almacenamiento para acceder a todos los bloques de un archivo específico.
El sistema de archivos ext2 ayuda a reducir la fragmentación al asignar bloques de disco en grupos cuando guarda un archivo. Al agrupar los bloques de datos para un archivo, el sistema de archivos no tiene que buscar en todo el dispositivo físico los bloques de datos para leer el archivo. El sistema de archivos ext2 fue el sistema de archivos predeterminado utilizado en las distribuciones de Linux durante muchos años, pero también tenía sus limitaciones. La tabla de inodos, si bien es una buena característica que permite que el sistema de archivos rastree información adicional sobre los archivos, puede causar problemas que pueden ser fatales para el sistema. Cada vez que el sistema de archivos almacena o actualiza un archivo, tiene que modificar la tabla de inodos con la nueva información. El problema es que esto no siempre es una acción fluida.
Si algo le sucediera al sistema informático entre el archivo que se almacena y la tabla de inodos que se actualiza, los dos perderían la sincronización. El sistema de archivos ext2 es conocido por corromperse fácilmente debido a fallas del sistema y cortes de energía. Incluso si los datos del archivo se almacenan correctamente en el dispositivo físico, si la entrada de la tabla de inodos no se completó, ¡el sistema de archivos ext2 ni siquiera sabría que el archivo existe! No pasó mucho tiempo antes de que los desarrolladores exploraran una vía diferente de los sistemas de archivos de Linux.
Sistemas de archivos de diario
Los sistemas de archivos de diario proporcionan un nuevo nivel de seguridad al sistema Linux. En lugar de escribir datos directamente en el dispositivo de almacenamiento y luego actualizar la tabla de inodos, los sistemas de archivos de diario escriben primero los cambios de archivo en un archivo temporal (llamado el diario). Una vez que los datos se escriben con éxito en el dispositivo de almacenamiento y en la tabla de inodos, se elimina la entrada del diario.
Si el sistema se bloquea o sufre un corte de energía antes de que los datos puedan escribirse en el dispositivo de almacenamiento, el sistema de archivos de diario simplemente lee el archivo de diario y procesa los datos sobrantes no confirmados. Hay tres métodos diferentes de registro en diario comúnmente utilizados en Linux, cada uno con diferentes niveles de protección. Estos se muestran a continuación en la tabla.
Métodos del sistema de archivos de diario:
Método | Descripción |
---|---|
Modo de datos | Tanto el inodo como los datos del archivo se registran en diario. Bajo riesgo de pérdida de datos, pero bajo rendimiento. |
Modo ordenado | Solo se escriben datos de inodo en el diario, pero no se eliminan hasta que los datos del archivo se escriben con éxito. Buen compromiso entre rendimiento y seguridad. |
Modo de reescritura | Solo datos de inodo escritos en el diario, sin control sobre cuándo se escriben los datos del archivo. Mayor riesgo de perder datos, pero aún mejor que no usar el diario. |
Limitación
El método de registro en diario del modo de datos es, con mucho, el más seguro para proteger los datos, pero también es el más lento. Todos los datos escritos en un dispositivo de almacenamiento deben escribirse dos veces, una vez en el diario y luego otra vez en el dispositivo de almacenamiento real. Esto puede causar un rendimiento deficiente, especialmente para los sistemas que escriben muchos datos. A lo largo de los años, han aparecido en Linux algunos sistemas de archivos de diario diferentes. Las siguientes secciones describen los populares sistemas de archivos de diario de Linux disponibles.
Los sistemas de archivos de diario extendidos de Linux
El mismo grupo que desarrolló los sistemas de archivos ext y ext2 como parte del proyecto Linux también creó versiones de diario de los sistemas de archivos. Estos sistemas de archivos de diario son compatibles con el sistema de archivos ext2 y es fácil convertirlos de un lado a otro. Actualmente existen dos sistemas de archivos de diario independientes basados en el sistema de archivos ext2.
El sistema de archivos ext3
El sistema de archivos ext3 se agregó al kernel de Linux en 2001 y, hasta hace poco, era el sistema de archivos predeterminado utilizado por casi todas las distribuciones de Linux. Utiliza la misma estructura de tabla de inodos que el sistema de archivos ext2, pero agrega un archivo de diario a cada dispositivo de almacenamiento para registrar los datos escritos en el dispositivo de almacenamiento.
De forma predeterminada, el sistema de archivos ext3 utiliza el método de modo ordenado de diario, solo escribe la información de inodo en el archivo de diario, pero no la elimina hasta que los bloques de datos se hayan escrito correctamente en el dispositivo de almacenamiento. Puede cambiar el método de registro en diario utilizado en el sistema de archivos ext3 a los modos de datos o escritura diferida con una simple opción de línea de comandos al crear el sistema de archivos.
Si bien el sistema de archivos ext3 agregó un diario básico al sistema de archivos de Linux, todavía faltaban algunas cosas. Por ejemplo, el sistema de archivos ext3 no proporciona ninguna recuperación de la eliminación accidental de archivos, no hay compresión de datos integrada disponible (aunque hay un parche que se puede instalar por separado que proporciona esta función) y el sistema de archivos ext3 no No es compatible con el cifrado de archivos. Por esos motivos, los desarrolladores del proyecto Linux eligen continuar trabajando para mejorar el sistema de archivos ext3.
El sistema de archivos ext4
El resultado de expandir el sistema de archivos ext3 fue (como probablemente haya adivinado) el sistema de archivos ext4. El sistema de archivos ext4 se admitió oficialmente en el kernel de Linux en 2008 y ahora es el sistema de archivos predeterminado que se usa en las distribuciones de Linux más populares, como Fedora y Ubuntu.
Además, para admitir la compresión y el cifrado, el sistema de archivos ext4 también admite una característica denominada extensiones. Las extensiones asignan espacio en un dispositivo de almacenamiento en bloques y solo almacenan la ubicación del bloque inicial en la tabla de inodos. Esto ayuda a ahorrar espacio en la tabla de inodos al no tener que enumerar todos los bloques de datos utilizados para almacenar datos del archivo.
El sistema de archivos ext4 también incorpora la preasignación de bloques. Si desea reservar espacio en un dispositivo de almacenamiento para un archivo que sabe que aumentará de tamaño, con el sistema de archivos ext4 es posible asignar todos los bloques esperados para el archivo, no solo los bloques que existen físicamente. El sistema de archivos ext4 llena los bloques de datos reservados con ceros y sabe que no debe asignarlos a ningún otro archivo.
El sistema de archivos reiser
En 2001, Hans Reiser creó el primer sistema de archivos de diario para Linux, llamado ReiserFS. El sistema de archivos ReiserFS solo es compatible con el modo de diario de reescritura, escribiendo solo los datos de la tabla de inodos en el archivo de diario. Debido a que solo escribe los datos de la tabla de inodos en el diario, el sistema de archivos ReiserFS es uno de los sistemas de archivos de diario más rápidos en Linux.
Dos características interesantes incorporadas en el sistema de archivos ReiserFS son que puede cambiar el tamaño de un sistema de archivos existente mientras aún está activo y que utiliza una técnica llamada tailpacking, que mete datos de un archivo en un espacio vacío en un bloque de datos de otro archivo. La función de cambio de tamaño del sistema de archivos activo es excelente si tiene que expandir un sistema de archivos ya creado para acomodar más datos.
El sistema de archivos registrados (JFS)
Posiblemente uno de los sistemas de archivos de diario más antiguos, el sistema de archivos de diario (JFS) fue desarrollado por IBM en 1990 para su versión AIX de Unix. Sin embargo, no fue hasta su segunda versión que fue portado al entorno Linux.
Nota – El nombre oficial de IBM de la segunda versión del sistema de archivos JFS es JFS2, pero la mayoría de los sistemas Linux se refieren a él simplemente como JFS.El sistema de archivos JFS utiliza el método de diario ordenado, almacenando solo los datos de la tabla de inodos en el diario, pero no los elimina hasta que los datos reales del archivo se escriben en el dispositivo de almacenamiento. Este método es un compromiso entre la velocidad de ReiserFS y la integridad del método de registro en diario del modo de datos.
El sistema de archivos JFS utiliza la asignación de archivos basada en la extensión, asignando un grupo de bloques para cada archivo escrito en el dispositivo de almacenamiento. Este método proporciona menos fragmentación en el dispositivo de almacenamiento. Fuera de las ofertas de IBM Linux, el sistema de archivos JFS no se usa popularmente, pero es posible que se encuentre con él en su viaje a Linux.
El sistema de archivos xfs
El sistema de archivos de diario XFS es otro sistema de archivos creado originalmente para un sistema Unix comercial que se abrió paso en el mundo Linux. Silicon Graphics Incorporated (SGI) creó originalmente XFS en 1994 para su sistema comercial IRIX Unix. Fue lanzado al entorno Linux para uso común en 2002.
El sistema de archivos XFS utiliza el modo de escritura diferida de registro en diario, que proporciona un alto rendimiento pero presenta una cantidad de riesgo porque los datos reales no se almacenan en el archivo de diario. El sistema de archivos XFS también permite cambiar el tamaño en línea del sistema de archivos, similar al sistema de archivos ReiserFS, excepto que los sistemas de archivos XFS solo se pueden expandir y no reducir.