ext4, ext3 y ext2, explicados.
Qué son los sistemas de archivos de Linux, cómo reparten los archivos por el disco, qué protege el journal, qué funciones y límites importan hoy y cómo abrir un disco ext4 en un Mac o en un PC con Windows.
Revisado por última vez
Qué son ext2, ext3 y ext4
ext2, ext3 y ext4 son el segundo, tercer y cuarto sistema de archivos extendido (extended file system): los formatos que Linux usa para sus propios discos desde hace más de treinta años. Un sistema de archivos decide cómo se colocan en el disco los archivos, carpetas, nombres, permisos y fechas, para que cualquier ordenador que conozca el formato pueda encontrarlos.
Hoy te encontrarás sobre todo con ext4. Debian, Ubuntu y Raspberry Pi OS formatean sus discos con él, es la elección habitual para el disco de datos de un servidor Linux y Google pasó a él los teléfonos Android en 2010. Un disco USB o una tarjeta SD preparada en Linux es casi siempre ext4.
Los tres son una familia, no tres formatos distintos. Cada generación conservó la estructura de la anterior y la amplió; por eso los núcleos Linux actuales leen y escriben los tres con un único controlador ext4.
Una breve historia
- 1992
ext, el sistema de archivos extendido
Rémy Card lo escribe para Linux 0.96c para sustituir al sistema de archivos Minix con el que empezó Linux, cuyos límites de tamaño de disco y de nombres ya se quedaban cortos.
- 1993
ext2
Un rediseño de enero de 1993 para Linux 0.99, con ideas del Fast File System de BSD: el disco dividido en grupos de bloques y fechas separadas de acceso, cambio y modificación. Sigue siendo el estándar de Linux el resto de la década.
- 2001
ext3 añade un journal
El ext3 de Stephen Tweedie entra en el núcleo principal con Linux 2.4.15 en noviembre de 2001. La estructura es la de ext2, así que un disco ext2 se convierte en ext3 añadiéndole un journal, pero una caída ya no obliga a revisar todo el disco.
- 2006
Empieza el trabajo en ext4
Theodore Ts’o anuncia el plan el 28 de junio de 2006, a partir de extensiones desarrolladas para el sistema de archivos en clúster Lustre. Una versión de desarrollo, ext4dev, aparece en Linux 2.6.19.
- 2008
ext4 se declara estable
Linux 2.6.28, publicado el 25 de diciembre de 2008, trae extents, números de bloque de 64 bits, asignación diferida y fechas con precisión de nanosegundos.
- 2013–2021
Sumas de comprobación, cifrado, mayúsculas
Núcleos posteriores añaden datos en línea (3.8), sumas de comprobación de metadatos (3.18), cifrado (4.1), carpetas que no distinguen mayúsculas (5.2), verity (5.4), fast commits (5.10) y el orphan file (5.15).
Cómo organiza ext4 un disco
Bloques. ext4 reparte el espacio en bloques, normalmente de 4 KiB; el tamaño se elige al formatear y puede ir de 1 KiB a 64 KiB. Incluso un archivo de un byte ocupa un bloque entero, salvo que el disco use datos en línea.
Grupos de bloques. El disco se divide en grupos de bloques: con bloques de 4 KiB, 32 768 bloques o 128 MiB cada uno. Cada grupo tiene dos mapas de bits, uno de sus bloques ocupados y otro de sus inodos, además de su parte de la tabla de inodos. Mantener los datos de un archivo cerca de su inodo evita que el cabezal del disco viaje. La función flex_bg junta los mapas de bits y tablas de inodos de varios grupos, para que los archivos grandes crucen los límites entre grupos de una pieza.
El superbloque. Lo primero del disco tras 1 KiB de margen: el tamaño del sistema de archivos, su tamaño de bloque, qué funciones usa y si se desmontó limpiamente. Hay copias en varios grupos de bloques, así que un superbloque dañado se puede restaurar desde una copia.
Inodos. Cada archivo y cada carpeta tiene un inodo, de 256 bytes por defecto. Guarda el propietario, los permisos, las fechas, el tamaño y dónde están los datos: todo menos el nombre. El número de inodos se fija al formatear, así que un disco lleno de archivos diminutos puede quedarse sin inodos aunque aún tenga espacio libre.
Carpetas. Una carpeta es un archivo especial que asigna nombres a números de inodo. Los nombres pueden tener hasta 255 bytes. Las carpetas pequeñas son una simple lista; las grandes reciben un índice, un árbol con hash (dir_index, «htree»), para que encontrar un nombre entre cien mil cueste unas pocas lecturas de bloques y no un recorrido completo.
Extents en lugar de mapas de bloques. ext2 y ext3 anotan cada bloque de un archivo uno por uno: doce punteros directos en el inodo, luego bloques llenos de punteros, punteros a esos y punteros a esos otra vez. ext4 anota tramos. Un extent dice «tantos bloques, a partir de aquí», hasta 32 768 bloques (128 MiB con bloques de 4 KiB) en una sola entrada. Cuatro extents caben en el propio inodo; un archivo más largo y fragmentado recibe un árbol de extents de hasta cinco niveles. Un archivo grande y contiguo se describe con un puñado de entradas en vez de miles.
Los archivos pequeños pueden vivir dentro de su inodo. Con la función inline_data, hasta 60 bytes de un archivo se guardan en el propio inodo y algo más en su espacio de atributos extendidos, sin ocupar ningún bloque.
El journal y lo que protege
Cambiar un sistema de archivos nunca es una sola escritura. Crear un archivo toca un mapa de bits, un inodo, una carpeta y un contador en el descriptor de grupo. Si se va la luz entre dos de esas escrituras, el disco queda a medio cambiar, y ext2 solo podía descubrirlo revisando todo el disco con e2fsck, lo que en un disco grande llevaba mucho tiempo.
ext3 y ext4 llevan un journal: una zona reservada del disco, normalmente el inodo 8, donde los cambios se escriben antes de hacerse. Un cambio va en tres pasos. Primero, los bloques nuevos entran en el journal. Luego, un registro de commit marca la transacción como completa. Solo después se escriben los bloques en su sitio real: el checkpoint. Si se va la luz en cualquier momento, el siguiente montaje reproduce el journal: las transacciones que llegaron a su commit se aplican de nuevo y lo que no tiene commit se descarta. El sistema de archivos vuelve a ser coherente en segundos.
| Modo | Qué pasa por el journal | Tras una caída |
|---|---|---|
data=ordered (por defecto) | Solo los metadatos, pero los datos de un archivo se escriben antes de confirmar los metadatos que apuntan a ellos. | La estructura es coherente; un archivo que se estaba escribiendo puede contener datos anteriores. |
data=journal | Metadatos y datos de los archivos. | El más seguro y el más lento: los datos que llegaron a un commit están ahí. |
data=writeback | Solo los metadatos, sin orden para los datos. | La estructura es coherente, pero un archivo cambiado hace poco puede mostrar contenido antiguo. |
El journal no es una copia de seguridad. Mantiene intacta la estructura del sistema de archivos y garantiza lo que se confirmó; no recupera un cambio que estaba en camino ni protege de un disco que falla. ext4 también puede escribir fast commits (Linux 5.10): registros pequeños solo con los metadatos cambiados entre dos commits completos, para que las llamadas frecuentes a fsync salgan más baratas.
Una tarjeta sacada de una Raspberry Pi en marcha es justo este caso. Su journal aún guarda transacciones confirmadas que nunca llegaron a su sitio, y el superbloque indica «needs recovery». Linux lo reproduce en el siguiente montaje; un programa que lea la tarjeta en otro sitio tiene que reproducirlo también, o mostrará los archivos como estaban antes de esas transacciones.
ext2 vs ext3 vs ext4
| ext2 | ext3 | ext4 | |
|---|---|---|---|
| En Linux desde | 1993 (0.99) | 2001 (2.4.15) | 2008 (2.6.28) |
| Journal | No | Sí | Sí, con fast commits desde Linux 5.10 |
| Cómo se anotan los bloques de un archivo | Mapas de bloques | Mapas de bloques | Extents |
| Archivo más grande | 2 TiB | 2 TiB | 16 TiB |
| Sistema de archivos más grande | 16 TiB | 16 TiB | 1 EiB en la práctica (64 bits) |
| Fechas | Segundos, hasta 2038 (inodos de 128 bytes) | Segundos, hasta 2038 (inodos de 128 bytes) | Nanosegundos, hasta 2446 |
| Carpetas grandes indexadas | No | Sí (dir_index) | Sí, tres niveles con large_dir |
| Sumas de comprobación de metadatos | No | No | Sí (metadata_csum) |
En la práctica: ext4 para todo lo nuevo. ext3 ya no tiene motivo en un disco nuevo, y ext2 sobrevive donde nadie quiere un journal: una pequeña partición de arranque o una memoria flash que se debe escribir lo menos posible. Un disco ext3 se puede convertir a ext4 sin moverlo, pero los archivos que ya estaban en él conservan sus mapas de bloques hasta que se reescriben.
Funciones que verás en discos reales
En lugar de números de versión, un disco ext lleva indicadores de funciones en su superbloque, y cada uno es de uno de tres tipos. Una función compatible puede ignorarla el software que no la conoce. Una función compatible solo lectura significa que ese software puede leer el disco pero no escribir en él. Una función incompatible significa que no debe tocarlo en absoluto. Gracias a esa regla, una herramienta antigua rechaza un disco más nuevo en vez de dañarlo.
| Función | Qué hace | En Linux desde |
|---|---|---|
extent | Archivos descritos por extents en lugar de mapas de bloques. | 2.6.28 |
64bit | Números de bloque de más de 32 bits, para sistemas de archivos de más de 16 TiB. | 2.6.28 |
flex_bg | Metadatos de varios grupos de bloques juntos. | 2.6.28 |
metadata_csum | Una suma de comprobación CRC32C en todos los metadatos, para detectar daños. | 3.18 |
metadata_csum_seed | La semilla de las sumas guardada en el superbloque, para poder cambiar el UUID. | 4.4 |
inline_data | Archivos diminutos guardados en su inodo. | 3.8 |
encrypt | Cifrado por carpeta del contenido y los nombres de los archivos. | 4.1 |
casefold | Carpetas que no distinguen mayúsculas y minúsculas en los nombres. | 5.2 |
verity | Archivos de solo lectura cuyo contenido se verifica con un árbol de hash. | 5.4 |
fast_commit | Registros pequeños del journal entre commits completos. | 5.10 |
orphan_file | Registro más rápido de archivos borrados mientras seguían abiertos. | 5.15 |
Dónde aparecen: el mke2fs actual activa metadata_csum y 64bit por defecto, y e2fsprogs 1.47 añadió orphan_file y metadata_csum_seed, que algunas distribuciones vuelven a desactivar para que los cargadores de arranque antiguos puedan leer el disco. La imagen de Raspberry Pi OS se crea sin 64bit. Una Steam Deck formatea sus tarjetas microSD con casefold, y Android usa encrypt.
Para ver qué funciones usa un disco, lee su superbloque en Linux con sudo dumpe2fs -h /dev/sdX1 y mira la línea «Filesystem features».
Límites
| Tamaño de bloque | Grupo de bloques | Archivo más grande | Sistema más grande (32 bits) | Sistema más grande (64 bits) |
|---|---|---|---|---|
| 1 KiB | 8 MiB | 4 TiB | 4 TiB | 16 ZiB |
| 2 KiB | 32 MiB | 8 TiB | 8 TiB | 32 ZiB |
| 4 KiB (habitual) | 128 MiB | 16 TiB | 16 TiB | 64 ZiB |
| 64 KiB | 32 GiB | 256 TiB | 256 TiB | 1 YiB |
Las cifras de 64 bits son lo que el formato puede direccionar; el formato de los extents y las herramientas limitan los sistemas de archivos reales a alrededor de 1 EiB. Otros límites que importan más a menudo:
- Un nombre de archivo o carpeta: 255 bytes, menos caracteres en escrituras que necesitan más de un byte por carácter.
- Enlaces duros a un mismo archivo: 65 000, así que como mucho 64 998 subcarpetas en una carpeta.
- Fechas: precisión de nanosegundos, válidas hasta mayo de 2446 con inodos de 256 bytes; los inodos de 128 bytes terminan en enero de 2038.
- Inodos: fijados al formatear, uno por archivo o carpeta, unos cuatro mil millones como máximo.
Revisar y reparar un disco ext4
Revisar y reparar sistemas de archivos ext es trabajo de e2fsck, parte de e2fsprogs, en Linux. Trabaja sobre un disco no montado; ejecutarlo sobre un sistema de archivos montado puede dañarlo.
sudo dumpe2fs -h /dev/sdX1 # superbloque: funciones, estado, última revisión sudo e2fsck -fn /dev/sdX1 # revisión completa de solo lectura: informa, no cambia nada sudo e2fsck -f /dev/sdX1 # revisión completa con reparaciones, pregunta antes de cada una sudo tune2fs -l /dev/sdX1 # el mismo resumen del superbloque sudo mkfs.ext4 -L DATA /dev/sdX1 # un sistema de archivos ext4 nuevo (borra la partición)
Sustituye /dev/sdX1 por la partición en cuestión; lsblk las lista. Tras un apagado brusco no suele haber nada que hacer: el siguiente montaje reproduce el journal. Una revisión completa merece la pena cuando Linux ha anotado un error en el superbloque, cuando fallan las sumas de comprobación o cuando el disco estuvo en un aparato que se colgó varias veces.
ext4 y otros sistemas de archivos
| Sistema de archivos | Protección ante caídas | En casa en | macOS | Windows |
|---|---|---|---|---|
| ext4 | Journal | Linux, Android | No | No |
| Btrfs | Copy-on-write, sumas de comprobación también de los datos | Linux (por defecto en Fedora) | No | No |
| XFS | Journal | Servidores Linux | No | No |
| APFS | Copy-on-write | Mac, iPhone | Sí | No |
| NTFS | Journal | Windows | Solo lectura | Sí |
| exFAT | Ninguna | Discos USB, tarjetas SD, cámaras | Sí | Sí |
Para un disco que va de Linux a Mac y a Windows sin instalar nada, exFAT es el terreno común, a costa de los permisos de Linux, los propietarios, los enlaces simbólicos y cualquier protección si el cable se sale en plena escritura. ext4 conserva todo eso y necesita software adicional en Mac y en Windows.
Leer ext4 en un Mac o en Windows
macOS no lee ninguno de los sistemas de archivos ext. Conecta un disco Linux y macOS dirá que no puede leer el disco, ofreciendo Inicializar, Ignorar y Expulsar. Inicializar borra el disco; elige Ignorar o Expulsar.
Desde macOS 15.4, FSKit de Apple permite que un sistema de archivos funcione como una extensión de app normal, fuera del núcleo, igual que los sistemas de archivos más nuevos de la propia Apple. Es el camino sin extensión del núcleo y sin rebajar la seguridad. Los otros caminos son una extensión del núcleo, una capa en espacio de usuario como FUSE o una máquina virtual Linux a la que se le da el disco.
En Windows 11, WSL 2 puede montar un disco Linux: wsl --mount \\.\PHYSICALDRIVE2 --partition 1 --type ext4 en un terminal de administrador; después, los archivos aparecen en el Explorador bajo \\wsl$\ y en la carpeta /mnt/wsl de la distribución. Solo funciona con discos conectados directamente al PC, no con discos USB ni lectores de tarjetas SD; esos hay que pasarlos antes a WSL mediante USB/IP.
Extent es nuestro propio sistema de archivos FSKit para ext2, ext3 y ext4 en macOS 27. Un disco Linux aparece en el Finder como cualquier otro; leer es gratis, y escribir en ext4 pasa por el journal del disco, igual que en Linux. Una tarjeta sacada de una Pi sin apagarla se lee con su journal reproducido en memoria.
Preguntas frecuentes
¿Es ext4 mejor que ext3?
Para un disco nuevo, sí. Describe los archivos con extents en lugar de mapas de bloques, admite archivos de hasta 16 TiB y sistemas de archivos mucho mayores, guarda fechas con precisión de nanosegundos más allá de 2038, protege sus metadatos con sumas de comprobación y reparte el espacio en tramos más largos y menos fragmentados. Linux lee los discos ext3 con el controlador ext4 de todas formas.
¿Puede un Mac leer ext4?
No por sí solo: macOS no lee ningún sistema ext y ofrece inicializar, es decir, borrar, un disco Linux. Necesita una extensión de sistema de archivos; en macOS 27, Extent monta ext2, ext3 y ext4 en el Finder mediante FSKit de Apple.
¿Puede Windows leer ext4?
El Explorador por sí solo, no. En Windows 11, WSL 2 monta un disco Linux conectado directamente con wsl --mount, y sus archivos se abren luego en el Explorador bajo \\wsl$\. Los discos USB y los lectores de tarjetas SD hay que pasarlos antes a WSL mediante USB/IP.
¿Un disco USB debe ser ext4 o exFAT?
exFAT si tiene que funcionar en cualquier ordenador sin software adicional. ext4 si se usa sobre todo con Linux o una Raspberry Pi, o si importan los permisos, los enlaces simbólicos y un journal: el journal mantiene coherente el sistema de archivos cuando el disco se desconecta en plena escritura.
¿Qué pasa si desconecto un disco ext4 sin expulsarlo?
El journal mantiene coherente el sistema de archivos. Los cambios que llegaron a un commit se reproducen en el siguiente montaje; los que estaban en camino se pierden. Hasta entonces, el superbloque indica que hace falta una recuperación.
¿Cómo sé qué funciones usa mi disco ext4?
En Linux, sudo dumpe2fs -h /dev/sdX1 o sudo tune2fs -l /dev/sdX1, en la línea «Filesystem features». En un Mac, Extent nombra las principales (journal, extents, 64 bits, sumas de comprobación) en los detalles de un disco.
¿Se puede convertir ext3 a ext4?
Sí, sin moverlo, con tune2fs y una revisión con e2fsck, sin reformatear. Los archivos que ya estaban en el disco conservan sus mapas de bloques; solo los escritos después usan extents. Haz antes una copia de seguridad.
¿Qué tamaño máximo de archivo admite ext4?
16 TiB con los habituales bloques de 4 KiB y hasta 256 TiB con bloques de 64 KiB. El sistema de archivos más grande ronda 1 EiB con la función 64bit.
Discos Linux en el Mac, leídos y escritos.
Extent monta ext2, ext3 y ext4 en el Finder en macOS 27. Leer es gratis; escribir en ext4 es una compra única.
Fuentes
Los datos de esta página se han comprobado en estos documentos (en inglés).