# Ext2

Il file system ext2 (Second Extended Filesystem) è uno dei file system più diffusi nei vari sistemi operativi open source, in quanto è stato per lungo tempo quello usato dai sistemi GNU/Linux.
Attualmente è supportato da tutti i sistemi operativi open source ed esistono programmi per utilizzare i volumi ext2 anche da sistemi proprietari come Microsoft Windows, come Explore2fs, (senza supporto Microsoft) e macOS.
Benché le sue caratteristiche tecniche lo rendano obsoleto, il suo uso è ancora diffuso per via delle sue buone prestazioni e della grande stabilità che ha dimostrato negli anni. Questa superiorità in termini di prestazioni la deve anche al fatto che i più moderni filesystem di questo tipo come ext3 implementano una funzionalità chiamata journaling che aumenta la loro integrità ma a discapito dell'efficienza.
Inoltre, sebbene nel momento della sua prima scrittura la dimensione massima di un volume fosse di 2GB, ora ext2 supporta volumi di 4TB.
Ext2 è stato sostituito da una versione più recente, Ext3 che introduce delle importanti caratteristiche mantenendo la compatibilità completa. L'ultima evoluzione del filesystem (Ext4) introduce modifiche più sostanziali che possono rendere un filesystem Ext4 incompatibile con un filesystem Ext2.

## Storia

Agli inizi dello sviluppo del Kernel di Linux, veniva usato il file system Minix. Il file system Minix era per lo più privo di bug, ma usava offset a 16 bit e per questo era limitato a soli 64 megabytes. Aveva pure una lunghezza massima dei nomi di file di 14 caratteri. A causa di queste limitazioni, si iniziò a progettare un file system nativo per Linux.
Per facilitare l'aggiunta di nuovi file system e fornire una API, fu aggiunto al kernel un layer per file system virtuali: VFS. Un file system, extended file system (ext), fu distribuito nell'aprile 1992 come il primo file system che utilizzava l'API VFS ed era compreso nel Kernel 0.96c. Il file system ext risolveva i due maggiori problemi del file system Minix, la massima dimensione della partizione e la lunghezza massima dei nomi di file, permettendo partizioni grandi 2 gigabytes e nomi di file lunghi fino a 255 caratteri. Aveva alcuni difetti: non aveva il supporto ad accessi separati, non permetteva modifiche agli inode e ai timestamp dei file.
Questi problemi vennero risolti introducendo due nuovi file system, usciti nel gennaio 1993: xiafs ed il second extended file system (ext2), che era un potenziamento dell'extended file system, prendendo alcune idee dal Berkeley Fast File System. Ext2 è stato progettato in modo da essere estendibile.
Da allora ext2 è stato esteso varie volte:ACLs POSIX ed attributi estesi.
Il file system ext2 permette partizioni grandi 4 terabytes, lunghezza di nomi fino a 255 caratteri e blocchi di dimensioni variabili.

## I file

Lo spazio è suddiviso in blocchi e organizzato in gruppi di blocchi. Ciò doveva servire a ridurre la frammentazione interna e minimizzare i movimenti della testina del disco durante la lettura di molti dati consecutivi.
All'interno di ogni gruppo di blocchi ci sono i superblock, group descriptor, block bitmap, inode bitmap, infine seguiti dai blocchi dei dati.
Il superblock contiene informazioni importanti per l'avvio del sistema operativo, per cui vengono fatte copie di backup in ogni gruppo dei blocchi. Solo la prima copia viene utilizzata per l'avvio.
Il descrittore del gruppo memorizza il valore del block bitmap, inode bitmap e l'inizio della tabella degli inode per ogni gruppo dei blocchi.

## Limiti del file system

Limiti sotto Linux :
| Dimensione del blocco: | 1 KiB | 2 KiB | 4 KiB | 8 KiB |
| Dimensione massima del file: | 16 GiB | 256 GiB | 2 TiB | 2 TiB |
| Dimensione massima del filesystem: | 2 TiB | 8 TiB | 16 TiB | 32 TiB |