34.2. Los sistemas de archivos más importantes en Linux

Contrariamente a lo que ocurría hace dos o tres años, la elección de un sistema de archivos en Linux ya no es una cuestión de segundos (¿Ext2 o ReiserFS?). A partir de la versión 2.4, el kernel ofrece una gran selección de sistemas de archivos. A continuación le mostramos un resumen de las funciones básicas de estos sistemas de archivos y sus ventajas.

Tenga siempre en cuenta que no existe ningún sistema de archivos que pueda funcionar del mismo modo con todas las aplicaciones. Cada sistema de archivos tiene puntos fuertes y débiles que se deben de tener presentes. Ni el sistema de archivos más desarrollado de todo el mundo puede sustituir a la copia de seguridad.

Los conceptos “integridad de los datos” o “coherencia de los datos” no se refieren en este capítulo a la coherencia de los datos que un usuario tiene guardados (los datos que una aplicación escribe en los archivos). La coherencia de estos datos debe quedar asegurada por las aplicaciones mismas.

[Important]Configuración de sistemas de archivos

Mientras no se indique lo contrario explícitamente, todas las acciones de particionamiento así como de creación y edición de sistemas de archivos pueden llevarse a cabo cómodamente con YaST.

34.2.1. ReiserFS

Aunque oficialmente se trata de una de las prestaciones principales de la versión 2.4 del kernel, ReiserFS ha estado disponible desde la versión 6.4 de SUSE Linux como parche para el kernel de SUSE 2.2.x. ReiserFS es producto de la labor de Hans Reiser y del equipo de desarrollo Namesys. ReiserFS se ha perfilado como una alternativa poderosa a Ext2. Sus grandes ventajas son: una mejor administración de la memoria del disco duro, un rendimiento optimizado del acceso al disco y una recuperación más rápida después de una caída del sistema.

Las principales ventajas de ReiserFS son:

Mejor administración de la memoria del disco duro

En ReiserFS, todos los datos se organizan en una estructura llamada B*-balanced tree. La estructura de árbol contribuye a una mejor administración de la memoria del disco duro, ya que los archivos pequeños se pueden guardar directamente en las hojas del B*tree (árbol), en lugar de guardarlos en otro lugar y luego tener que administrar el puntero (pointer) para que apunte al sitio indicado. Además, la memoria no se asignará en unidades de 1 a 4 Kb, sino en la unidad exactamente necesaria. Otra ventaja es el proceso dinámico de inodes. Esto dota al sistema de archivos de una gran flexibilidad frente a los sistemas convencionales, como por ejemplo Ext2, en el que se debe indicar la densidad del inode en el momento de crear el sistema de archivos.

Mejor rendimiento del acceso al disco duro

En los archivos pequeños, tanto los datos del archivo como la información (inode) de “stat_data” se guardan uno al lado del otro. Basta con un único acceso al disco duro para suministrar toda la información necesaria.

Rápida recuperación tras una caída del sistema

Desde el contenido de un diario al seguimiento de las pequeñas modificaciones de metadatos, la comprobación del sistema de archivos se reduce a unos pocos segundos incluso en sistemas de archivos grandes.

Fiabilidad gracias al registro de datos (data journaling)

ReiserFS también soporta el registro de datos y los modos “ordered” de datos (ambos conceptos se explican con más detalle en la Sección 34.2.3, “Ext3”). El modo predeterminado es data=ordered, lo que garantiza la integridad tanto de los datos como de los metadatos. No obstante, el registro se utiliza sólo para los metadatos.

34.2.2. Ext2

El origen de Ext2 se remonta a los primeros días de Linux. Su antecesor, el Extended File System fue implementado en abril de 1992 e integrado en Linux 0.96c. Este sufrió una serie de modificaciones y durante años se le conoció como Ext2 a la vez que se le consideró el sistema de archivos más popular de Linux. Con la introducción del sistema Journaling File y de su tiempo de elaboración tan sorprendentemente corto, Ext2 perdió importancia.

Puede que le sirva de ayuda un pequeño resumen de los puntos fuertes de Ext2 para que comprenda su popularidad entre los usuarios de Linux, que en cierta medida aún hoy lo prefieren como sistema de archivos.

Estabilidad

Con el correr del tiempo, Ext2 ha sufrido muchas mejoras que le han hecho ganarse la reputación de ser “sólido como una roca”. En caso de una caída del sistema en la que el sistema de archivos no puede desmontarse adecuadamente, e2fsck inicia un análisis de los datos del sistema de archivos. Los metadatos se reconstruyen y los archivos o bloques de datos que quedan sueltos se guardan en un directorio denominado lost+found. En contraposición a (la mayoría) de los sistemas de archivos transaccionales o journaling, e2fsck analiza todo el sistema de archivos y no sólo los bits de metadatos modificados. Esto lleva más tiempo que la comprobación de los datos de protocolo de un sistema journaling. Dependiendo del tamaño del sistema de archivos, puede llegar a durar más de media hora. Por esta razón, Ext2 no se escoge para ningún servidor que deba tener un alto rendimiento. Debido a que Ext2 no debe hacerse cargo de ningún diario y a la vez necesita poca memoria, a menudo es más rápido que otros sistemas de archivos.

Fácil actualización

Tomando como base la fortaleza de Ext2, Ext3 podría llegar a convertirse en el sistema de archivos de la próxima generación. Su fiabilidad y estabilidad se complementarían perfectamente con las ventajas de los sistemas de archivos journaling.

34.2.3. Ext3

Ext3 fue concebido por Stephen Tweedie. A diferencia del resto de los sistemas de archivos de “última generación”, no está basado en un nuevo diseño, sino en Ext2. Ambos sistemas de archivos están estrechamente vinculados. Un sistema de archivos Ext3 se puede montar fácilmente sobre un sistema Ext2. La diferencia fundamental entre ambos radica en que Ext3 también soporta journaling. Estas son brevemente las tres ventajas de Ext3:

Actualización sencilla y muy fiable de Ext2

Ya que Ext3 se basa en el código de Ext2, a la vez que comparten formato tanto para el disco como para los metadatos, las actualizaciones no son complicadas. Incluso se pueden llevar a cabo mientras el sistema de archivos Ext2 está montado. El proceso de cambio a otro sistema de archivos journaling, como por ejemplo ReiserFS, JFS, o XFS, puede llegar a ser muy trabajoso debido a que se deben realizar copias de seguridad de todo el sistema de archivos y después instalarlo desde cero. Sin embargo, el cambio a Ext3 puede ser una cuestión de minutos. Además es muy seguro, ya que resulta difícil que la reelaboración de todo un sistema de archivos desde cero no tenga errores. Si se tiene en cuenta la cantidad de sistemas Ext2 disponibles que esperan una actualización a un sistema de archivos journaling, se puede imaginar fácilmente el significado de Ext3 para muchos administradores de sistemas. El pasar de Ext3 a Ext2 es tan fácil como la actualización en sentido contrario. Tan sólo se tiene que desmontar el sistema Ext3 y montarlo como Ext2.

Fiabilidad y rendimiento

Otros sistemas de archivos journaling siguen el principio journaling de “sólo metadatos” (metadata-only). Esto significa que los metadatos permanecen en un estado coherente, lo que sin embargo no puede garantizarse automáticamente para los datos del sistema de archivos. Ext3 tiene capacidad para cuidar tanto de los metadatos como de los datos mismos. Se puede configurar individualmente el detalle con el que Ext3 debe ocuparse de los datos y metadatos. El grado más alto de seguridad (es decir, integridad de los datos) se consigue al arrancar Ext3 en modo data=journal; esto puede hacer que el sistema sea más lento, ya que se guardarán en el diario tanto los datos como los metadatos. Una posibilidad relativamente nueva consiste en la utilización del modo data=ordered, que garantiza la integridad tanto de los datos como de los metadatos a pesar de que sólo realiza journaling para los metadatos. El controlador del sistema de archivos reúne todos los bloques de datos relacionados con la actualización de los metadatos. Estos bloques de datos se escriben en el disco antes de que los metadatos sean actualizados. Con esto se consigue la coherencia de datos y metadatos sin pérdida de rendimiento. Un tercer tipo de modo es data=writeback. De esta forma se puede escribir datos en el sistema de archivos principal después de que los metadatos hayan pasado al diario. Para muchos, esta opción es la mejor configuración en cuanto a rendimiento. Sin embargo, con esta opción puede ocurrir que aparezcan viejos datos en los archivos después de haberse producido una caída del sistema mientras se garantiza la integridad del sistema de archivos. Mientras no se indique otra opción, Ext3 arrancará con la opción predeterminada data=ordered.

34.2.4. Conversión de un sistema de archivos Ext2 a Ext3

Crear el diario (journal):

Ejecute el comando tune2fs -j como usuario root. tune2fs se encarga de crear el diario Ext3 con parámetros estándar. Si por el contrario prefiere definir usted mismo con qué tamaño y en qué dispositivo debe crearse el diario, ejecute tune2fs -J con los parámetros size= y device=. Puede obtener información adicional sobre tune2fs en las páginas del manual.

Determinar el tipo de sistema de archivos en /etc/fstab

Para que el sistema de archivos Ext3 sea detectado como tal, abra el archivo /etc/fstab y cambie el tipo de sistema de archivos de la partición correspondiente de ext2 a ext3. La modificación se aplicará tras reiniciar el sistema.

Uso de Ext3 para el sistema de archivos raíz

Para arrancar el sistema de archivos raíz (root) en ext3, hace falta integrar adicionalmente los módulos ext3 y jbd en el RAM disk inicial initrd. A continuación introduzca estos dos módulos en el archivo /etc/sysconfig/kernel bajo INITRD_MODULES. Posteriormente ejecute el comando mk_initrd.

34.2.5. Reiser4

Inmediatamente después de que el kernel 2.6 viera la luz, un nuevo miembro se sumó a la familia de sistemas de archivos transaccionales: Reiser4. Reiser4 se diferencia sustancialmente de su predecesor ReiserFS (versión 3.6). Introduce el concepto de plugins para configurar las funciones del sistema de archivos y un concepto de seguridad más elaborado.

Concepto de seguridad muy elaborado

Durante el diseño de Reiser4, los desarrolladores pusieron especial énfasis en la implementación de funciones relacionadas con la seguridad. Como consecuencia, Reiser4 incorpora un conjunto de plugins de seguridad dedicados, el más importante de los cuales introduce el concepto de elementos de archivo o “items”. Actualmente, el control de acceso a los archivos se define en función del archivo. Si existe un archivo muy grande que contiene información relevante para varios usuarios, grupos o aplicaciones, los permisos de acceso deben ser poco precisos para incluir a todos los interesados. En Reiser4 es posible dividir este tipo de archivos en porciones más pequeñas (“items”). Los permisos de acceso pueden definirse para cada elemento y usuario, permitiendo una gestión de seguridad de archivos mucho más precisa. El archivo /etc/passwd constituye un ejemplo perfecto. Actualmente, root es el único que puede leer y editar este archivo mientras que el resto de usuarios sólo tiene permiso de lectura. El concepto de “items” de Reiser4 hace que sea posible dividir este archivo en un conjunto de elementos (un “item” por cada usuario) y permitir a usuarios o aplicaciones modificar sus propios datos sin acceder a los datos de otros usuarios. Este concepto favorece tanto la seguridad como la flexibilidad.

Extensiones a través de plugins

Muchas de las funciones inherentes a un sistema de archivos o externas pero usadas normalmente por sistemas de archivos se han implentado en Reiser4 en forma de plugins. Si desea enriquecer el sistema de archivos con nuevas funciones, estos plugins pueden añadirse fácilmente al sistema base sin necesidad de volver a compilar el kernel o reformatear el disco duro.

Estructura mejorada del sistema de archivos gracias a la asignación retardada

Al igual que XFS, Reiser4 soporta la asignación retardada (ver Sección 34.2.7, “XFS”). El uso de la asignación retardada incluso para metadatos puede resultar en una estructura global mejorada.

34.2.6. JFS

JFS, “Journaling File System”, fue desarrollado por IBM para AIX. La primera versión beta de JFS portada a Linux llegó al entorno Linux en el verano del año 2000. La versión 1.0.0 salió a la luz en el año 2001. JFS está diseñado para cumplir las exigencias del entorno de un servidor de alto rendimiento. Al ser un sistema de archivos de 64 bits, JFS soporta archivos grandes y particiones LFS (Large File Support), lo cual es una ventaja más para los entornos de servidor.

Un vistazo más detallado a JFS muestra por qué este sistema de archivos es una buena elección para su servidor Linux:

Journaling eficaz

JFS sigue el principio de “metadata only”. En vez de una comprobación completa, sólo se tienen en cuenta las modificaciones en los metadatos provocadas por las actividades del sistema. Esto ahorra una gran cantidad de tiempo en la fase de recuperación del sistema tras una caída. Las actividades simultáneas que requieren más entradas de protocolo se pueden unir en un grupo en el que la pérdida de rendimiento del sistema de archivos se reduce en gran medida gracias a múltiples procesos de escritura.

Eficiente administración de directorios

JFS abarca diversas estructuras de directorios. En pequeños directorios se permite el almacenamiento directo del contenido del directorio en su inode. En directorios más grandes se utilizan B+trees, que facilitan considerablemente la administración del directorio.

Mejor utilización de la memoria mediante la asignación dinámica de inodes

En Ext2 es necesario indicar el grosor del inode (la memoria ocupada por la información de administración) por adelantado. Con ello se limita la cantidad máxima de archivos o directorios de su sistema de archivos. Esto no es necesario en JFS, puesto que asigna la memoria inode de forma dinámica y la pone a disposición del sistema cuando no se está utilizando.

34.2.7. XFS

Pensado originariamente como sistema de archivos para sistemas operativos IRIX, SGI comenzó el desarrollo de XFS ya a principios de la década de los noventa. Con XFS consigue un sistema de archivos journaling de 64 bits de gran rendimiento adaptado a las necesidades extremas de hoy en día. XFS también está indicado para el trabajo con archivos grandes y ofrece un buen rendimiento en hardware de última generación. Sin embargo XFS, al igual que ReiserFS, tiene la desventaja de conceder mucha importancia a la integridad de los metadatos y muy poca a la de los datos:

Un breve resumen de las funciones clave de XFS aclarará por qué puede llegar a convertirse en un fuerte competidor de otros sistemas de archivos journaling en el tratamiento de datos.

Manejo de “grupos de asignación” (allocation groups)

En el momento de la creación de un sistema de archivos XFS, el dispositivo de bloque (block-device) que sirve de base al sistema de archivos se divide en ocho o más campos lineales de igual tamaño denominados grupos de asignación. Cada grupo de asignación administra inodes así como memoria libre. Se puede considerar a estos grupos prácticamente como sistemas de archivos dentro de sistemas de archivos. Puesto que estos grupos de asignación son bastante independientes, el kernel puede dirigirse a más de uno simultáneamente. Este concepto de grupos de asignación independientes satisface los requisitos de los sistemas con varios procesadores.

Alto rendimiento con eficiente administración de la memoria del disco

B+trees administran la memoria libre y los inodes dentro de los grupos de asignación. El manejo de B+trees contribuye al gran rendimiento de XFS. Una característica de XFS es la llamada asignación retardada. XFS realiza la asignación de la memoria mediante la división en dos de los procesos. Una transacción “en suspenso” queda guardada en RAM y el espacio en la memoria queda reservado. XFS aún no decide dónde exactamente (en qué bloque del sistema de archivos) se almacenan los datos. Esta decisión se retrasará hasta el último momento. Con esto, algunos datos temporales no quedan nunca almacenados en el disco, ya que cuando llegue el momento de decidir el lugar de almacenamiento ya estarán obsoletos. Así, XFS aumenta el rendimiento y disminuye la fragmentación del sistema de archivos. Debido a que una asignación retardada tiene como consecuencia menos procesos de escritura que en otros sistemas de archivos, es probable que la pérdida de datos tras una caída del sistema durante el proceso de escritura sea mayor.

Preasignación para evitar la fragmentación del sistema de archivos

Antes de la escritura de los datos en el sistema de archivos, XFS reserva el espacio de memoria necesario para un archivo que vaya a ser asignado. De esta forma se reduce enormemente la fragmentación del sistema de archivos y el rendimiento aumenta, ya que el contenido de los archivos no queda dividido por todo el sistema de archivos.