Home Developement
Velocizzare il sistema con un partizionamento "ad hoc" PDF Stampa E-mail
GNU/Linux - Tips 'n Tricks
Scritto da E. Mottola   
Mercoledì 29 Ottobre 2008 13:53

 

Dopo tante installazioni di Windows ma specie di Gnu/Linux, ed in particolare di Gentoo in tutte le varie modalità anche combinate (raid / lvm / crypto), e ripetuti test sui vari partizionamenti che permettano di velocizzare il sistema ma in sicurezza, sono finalmente giunto a delle conclusioni che possono essere utili, perlomeno come spunto di riflessione o idee sul proprio partizionamento.

Quanto segue è frutto della mia personale esperienza e cultura, per cui declino ogni resposabilità sull'uso delle informazioni qui presenti e sui consigli forniti, è tutto a vostro rischio e pericolo

 

Le distribuzioni di Linux, ma anche Windows in generale installano il sistema operativo in una sola partizione sull'hard disk. La prima cosa da fare (anche con Windows) è installare il sistema operativo in una partizione dedicata, sicuramente più piccola, ed utilizzare una seconda partizione più capiente per salvare e utilizzare tutti i nostri dati. In questo modo se si dovesse reinstallare il sistema operativo non ci si dovrà preoccupare di salvare/recuperare tutti i dati.

Si può notare come diverse distribuzioni usino di default una partizione di boot separata, con grandezza di qualche decina di mega, al massimo un centianaio. Questa accortezza, unita al fatto che questa partizione non viene solitamente montata in automatico all'avvio del sistema, è una misura di sicurezza importante poiché così facendo l'immagine del kernel e dell'initrd risiedono ovviamente in una partizione separata e non montata durante l'utilizzo del sistema.

Ecco quindi che in caso di danneggiamento del filesystem principale, i file necessari al boot del sistema operativo rimangono intatti, non risiedendo nel filesystem principale. In questo modo il sistema, anche in seguito ad uno spegnimento improvviso o comunque ad una corruzione del filesystem, può comunque "boottare" e correggere automaticamente eventuali errori, specie in presenza di filesystem di tipo jounaled, come lo sono quelli che si usano attualmente.

Avere la partizione di boot separata è una delle misure di sicurezza più efficaci ed essenziali, ma un adeguato partizionamento consente anche di velocizzare tutto il sistema, usando i filesystem appropriati dove serve.

Alla ricerca della risposta a questo quesito su internet ho trovato spesso solo la soluzione per sistemi server, dove le necessità sono quelle di tenere separato lo spazio utente, dei file temporanei e altro, cose non strettamente necessarie in un sistema desktop.

Prima di procedere all'analisi, ecco i tipi di filesystem oggi disponibili nel kernel Linux:

Per le peculiarità di ognuno si rimanda alle pagine dei siti di supporto della propria distribuzione, poiché l'argomento è lungo e non sarebbe possibile trattarlo contestualmente.

Si può però sintetizzare al massimo dicendo che:

  • Ext2 è la versione non journaled dell'Ext3, quella che si è usata per anni prima dell'inttroduzione di questa caratteristica, ottimo per le pendrive USB, la partizione di boot. E' il più veloce di tutti (a causa della mancanza del jounaling e proprio per questa carenza non è assolutamente consigliato da usare per il sistema operativo.
  • Ext3 è il filesystem standard di Linux, il più affidabile, collaudato, solido e dispone di tanti tool di ripristino e recupero. Non ha prestazioni velocistiche come XFS o JFS, occupa più spazio a parità di partizione ed è il più lento nel resize delle partizioni.
  • JFS è velocissimo, è ottimo come uso generale, ed è quello che in assoluto impiega di meno il processore nelle operazioni, inoltre è fortemente scalabile.
  • XFS, è velocissimo, il più veloce in assoluto con i file di grosse dimensioni, è molto scalabile ed è un pò più lento nella cancellazione multipla di file, ma se creato e montato con il buffer raddoppiato, annulla questo problema. E' inoltre il filesystem che fornisce più spazio utilizzabile a parità di dimensione della partizione.
  • ReiserFS (versione 3) è un filesystem che utilizza il tailing dei dati, non più sviluppato e può soffrire di problemi di ripristino in seguito a pesanti crash. E però il più veloce in assoluto nelle directory contenenti tanti file di dimensioni nell'ordine dei KB.
  • Reiser4 ed Ext4 sono molto promettenti ma non essendo considerati stabili nel kernel, non sono stati presi in considerazione, per ora.

 

Per quanto concerne la partizione dati, la scelta ricade facilmente su XFS, ma in fase di creazione del filesystem si può prendere l'accortezza di crearlo con l'opzione size=64m:

# mkfs.xfs -l size=64m /dev/sdxY

E poi montarlo poi con l'opzione logbufs=8:

# mount -o noatime,nodiratime,logbufs=8 /dev/sdxY /mountpoint

Successivamente inserendo in /etc/fstab la riga relativa alla partizione dati:

/dev/sdxY           /mountpoint          xfs             user,users,noatime,nodiratime,logbufs=8    1 2

Raddoppiando in questo modo il buffer del filesystem si rimedia considerevolmente alla lentezza (relativa) di XFS quando si tratta di cancellare tanti file contemporaneamente.

Per via dell'estrema velocità di XFS nel trattare file di grosse dimensioni, conviene parecchio usare questo tipo di filesystem per i file delle macchine virtuali, la differenza con gli altri filesystem in questo caso lampante.

 

Tornando al filesystem principale, si potrebbe farlo sia in Ext3 che XFS che JFS. Tuttavia dato che, test alla mano, la differenza prestazionale tra questi in ambito general purpose non è così evidente, si parla di un 2-5% a seconda dei casi, conviene ponderare la scelta basandosi più che sulle mere prestazioni, sulle possibilità di ripristino (come quantità ed efficacia dei programmi esistenti) e recupero automatico dell'integrità del filesystem, essendo appunto questa partizione la più delicata ed importante di tutto il sistema. Fatte queste considerazioni la scelta migliore è evidente: il collaudatissimo Ext3, una vera roccia.

Il partizionamento del sistema può essere adattato alla distribuzione in uso, ma in ogni caso conviene tenere almeno due cartelle su partizioni separate:

  • /tmp     Per questioni di sicurezza, impendendo ai programmi utente di saturare il filesystem principale in caso di bug, attacchi, o malfunzionamenti
  • /var     Sia per ragioni di sicurezza come sopra, sia per velocizzare il sistema, infatti qui si trovano tutte molti dei file temporanei che i programmi utilizzano a runtime.

Per entrambe queste partizioni il miglior filesystem per queste due directory è JFS, velocissimo in tutti gli ambiti, creazione/cancellazione eccetera, ed impegna molto meno il processore.

Volendo spingersi più in là col tuning, se si è fortunati possessori di una Gentoo su qualsiasi architettura, dalla ps3 alla ia64, allora si possono ottimizzare altre directory per via del particolare utilizzo che fa Gentoo ne fa di alcune di esse.

La strada prosegue in due direzioni parallele volte ad un medesimo obbiettivo: velocizzare portage.
Da un lato si può migliorare la velocità con cui opera portage, nel calcolo delle dipendenze, delle coerenze e negli aggiornamenti, dall'altro si può velocizzare la compilazione effettiva dei software. Si possono quindi addottare partizioni dedicate per:

  • /var/cache                Occupa mediamente meno di 200MB, e qui c'è la cache di portage (una parte)
  • /var/tmp/portage     Qui avvengono le compilazioni vere e proprie dei software
  • /usr/portage            Il cuore di Gentoo, diverse centinaia di cartelle e sottocartelle, archivi dei sorgenti, overlay e migliaia di ebuild


Utilizzando una piccola partizione per /var/cache con filesystem ReiserFS la velocità di portage nel svolgere le operazioni comuni migliora sensibilmente, poiché in questa cartella ci sono centinaia di piccoli file, ReiserFS qui è imbattibile.

Per la directory /var/tmp/portage se si possiede nel sistema un altro hard disk, la cosa sicuramente migliore da fare e ricavare una partizione di 5-8Gb a seconda dei megasoftware che si vuole compilare, come firefox, thunderbird od openoffice. Il tipo di filesystem migliore, dato l'intensivo utilizzo che si fa di questa cartella, è sicuramente JFS, considerando sempre il connubio tra velocità e limitata occupazione di risorse, che nella compilazione sono decisamente importanti.

La directory /usr/portage, dalle prove da me condotte su tutti i tipi di filesystem, convine farla in JFS, per via dell'utilizzo intenso che emerge ne fa quando eseguito, una valida alternativa può essere ReiserFS, ma a patto di avere poi /usr/portage/distfiles separata.

Le altre directory, come /usr, /home, /opt, non conviene averle separate per varie ragioni:

  • farle in Ext3 per via dell'importanza dei dati in esse contenute non avrebbe senso, possono stare senza complicazioni nella root, assumendo che sia in Ext3
  • Cambiare filesystem non conviene per /usr perché nel 95% dei casi vi si accede in sola lettura, e date le prestazioni pressocché equivalenti dei filesystem sulla lettura di singoli file di dimensioni non eccessive, è solo uno specchietto per le allodole.
  • La cartella /opt si usa molto raramente e sarebbe controproducente avere una partizione dedicata.
  • Solo la home avrebbe un senso farla in JFS la scelta è personale, io dopo varie prove la tengo in Ext3, mi fa dormire sonni più tranquilli.

 

Fin qui si potrebbe obiettare lo scarso utilizzo dell'eccellente velocista XFS, ma bisogna considerare tutto il sistema nei vari aspetti. In altre parole avere tante partizioni piccole in XFS per poi usarle con file misti, piccoli e grandi, non sfrutterebbe al massimo le sue caratteristiche, e dato che l'XFS è il più sensibile, tra tutti, agli spegnimenti improvvisi, poiché ritarda al massimo la scrittura, ed è quindi meglio usarlo nella partizione dati, anche immensa, perché mette a frutto la sua struttura a 64 bit e la sua forte scalabilità. Certo, possedere un buon UPS, rende la vita più serena in ogni caso.

Bisogna inoltre considerare due difetti di XFS: il consumo elevato di cicli di clock e la sua incapacità di ridimensionarsi a runtime.
Per farsi un'idea l'XFS utilizza ben 7 processi per ogni partizione montata, JFS 4 processi per 4 partizioni (non associati 1:1).

 

Se si utilizza LVM poi si deve tener presente la scalabilità dei filesystem, ovvero la capacità di adattarsi alla nuova dimensione delle partizioni. XFS è velocissimo nell'aumentare lo spazio ma non riesce a ridurlo correttamente, almeno nelle prove da me eseguite. Ext3 e ReiserFS sono scalabili ma non veloci nel ridimensionamento, il migliore risulta JFS (Thanks to IBM) che addirittura non necessita di strumenti specifici, come (xfs_growfs, resize_reiserfs) o ma si ridimensiona sia in aumento che diminuzione con un semplice:

# mount -o remount, resize /dev/mapper/vg-xyz

Semplice ma efficacissimo.

 

Spero che lo sharing di questa conoscenza ispiri i più audaci e sperimentatori a provare un tuning completo del proprio partizionamento e del sistema, con in mente l'obbiettivo di ottimizzare e velocizzare il tutto, ma in sicurezza.

 

No hack, no party!

 

 

Ultimo aggiornamento Mercoledì 11 Febbraio 2009 00:57
 

Utenti connessi

 78 visitatori online



Creative Commons License

Questo sito è pubblicato sotto licenza Creative Commons
DeSfA - De Shell Facemmo Ali