mercoledì 1 settembre 2010

ext4 su SSD: si, ma senza la funzione journaling

Uno dei file system senza dubbio più usato nei sistemi GNU/Linux è il file system ext2 (second extended file system). La semplicità e la stabilità di questo file system sono alla base del successo di ext2. Per questo troviamo sempre ext2 fra le possibili scelte di file system quando ci apprestiamo a installare Linux sul nostro computer.
ext4 (fourth extended filesystem), rilasciato nel 2006, segue ad ext3 e introduce nuove e interessanti funzionalità. Il suo sviluppo consiste essenzialmente in alcune estensioni aggiuntive fatte su ext3 (non senza polemiche, ext4 nasce come fork di ext3 ed è stato successivamente integrato nel kernel a partire dalla versione 2.6.28). Ecco alcune (delle principali) caratteristiche di ext4:
  • Indirizzamento a 48 bit, la conseguenza di tutto ciò si traduce nell'aumento della dimensione massima per un file;
  • Introduzione di extent per la gestione di blocchi: un extent rappresenta un gruppo di blocchi contigui appartenenti a un file e favorisce la non deframmentazione del disco. In altre parole per un file viene creato un extent di blocchi contigui, ove possibile, anziché memorizzare il contenuto del file in tanti blocchi non contigui (che comportano tra l'altro la gestione, a volte molto onerosa, di una mappa di blocchi liberi);
  • Introduzione dell'allocazione multiblocco: l'ispirazione nasce sempre sui predecessori, ext3 usa un'allocatore per blocchi (presi dalla mappa di blocchi liberi) che assegna al file 4KB alla volta! La chiamata avviene tuttavia in maniera iterativa e l'allocatore viene chiamato n volte! Con n pari alla dimensione del file da scrivere diviso la dimensione del blocco. Non vi sembra un lavoro eccessivo? ext4, invece, alloca con una sola chiamata i blocchi necessari al file (definendo un extent);
  • Uso dell'allocazione ritardata: va subito detto, per tranquillizzare molti utenti, che il contenuto del file system non subisce perdite di informazioni. Se un file deve essere scritto sul file system ne ritroveremo comunque il contenuto! Questa caratteristica ha un impatto a mio avviso eccezionale sulle prestazioni del file system (che poi ritroviamo in una maggiore reattività del sistema). Durante la scrittura di un file, ext3 allocherebbe di continuo blocchi utili al file stesso, pur non sapendo se quest'ultimo possa effettivamente servire (pensate ad esempio a un file temporaneo, prima scritto e poi cancellato dopo essere stato consumato; oppure a un file in download in continua crescita). ext4 invece pone i dati del file in una cache (solitamente la memoria ram del computer), almeno finché può farlo, riportandone poi il contenuto (in blocchi contigui, extent) sul filesystem;
  • Preallocazione di blocchi: avete mai usato Torrent o programmi di P2P simili? Quando ha inizio il download del file viene allocato un file (riempito man mano che il download procede) avente le stesse dimensioni del file finale. L'ispirazione, in questo caso, nasce da lì: è importante per alcune applicazioni (soprattutto quelle real time) disporre dello spazio per un file che verrà poi scritto successivamente;
  • Uso di H-tree per superare il limite del numero di cartelle in una cartella e migliorare la gestione delle cartelle di grossa dimensione;
  • Controllo più rapido con fsck: in ext4 esiste una tabella con gli i-node inutilizzati sicché fsck saprà bene cosa fare (ovvero saltare il controllo di quel gruppo);
  • Uso della funzione journaling: è sicuramente una delle funzioni che contribuisce di più alla consistenza del file system! Immaginate di scrivere in un diario e sotto forma di un unico blocco le operazioni da fare per portare a termine una determinata cosa. Solo al completamento dell'ultima operazione potete allora affermare di aver completato l'operazione scritta sul diario, se una sola delle operazioni in sequenza non avviene si può in ogni caso tornare dietro e ripristinare tutto com'era prima (operazione di rollback). ext4 realizza una cosa come questa quando deve scrivere sul file system! Se durante un processo di scrittura viene a mancare, ad esempio, la corrente il sistema operativo leggendo un file di log si accorge di un'operazione incompleta e ripristina lo stato del file system. Tutto questo comporta tuttavia un lavoro aggiuntivo per la cpu e il disco, in alcuni casi tale funzione può comunque essere disattivata.
Non vi è dubbio dei vantaggi portati da ext4, potete sperimentarli stesso voi. Vi assicuro che (su PC di ultima generazione) avvertirete l'incremento. Ho sperimentato di persona l'uso di questo file system anche sull'Aspire One (il modello 110L, con 512MB di memoria ram e disco SSD) e ne consiglio l'uso a patto di disabilitare la funzione di journaling. Purtroppo il disco SSD usato di default in questo modello non ha prestazioni eccezionali, anche se va comunque detto che rispetto ai sistemi Windows questo disco non sembra essere lo stesso (lì la situazione è ancora più drammatica).
Vi dico come disabilitare questa funzione in Xubuntu (10.04), procuratevi un pen-drive usb con una distribuzione live di Linux (quella usata per installare il sistema operativo che adesso state usando va bene). Avviate l'Aspire One in modalità live, in questo modo il disco SSD non verrà neppure montato e noi possiamo applicare in tutta tranquillità le modifiche al disco. Avviato?
Mi raccomando, non montate la partizione sul disco SSD (ad esempio andando a vedere nel file manager il contenuto dello stesso, di default il sistema operativo monterà la partizione di quel disco, non fatelo!) Aprite ora una finestra di terminale e date il comando:
sudo tune2fs -O ^has_journal /dev/sda1
sostuite sda1 con il nome della vostra partizione, qualora dovesse essere diversa da quella mostrata nell'esempio. Se non si sono verificati errori di battitura (potete copiare e incollare il comando direttamente nel vostro terminale) potete chiudere le finestre aperte e riavviare l'Aspire One, questa volta facendo caricare il sistema operativo presente sul disco (non dimenticate di staccare la pen-drive usb).
Per verificare l'avvenuta disabilitazione della funzione di journal possiamo dare il seguente comando:
sudo dumpe2fs -h /dev/sda1 | grep features
modificate sempre la partizione sda1 usata nell'esempio se non corrisponde a quella da voi usata. Il comando può essere usato prima e dopo la modifica al file system. Se eseguito prima della modifica questo comando ritorna un elenco delle funzioni abilitate sul file system e fra queste, quindi, anche quella di journaling. Dopo la modifica, invece, tale voce scompare e simboleggia l'avvenuta modifica al file system.

Nessun commento:

Posta un commento