# Ext4

Ext4 (fourth extended filesystem o «quart sistema de fitxers estès») és un sistema de fitxers transaccional (en anglès journaling), anunciat el 10 d'octubre de 2006 per Andrew Morton, com una millora compatible d'ext3. El 25 de desembre de 2008 es va publicar el nucli Linux 2.6.28, que elimina ja l'etiqueta d'«experimental» de codi d'ext4.
Les principals millores són:
* Suport de volums de fins a 1024 PiB.
* Suport afegit de extent.
* Menor ús del CPU.
* Millores en la velocitat de lectura i escriptura.

## Millores
### Sistema de fitxers de grans dimensions

El sistema de fitxers ext4 és capaç de treballar amb volums de grans dimensions, fins a 1 exbibyte i fitxers de mida de fins a 16 TiB.

### Extents

Els extents han estat introduïts per reemplaçar al tradicional esquema de blocs usat pels sistemes de fitxers ext2 /3. Un extent és un conjunt de blocs físics contigus, millorant el rendiment en treballar amb fitxers de grans dimensions i reduint la fragmentació. Un extent simple en ext4 és capaç de fer un mapa fins a 128 MiB d'espai contigu amb una mida de bloc igual a 4 KiB.

### Compatibilitat cap endavant i cap enrere

El sistema de fitxers ext3 és compatible endavant amb ext4, sent possible muntar un sistema de fitxers ext3 com ext4 i usar-lo transparent.
De la mateixa manera ext4 és parcialment compatible cap enrere amb ext3, ja que pot ser muntat com una partició ext3 amb l'excepció que si la partició ext4 usa extents, es perd aquesta possibilitat.
Els extents estan configurats per defecte des de la versió del nucli 2.6.23. Anteriorment, aquesta opció requeria ser activada explícitament (per exemple mount / dev/sda1/mnt/ point-t ext4dev-o extents ).

### Assignació persistent d'espai al disc

El sistema de fitxers ext4 permet la reserva d'espai en disc per a un fitxer. Fins ara la metodologia consistia a omplir el fitxer en el disc amb zeros en el moment de la seva creació. Aquesta tècnica no és ja necessària amb ext4, ja que una nova trucada del sistema "preallocate" ha estat afegida al nucli Linux per a ús dels sistemes de fitxers que permetin aquesta funció. L'espai reservat per a aquests fitxers quedarà garantit i amb molta probabilitat serà contigu. Aquesta funció té útils aplicacions en streaming i bases de dades.

### Assignació retardada d'espai al disc

Ext4 fa ús d'una tècnica de millora de rendiment anomenada Allocate-on-flush, també coneguda com a reserva de memòria retardada. Consisteix a retardar la reserva de blocs de memòria fins que la informació estigui a punt de ser escrita en el disc, a diferència d'altres sistemes de fitxers, els quals reserven els blocs necessaris abans d'aquest pas. Això millora el rendiment i redueix la fragmentació en millorar les decisions de reserva de memòria basada en la grandària real del fitxer.

### Límit de 32000 subdirectoris superat

En ext3 el nivell de profunditat en subdirectoris permès estava limitat a 32000. Aquest límit ha estat augmentat a 64000 en ext4, permetent fins i tot anar més enllà d'aquest límit (fent ús de "dir_nlink"). Per permetre un rendiment continu, donada la possibilitat de directoris molt més grans, htree està activat per defecte en ext4. Aquesta funció està implementada des de la versió 2.6.23. htree està també disponible en ext3 quan la funció dir_index està activada.

### Journal checksumming

ext4 usa checksums en el registre per millorar la fiabilitat, ja que el journal és un dels fitxers més utilitzats en el disc. Aquesta funció té un efecte col·lateral beneficiós: permet de manera segura evitar una lectura / escriptura de disc durant el procés de registre al journal, millorant el rendiment lleugerament. La tècnica del journal checksumming està inspirada en la investigació de la Universitat de Wisconsin en sistemes de fitxers IRON (Secció 6, sota el nom "checksums de transaccions").

### Desfragmentació línia

Fins i tot fent ús de diverses tècniques per evitar la fragmentació, un sistema de llarga durada tendeix a fragmentar amb el temps. Ext4 disposarà d'una eina que permet desfragmentar fitxers individuals o sistemes de fitxers sencers sense desmuntar el disc.

### Revisió del sistema de fitxers i ràpid

En ext4, els grups de blocs no assignats i seccions de la taula d'inodes estan marcats com a tals. Això permet a e2fsck saltar-se'ls completament en les revisions i en gran manera redueix el temps requerit per comprovar un sistema de fitxers de la mida per al qual ext4 està preparat. Aquesta funció està implementada des de la versió 2.6.24 del nucli Linux.

### Assignador multibloc

Ext4 assigna múltiples blocs per a un fitxer en una sola operació, la qual cosa redueix la fragmentació en intentar triar blocs contigus en el disc. L'assignador multibloc està actiu quan s'usa 0_DIRECT o si l'assignació retardada està activa. Això permet al fitxer tenir diversos blocs «bruts» sol·licitats per escriptura a la vegada, a diferència de l'actual mecanisme del nucli de sol·licitud d'enviament de cada bloc al sistema de fitxers de manera separada per assignar.

### Timestamps millorats

Com que els ordinadors es tornen en general cada vegada més ràpids i que Linux està passant a ser cada vegada més usat en aplicacions crítiques, la granularitat dels timestamps basats en segons s'està tornant insuficient. Per resoldre això, ext4 tindrà timestamps mesurats en nanosegons. Aquesta funció està actualment implementada en la versió 2.6.23 del nucli. Addicionalment s'han afegit 2 bits del timestamp estès als bits més significatius del camp de segons dels timestamps per retardar gairebé 500 anys el problema de l'any 2038.

## Referències

* ↑ «Anatomy of ext4» (en anglès). IBM. [Consulta: 12 febrer 2015].
* ↑ «Understanding EXT4 (part 1):Extents» (en anglès). SANS Digital Forensics and Incident Response blog. Arxivat de l'original el 2019-08-18. [Consulta: 12 febrer 2015].
* ↑ Vijayan Prabhakaran, et al. «IRON File Systems» (PDF). CS Dept, Universitat de Wisconsin.
* ↑ Http://kernelnewbies.org/Ext4#head-38e6ac2b5f58f10989d72386e6f9cc2ef7217fb0

## Vegeu també

* Ext2
* Ext3
* Btrfs
* Sistema de fitxers