Sistema de archivos de gran tamaño El sistema de archivos ext4 puede soportar volúmenes con tamaños de hasta 1 exbibyte (EiB) y archivos individuales con tamaños de hasta 16 tebibytes (TiB) con el tamaño de bloque estándar de 4 KiB. Los límites de tamaño máximos de los archivos, directorios y sistemas de archivos crecen al menos proporcionalmente con el tamaño de bloque del sistema de archivos hasta el tamaño de bloque máximo de 64 KiB disponible en las CPUs ARM y PowerPC/Power ISA. Extensiones Las extensiones sustituyen al esquema tradicional de asignación de bloques utilizado por ext2 y ext3. Una extensión es un rango de bloques físicos contiguos que mejora el rendimiento de los archivos grandes y reduce la fragmentación. Un solo extent en ext4 puede asignar hasta 128 MiB de espacio contiguo con un tamaño de bloque de 4 KiB. Puede haber cuatro extensiones almacenadas directamente en el inodo. Cuando hay más de cuatro extensiones en un archivo, el resto de las extensiones se indexan en un árbol. Compatibilidad con versiones anteriores ext4 es compatible con ext3 y ext2, lo que permite montar ext3 y ext2 como ext4. Esto mejorará ligeramente el rendimiento, ya que ciertas características nuevas de la implementación de ext4 pueden utilizarse también con ext3 y ext2, como el nuevo algoritmo de asignación de bloques, sin afectar al formato en disco. ext3 es parcialmente compatible con ext4. Prácticamente, ext4 no se montará como un sistema de archivos ext3 fuera de la caja, a menos que se desactiven ciertas características nuevas al crearlo, como ^extent
, ^flex_bg
, ^huge_file
, ^uninit_bg
, ^dir_nlink
y ^extra_isize
. Preasignación persistente ext4 puede preasignar espacio en disco para un archivo. Para hacer esto en la mayoría de los sistemas de archivos, se escriben ceros en el archivo cuando se crea. En ext4 (y algunos otros sistemas de archivos como XFS) se puede utilizar fallocate()
, una nueva llamada al sistema en el núcleo de Linux. El espacio asignado estaría garantizado y probablemente sería contiguo. Esta situación tiene aplicaciones para el streaming de medios y las bases de datos. Asignación retardada ext4 utiliza una técnica de rendimiento llamada allocate-on-flush, también conocida como asignación retardada. Es decir, ext4 retrasa la asignación de bloques hasta que los datos se descargan en el disco. (En cambio, algunos sistemas de archivos asignan los bloques inmediatamente, incluso cuando los datos van a la caché de escritura). El retraso en la asignación mejora el rendimiento y reduce la fragmentación al asignar efectivamente mayores cantidades de datos a la vez. Número ilimitado de subdirectorios ext4 no limita el número de subdirectorios en un mismo directorio, excepto por el límite de tamaño inherente al propio directorio. (En ext3 un directorio puede tener como máximo 32.000 subdirectorios.) Para permitir directorios más grandes y un rendimiento continuado, ext4 en Linux 2.6.23 y posteriores activa los índices HTree (una versión especializada de un árbol B) por defecto, lo que permite almacenar directorios de hasta aproximadamente 10-12 millones de entradas en el índice HTree de 2 niveles y un límite de tamaño de directorio de 2 GB para un tamaño de bloque de 4 KiB, dependiendo de la longitud del nombre del archivo. En Linux 4.12 y posteriores, la función largedir
permitía un HTree de 3 niveles y tamaños de directorio superiores a 2 GB, permitiendo aproximadamente 6.000 millones de entradas en un solo directorio. Sumas de comprobación del diario ext4 utiliza sumas de comprobación en el diario para mejorar la fiabilidad, ya que el diario es uno de los archivos más utilizados del disco. Esta característica tiene un beneficio secundario: puede evitar de forma segura una espera de E/S del disco durante el registro en el diario, mejorando ligeramente el rendimiento. La suma de comprobación del diario se inspiró en un artículo de investigación de la Universidad de Wisconsin, titulado IRON File Systems (específicamente, la sección 6, llamada «sumas de comprobación de transacciones»), con modificaciones dentro de la implementación de transacciones compuestas realizadas por el sistema de archivos IRON (originalmente propuesto por Sam Naghshineh en la cumbre de RedHat). Suma de comprobación de metadatos Desde el kernel de Linux 3.5 lanzado en 2012 Comprobación más rápida del sistema de archivos En ext4 los grupos de bloques no asignados y las secciones de la tabla de inodos se marcan como tales. Esto permite a e2fsck omitirlos por completo y reducir en gran medida el tiempo que tarda en comprobar el sistema de archivos. Linux 2.6.24 implementa esta característica.
Asignador de múltiples bloques Cuando ext3 anexa a un archivo, llama al asignador de bloques, una vez por cada bloque. En consecuencia, si hay varios escritores simultáneos, los archivos pueden fragmentarse fácilmente en el disco. Sin embargo, ext4 utiliza la asignación diferida, lo que le permite almacenar datos en el búfer y asignar grupos de bloques. En consecuencia, el asignador multibloque puede tomar mejores decisiones sobre la asignación de archivos de forma contigua en el disco. El asignador multibloque también puede utilizarse cuando los archivos se abren en modo O_DIRECT. Esta característica no afecta al formato del disco. Marcas de tiempo mejoradas A medida que los ordenadores se hacen más rápidos en general, y que Linux se utiliza más para aplicaciones de misión crítica, la granularidad de las marcas de tiempo basadas en segundos resulta insuficiente. Para solucionarlo, ext4 proporciona marcas de tiempo medidas en nanosegundos. Además, a los bits más significativos del campo de segundos de las marcas de tiempo se les añaden 2 bits del campo expandido para aplazar el problema del año 2038 durante 408 años más. ext4 también añade soporte para las marcas de tiempo de creación. Pero, como señala Theodore Ts’o, mientras que es fácil añadir un campo extra de fecha de creación en el inodo (permitiendo así técnicamente el soporte de estas marcas de tiempo en ext4), es más difícil modificar o añadir las llamadas al sistema necesarias, como stat() (que probablemente requeriría una nueva versión) y las diversas bibliotecas que dependen de ellas (como glibc). Estos cambios requerirán la coordinación de muchos proyectos. Por lo tanto, la fecha de creación almacenada por ext4 actualmente sólo está disponible para los programas de usuario en Linux a través de la APIstatx()
. Cuotas de proyecto El soporte para las cuotas de proyecto se añadió en el núcleo de Linux 4.4 el 8 de enero de 2016. Esta característica permite asignar límites de cuota de disco a un ID de proyecto concreto. El ID de proyecto de un archivo es un número de 32 bits almacenado en cada archivo y es heredado por todos los archivos y subdirectorios creados bajo un directorio padre con un ID de proyecto asignado. Esto permite asignar límites de cuota a un árbol de subdirectorios concreto independientemente de los permisos de acceso al archivo, como las cuotas de usuario y de proyecto que dependen del UID y del GID. Aunque esto es similar a una cuota de directorio, la principal diferencia es que el mismo ID de proyecto puede asignarse a varios directorios de nivel superior y no es estrictamente jerárquico. Cifrado transparente El soporte para el cifrado transparente se añadió en el kernel de Linux 4.1 en junio de 2015. Inicialización perezosa La función lazyinit permite limpiar las tablas de inodos en segundo plano, acelerando la inicialización al crear un nuevo sistema de archivos ext4. Está disponible desde 2010 en la versión 2.6.37 del kernel de Linux. Barreras de escritura ext4 activa las barreras de escritura por defecto. Garantiza que los metadatos del sistema de archivos se escriban y ordenen correctamente en el disco, incluso cuando las cachés de escritura pierden potencia. Esto tiene un coste de rendimiento, especialmente para las aplicaciones que utilizan mucho fsync o que crean y eliminan muchos archivos pequeños. Para los discos con una caché de escritura respaldada por batería, deshabilitar las barreras (opción ‘barrier=0’) puede mejorar el rendimiento de forma segura.