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.
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:
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.
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 ...
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.