Avanti Indietro Indice

4. Configurazione di un client NFS

Prima di tutto hai bisogno di un kernel che abbia il supporto per NFS compilato staticamente oppure come modulo. Questo lo configuri prima di iniziare la compilazione. Se non hai mai compilato un kernel prima, devi leggere il Kernel HOWTO. Se stai usando una distribuzione fatta bene (come Red Hat [meglio Debian N.d.T]) e non hai mai messo mano al kernel o ai moduli, (rovinandolo ;)), allora nfs dovrebbe essere già disponibile.

Ora, dal prompt di root, puoi lanciare il comando appropriato e vedere il file system apparire. Continuando l'esempio della sezione precedente, vogliamo montare la partizione in /mn/eris/local da eris. Ciò è fatto con il comando:


mount -o rsize=1024,wsize=1024 eris:/mn/eris/local /mnt

(Torneremo successivamente sulle opzioni rsize e wsize). Il file system è ora disponibile sotto /mnt e puoi fare cd in esso, e con un ls vedere tutti i file che vi sono presenti. Noterai che non è così veloce come su un file system locale, ma molto più conveniente che usare ftp. Se invece di montare il file system, il comando mound produce un errore come mount: eris:/mn/eris/local failed, reason given by server: Permission denied, allora il file exports è errato, oppure hai dimenticato di lanciare il comando exportfs dopo averlo modificato. Se invece dice mount clntudp_create: RPC: Program not registered significa che nfsd oppure mountd non stanno girando sul server. Oppure hai il problema nel file hosts.{allow,deny} di cui abbiamo parlato precedentemente.

Per togliere il filesystem, devi usare il comando:


umount /mnt

Per fare in modo che il sistema monti file system al boot, devi modificare il file /etc/fstab. Per il nostro esempio devi aggiungere la seguente riga:


# device      mountpoint     fs-type     options              dump fsckorder
...
eris:/mn/eris/local  /mnt    nfs        rsize=1024,wsize=1024 0    0
...

Questo è tutto, più o meno.

4.1 Opzioni del comando mount

Ci sono alcune opzioni che dovresti guardare almeno una volta. Governano il modo in cui i client NFS gestiscono i crash della rete o del server. Una delle cose belle di NFS è che questi problemi vengono gestiti molto bene...se configuri i client in modo corretto. Ci sono due tipi di problemi:

software

Il client NFS sono responsabili di riportare l'errore al processo che sta accedendo ad un file su un file system montato. Alcuni programmi gestiscono la segnalazione, altri no. Non raccomando l'uso di questo parametro.

hardware

Il programma che tenti di accedere ad un file su un file system NFS si bloccherà quando il server ha un crash. Il processo non potrà essere interrotto o killato a meno che tu non specifichi il parametro intr. Quando il server NFS torna in linea, il programma riprenderà a funzionare correttamente. Questo è probabilmente il funzionamento che vorresti. Raccomando di usare hard,intr su tutti i file system montati via NFS.

Riprendendo l'esempio precedente, modifichiamo la linea dell'fstab:


# device         mountpoint fs-type    options                   dump fsckorder
...
eris:/mn/eris/local  /mnt     nfs   rsize=1024,wsize=1024,hard,intr 0 0
...

4.2 Ottimizzare NFS

Normalmente, se non vengono usate le opzioni rsize e wsize, NFS leggerà e scriverà blocchi di 496 o 8192 bytes. Alcune combinazioni di kernel di linux e schede di rete possono non essere in grado di gestire blocchi così grandi o potrebbero non esserlo comunque maniera ottimale. Quindi dobbiamo provare a sperimentare varie dimensioni per determinare quali siano i parametri che funzionino e garantiscano le migliori prestazioni. Puoi provare l'influenza delle opzioni sulla velocità con alcuni semplici comandi. Se hai montato la partizione come sopra ed hai i diritti di scrittura, puoi provare con il seguente test di scrittura sequenziale:


time dd if=/dev/zero of=/mnt/testfile bs=16k count=4096

Questo crea un file di 64MB di zeri (grande abbastanza per fare in modo che l'uso delle cache non sia significativo sulle prestazioni, usa una dimensione maggiore se hai molta memoria disponibile). Lancialo alcune volte (5-10?) e prendi il tempo medio. Il tempo da tenere maggiormente in considerazione è quello indicato con 'elapsed' oppure 'wall clock'. Quindi puoi testare le prestazioni in lettura:


time dd if=/mnt/testfile of=/dev/null bs=16k

Fallo alcune volte e fai la media dei tempi. Quindi smonta e rimonta la partizione nuovamente ma con rsize e wsize maggiori. Dovrebbero essere sempre multipli di 1024 e non essere più grandi di 16384, che è la dimensione massima ammessa da NFS versione 2. Dopo averla montata nuovamente, fai un cd nel file system montato e prova qualche semplice comando tipo ls, esplora il file system, eccetera per vedere se il tutto funziona correttamente. I sintomi di rsize/wsize troppo grandi, sono molto strani e per nulla ovvi. Un sintomo tipico è una lista incompleta di file quando viene fatto un 'ls', senza alcun messaggio di errore. Oppure la lettura dei file fallisce miseramente senza messaggi di errore. Dopo avere stabilito che le dimensioni di rsize e wsize funzionano, allora puoi provare i test nuovamente. Server diversi hanno dimensioni ottimali diverse. SunOS e solaris hanno la reputazione di andare molto più veloci con blocchi di 4096 byte.

I kernel di linux più recenti (dal 1.3), eseguono un read-ahead per rsize di dimensioni maggiori o uguali alla dimensione della pagina della macchina. Sui processori Intel, la dimensione della pagina è di 4096 byte. Poiché l'uso del read-ahead aumenta significativamente le prestazioni in lettura di NFS, raccomando di settare a 4096 le dimensioni di rsize.

Ricorda di modificare /etc/fstab per riflettere le dimensioni di rsize/wsize che hai trovato essere le migliori.

Un trucco per accelerare le prestazioni in scrittura di NFS, è quello di disabilitare la scrittura in sincronia sul server. Le specifiche di NFS controllano che le richieste di scrittura sul server non siano considerate terminate finché i dati non siano memorizzati su un supporto non volatile (il disco). Questo limita le prestazioni in scrittura, per cui disabilitando questa caratteristica si otterrà un incremento delle prestazioni. Il nfsd di linux non ha più fatto scritture sincrone da quando non lo fa nemmeno il file system stesso. Su macchine non linux, puoi aumentare le prestazioni modificando in questo modo il file /etc/exports:


/dir    -async,access=linuxbox

o qualcosa di simile. Fai riferimento alla pagina man relativa al file exports della macchina in questione. Da notare che ciò aumenta la possibilità di perdita di dati.


Avanti Indietro Indice