Ext4

Como mencioné en una entrada anterior , Ext4 ya está listo para sustituir a Ext3 y el kernel más nuevo de Linux ya incluye soporte estable para él. Los sistemas de archivos Extended (Ext, Ext2,…) han sido históricamente usados por defecto en sistemas Linux y son herederos de los viejos sistemas de archivos Unix; aunque Linux soporta otros sistemas de archivos más modernos como ReiserFS y XFS. En esta entrada voy a explicar a grandes rasgos las mejoras de Ext4 respecto a Ext3.

Ext3 supuso una mejora respecto a Ext2 al introducir journaling. El journaling es una técnica mediante la cual se lleva un registro de las actividades en el sistema de archivos y facilita la recuperación del sistema de archivos después de una interrupción abrupta (como una falla eléctrica). Cuando se borra un archivo ocurren dos procesos principales: eliminación de la entrada del directorio que lo contiene y marcado de los bloques ocupados como bloques libres en el mapa de bloques; si no se completan los dos procesos el sistema de archivos puede quedar en un estado inconsistente; además detectar y recuperarse del fallo puede toma mucho tiempo, pero con journaling esto se puede hacer de manera más eficiente y segura.

No me voy a centrar en datos sensacionalistas sobre el tamaño de archivos que ahora soporta, o la cantidad de archivos que puede contener cada directorio, ya que eso NO es un diferenciador importante a la hora de comparar sistemas de archivos. Quiero enumerar las nuevas características y mejoras conceptuales que se introdujeron:

  • Extents: Los sistemas de archivos derivados de Unix (como Ext3) mantienen un esquema de mapeo de bloques para llevar el rastreo de bloques que pertecen a un archivo, por ejemplo un i-nodo mantiene una lista de bloques de un archivo. Para archivos grandes esto es ineficiente en tiempo y espacio pues el mapa de bloques es enorme, ya que los bloques son de tamaño fijo. Un extent es básicamente un espacio de bloques físicamente adyacentes que ahora se puede utilizar en el mapeo de un archivo; esto mejora el rendimiento, reduce el espacio y reduce la fragmentación.
  • Alojamiento multibloque: Cuando Ext3 quiere escribir información a disco, el alojador de bloques decide qué bloques libres van a ser usados para escribir los datos. El problema es que el sistema de Ext3 sólo permite alojar un bloque (4 Kb) a la vez; esto no sólo es ineficiente para el tamaño de los archivos que se manejan actualmente, también impide que se pueda optimizar la asignación de bloques pues el alojador de bloques no sabe de qué tamaño es todo lo que se va a escribir. Con el alojamiento multibloque se pueden pedir muchos bloques al mismo tiempo. Esta característica ayuda a reducir la fragmentación.
  • Alojamiento retartado: Esta característica ya viene incluida en sistemas de archivos modernos como XFS, ZFS y Reiser, y consiste en retardar el alojamiento de bloques lo más posible. Lo que pasa actualmente es que cuando un proceso pide escribir a disco, inmediatamente se asigna el bloque al que se va a escribir, aún si la información va a estar en caché un tiempo o si se va esperar un tiempo antes de escribir. Este método trae desventajas como cuando un proceso está escribiendo un stream, ya que no se sabe de qué tamaño va a ser el archivo finalmente. El alojamiento retardado asigna los bloques hasta que realmente se va a escribir a disco, lo que permite optimizar el alojamiento. Esta característica se combina perfectamente con las dos anteriores: extents y alojamiento multibloque; para mejorar el rendimiento y la fragmentación.
  • Defragmentación al vuelo: Aunque con las características anteriores la fragmentación se va a reducir en la mayoría de lo casos, ahora existe la opción de defragmentar el sistema de archivos al vuelo. Esto porque en sistemas de alta concurrencia la fragmentación es un gran problema y la leyenda urbana de que Ext3 se fragmenta poco es completamente falsa para un sistema de mediana concurrencia al disco duro. Esta característica no está disponible todavía en el kernel (2.6.28) pero existe una herramienta llamada e4defrag por el momento.
  • Prealojamiento persistente: Cuando una aplicación necesite reservar espacio en disco pero todavía no tenga los datos que se van a escribir, se puede prealojar el espacio en el sistema de archivos; esto es que se construyan las estructuras internas del sistema de archivos y se reserven los bloques necesarios. Por ejemplo lo que hacen los clientes P2P es escribir un archivo relleno de ceros del tamaño del archivo que van a bajar, pero esto es sucio e ineficiente. Con el prealojamiento este problema se soluciona y además se reduce la posibilidad de fragmentación.

Además se introdujeron otras mejoras en los i-nodos y en el journal. Un efecto colateral con todas las mejoras es que el fsck ahora va a ser mucho más rápido, por lo que ya no tendremos que desesperarnos cada vez que nuestro Debian necesite hacer un chequeo de disco.


[Fuente]

[Fuente2]

Un commentario
  1. [...] Ext4. Con lo que ahora Ext4 es una opción estable para sutituir al viejo Ext3. Veremos en un próximo artículo las mejoras respecto a [...]

Deja un comentario