Questa sezione intende fornire informazioni dettagliate con le quali ottenere uno schema di partizione su misura per le vostre esigenze. Questo paragrafo è di particolare interesse soprattutto per coloro che vogliono configurare il proprio sistema in modo ottimale – sia per quanto riguarda la sicurezza che la velocità – e sono disposti a reinstallare il sistema; fare, per così dire, tabula rasa.
È assolutamente necessario avere cognizioni di base riguardanti il funzionamento di un file system di UNIX e non dovrebbero esservi sconosciuti concetti come punto di mount, partizioni fisiche, partizioni estese o partizioni logiche.
Per prima cosa dovete raccogliere le seguenti informazioni:
In quale ambito volete usare il computer (server di file, server delle applicazioni, server di calcolo, postazione di lavoro singola)?
Quante persone lavoreranno su questo computer (login simultanei)?
Quanti hard disk ha il computer, che capacità hanno e di che tipo sono (controller EIDE, SCSI o RAID)?
Spesso leggerete “come minimo lo spazio di swap deve corrispondere al doppio della memoria RAM”. Questa formula è un lascito dei tempi in cui 8 Mbyte di RAM nel computer erano un lusso di pochi; un computer dovrebbe disporre ca. 30/ 40 Mbyte di memoria virtuale, dunque Ram più swap. Con applicazioni moderne che richiedono molta memoria, bisogna correggere questi valori “verso l'alto”. Attualmente e per il prossimo futuro un utente medio con 512 Mbyte di memoria virtuale va sul sicuro. Quello che non dovete assolutamente fare è non dedicare alcun spazio alla memoria swap.
Se ricorrete alla cosiddetta ibernazione del sistema (suspend to disk), il contenuto della RAM vien trasferito sulla partizione swap. In questi casi la partizione swap deve essere più grande della RAM.
Qui la performance del vostro hard disk è veramente importante e si dovrebbe dare la preferenza a dispositivi SCSI. Fate anche attenzione alle performance dei dischi e dei controller.
Un file server offre la possibilità di gestire i dati centralmente; può trattarsi di home directory degli utenti, di una banca dati o di archivi. Il vantaggio è una amministrazione più semplice. Se il file server troverà impiego in una rete di una certa estensione (a partire da 20 utenti), è essenziale ottimizzare l'accesso al disco rigido. Mettiamo il caso che vogliate impostare un file server Linux che debba consentire l'accesso alle directory home di 25 utenti, e sapete che ogni utente utilizzerà al massimo 1000-1500 MB per i propri dati personali; allora basterà un disco da 40 GB montato sotto /home, se non tutti gli utenti si mettono a compilare nella propria directory home.
Se avete 50 utenti, dal punto di vista puramente matematico, sarebbe necessario un disco da 80 GB; è però meglio in questi casi dividere /home su due dischi da 40 GB, poiché questi si possono dividere il carico di lavoro (e il tempo di accesso).
![]() | Tip |
|---|---|
La memoria cache di un browser web va tenuta assolutamente su hard disk locali! | |
Questo tipo di server è solitamente un computer molto potente che in una rete si assume i compiti di calcolo intensivo. Un tale computer dispone tipicamente di una memoria principale un po' più capiente (dai 512 MB di RAM in su). L'unico punto dove bisogna intervenire per assicurare una elevata velocità del disco è rappresentato da eventuali partizioni swap. Anche qui vale la regola: è preferibile suddividere su più dischi le partizioni swap.
I dischi rigidi rappresentano generalmente il cosiddetto "collo di bottiglia". Per aggirarlo, esistono tre possibilità da applicare congiuntamente:
Dividete il carico di lavoro in parti uguali su più dischi.
Impiegate un file system ottimizzato (p. es. reiserfs).
Allocate sufficiente memoria (al meno 256 MB) per il vostro file server.
Qui è necessaria una spiegazione un po' più dettagliata. Il tempo totale necessario per il trasferimento di dati è dovuto in circa:
Al tempo necessario affinché la richiesta arrivi al controller del disco.
Al tempo necessario affinché il controller del disco invii questa richiesta all'hard disk.
Al tempo necessario affinché l'hard disk posizioni la testina.
Al tempo necessario affinché il dispositivo si porti sul settore giusto.
Al tempo per il trasferimento dei dati.
Il punto 1 dipende dalla connessione di rete e va regolato in quella sede. Il punto 2 è un intervallo di tempo veramente minimo che dipende dal controller del disco. I punti 3 e 4 rappresentano lo scoglio maggiore. Il posizionamento viene misurato in ms (millesimi di secondo): se guardiamo ai tempi d'accesso (misurati in ns nano-secondi) nella memoria principale, abbiamo un fattore di 1 milione. Il punto 4 dipende dal numero di giri per minuto del disco. Il punto 5 dipende dal numero dei giri e dal numero delle testine, come pure dal posizionamento della testina (interno o esterno).
Per una ottima performance si deve quindi intervenire sul punto 3. Nei dispositivi SCSI entra qui in gioco la funzione disconnect: il controller manda al dispositivo collegato (in questo caso l'hard disk) il comando Vai alla traccia x, settore y. Ora è la meccanica relativamente lenta del disco che si mette in movimento. Se il disco è intelligente (cioè dispone della funzione disconnect) e se anche il driver per il controller dispone di questa caratteristica, il controller manda al disco subito dopo l'operazione richiesta il comando "disconnect" e il disco si disconette dal bus SCSI. Da questo momento in poi anche gli altri dispositivi SCSI possono portare a termine il loro transfer di dati. Dopo un po' (a seconda della strategia o del carico del bus SCSI) viene riattivato il collegamento con il disco; di solito, a questo punto nel miglior dei casi il dispositivo ha già raggiunto la traccia richiesta.
In un sistema operativo multitasking e multiutente come Linux sono parecchie le ottimizzazioni che si possono attuare. Guardiamo un po' un dettaglio dell'output del comando df (cfr. output Example 3.1, “Esempio di output del comando df”).
Example 3.1. Esempio di output del comando df
Filesystem Size Used Avail Use% Mounted on /dev/sda5 1.8G 1.6G 201M 89% / /dev/sda1 23M 3.9M 17M 18% /boot /dev/sdb1 2.9G 2.1G 677M 76% /usr /dev/sdc1 1.9G 958M 941M 51% /usr/lib shmfs 185M 0 184M 0% /dev/shm
Quali sono dunque i benefici di questo approccio? Facciamo un esempio, immettiamo in /usr/src come root:
tar xzf pacchetto.tar.gz -C /usr/lib
Ciò significa che pacchetto.tar.gz debba venire installato sotto /usr/lib/pacchetto. Per farlo, la shell richiama tar e gzip (che risiedono sotto /bin e quindi su /dev/sda), poi viene letto pacchetto.tar.gz da /usr/src (che si trova su /dev/sdb). Infine, i dati estratti vengono scritti sotto /usr/lib (che si trova su /dev/sdc). Ora sia il posizionamento che l'accesso in lettura/scrittura al buffer interno del disco possono venire eseguiti quasi in parallelo.
Questo è solo un esempio fra tanti. Come regola generale vale che, in presenza di diversi dischi (della stessa velocità), /usr e /usr/lib dovrebbero risiedere su dischi differenti; /usr/lib dovrebbe avere ca. il 70% del volume di /usr. La directory root / dovrebbe trovarsi sul disco su cui si trova /usr/lib per ragioni dovuti alla frequenza di accesso.
Molto spesso sentirete dire che la dimensione della memoria principale sotto Linux è più importante della velocità del processore. Uno dei motivi - se non il principale - è la capacità di Linux di creare buffer dinamici contenti dei dati dell'hard disk. Per farlo Linux utilizza vari trucchetti, come p.es. read ahead (lettura anticipata) e delayed write (salva diverse operazioni di scrittura per poi eseguirle in una sola volta). Quest'ultima caratteristica è il motivo per cui non si deve mai spegnere un computer Linux in maniera scorretta. Entrambi i fattori sono la spiegazione del perché la memoria principale sembra riempirsi con il tempo, e perché Linux sia così veloce; cfr. anche la sezione Section 9.1.7, “Il comando free”.