NFS (Italiano)

From ArchWiki
Revision as of 16:08, 4 December 2012 by Kynikos.bot (Talk | contribs) (wikify some external links, use https for archlinux.org)

Jump to: navigation, search

Lo scopo di questo articolo è quello di configurare un server nfs per condividere file in rete.

  • Nota: per NFSv4, consultare la guida a NFSv4
  • nfs-utils è stato aggiornato dal 2009-06-23, ed è ora abilitato il supporto NFS4. Vedere news bulletin.
  • portmap è stato sostituito da rpcbind.

Pacchetti richiesti

I pacchetti necessari per l'installazione e la configurazione del server e del client sono pochi. Sarà solo necessario installare il pacchetto nfs-utils dai repositories ufficiali.

Configurazione del server

Ora si potranno modificare i file di configurazione necessari e avviare i demoni.

File

/etc/exports

Questo file (/etc/exports) definisce le varie condivisioni e i relativi permessi sul server nfs. Ad esempio:

/files *(ro,sync) # Accesso in sola lettura per chiunque
/files 192.168.0.100(rw,sync) # Accesso in lettura/scrittura da un client su 192.168.0.100
/files 192.168.1.1/24(rw,sync) #  Accesso in lettura/scrittura dai client compresi tra 192.168.1.1 e 192.168.1.255

Se si effettuano cambiamenti al file /etc/exports dopo aver avviato il demone, è possibile renderli effettivi digitando il seguente comando:

# exportfs -r

Se si decide di configurare il server nfs come pubblico e accessibile in scrittura, si può utilizzare l'opzione all_squash in combinazione con le opzioni anonuid e anongid. Per esempio, per impostare i privilegi per l'utente nobody nel gruppo nobody, si possono impostare i seguenti parametri:

; Accesso in lettura/scrittura ai client su 192.168.0.100, con accesso rw per l'utente 99 con gid 99
/files 192.168.0.100(rw,sync,all_squash,anonuid=99,anongid=99))

Questo inoltre significa che, se si vuole dare diritto di scrittura e lettura a questa direcotry, l'utente nobody.nobody deve essere il possessore della directory condivisa:

# chown -R nobody.nobody /files

Maggiori e più approfonditi dettagli sui file di export sono disponibili sulla man page exports.

/etc/conf.d/nfs-common.conf

Nota: Quanto utilizzato in /etc/conf.d/nfs è sostituito da "/etc/conf.d/nfs-common.conf" e "/etc/conf.d/nfs-server.conf".

E' possibile editare il file /etc/conf.d/nfs per passare particolari parametri a run-time a nfsd, mountd, statd, e sm-notify. Lo script di init nfs di default per Arch richiede l'opzione --no-notify per statd. Ad esempio:

STATD_OPTS="--no-notify"

Altre opzioni possono essere lasciate impostate come di default o cambiate a seconda delle proprie esigenze. E' opportuno far riferimento alle relative pagine di man per maggiori dettagli.

Demoni

Potete ora avviare i demoni installati con i seguenti comandi:

# rc.d start rpcbind (or: rc.d start portmap)
# rc.d start nfs-common (or: rc.d start nfslock)
# rc.d start nfs-server (or: rc.d start nfsd)

E' importante notare che i serivzi vanno avviati nell'ordine specificato. Per avviare il server nfs all'avvio del sistema, aggiungere i demoni nella lista DAEMONS del file /etc/rc.conf. È necessario lanciare il demone da root o usando sudo se si fa partire da terminale.

Configurazione del client

File

/etc/conf.d/nfs-common.conf

Editare il file /etc/conf.d/nfs per passare le appropriate opzioni a run-time a statd - le rimanenti opzioni sono solo per il server. NON usare l'opzione --no-notify lato client, se non si conoscono le esatte conseguenze.

Fare riferimento al man di statd per maggiori dettagli.

Demoni

Avviare i demoni rpcbind e nfs-common:

rc.d start rpcbind (or: rc.d start portmap)
rc.d start nfs-common (or: rc.d start nfslock)

L'ordine di avvio indicato è obbligatorio.

Per aviare automaticamente i demoni all'avvio del sistema aggiungerli nella lista DAEMONS del file /etc/rc.conf.

Montaggio

Dopodichè è sufficiente montare normalmente:

mount server:/files /files

A differenza delle condivisioni CIFS o rsync, gli exports NFS devono essere richiamati con il percorso completo sul server; ad esempio, se /home/fred/music è definita in /etc/exports sul server ELROND, si deve chiamare:

mount ELROND:/home/fred/music /mnt/point

o semplicemente utilizzare:

mount ELROND:music /mnt/point

altrimenti si otterrà mount.nfs: access denied by server while mounting

Nota: Se si ottengono i seguenti messaggi allora, probabilmente, non si sono avviati i demoni della sezione precedente o durante il loro avvio qualcosa è andato storto.
mount: wrong fs type, bad option, bad superblock on 192.168.1.99:/media/raid5-4tb,
       missing codepage or helper program, or other error
       (for several filesystems (e.g. nfs, cifs) you might
       need a /sbin/mount.<type> helper program)
       In some cases useful info is found in syslog - try
       dmesg | tail  or so

Montaggio tramite cifs

Montare la stessa condivisione utilizzando cifs è leggermente diverso da NFS. Prima di tutto, è necessario definire la condivisione in Samba. Per fare ciò, vedere l'articolo Samba. Andiamo a creare una condivisione "ELROND" chiamandola "music". Per montare tale condivisione con cifs, dovrebbe funzionare il seguente comando

mount -t cifs -v ELROND:music /mnt/point -o guest,iocharset=utf8

Si può provare con:

mount -t cifs -v ELROND:music /mnt/point

O loggandosi con nome e password:

mount -t cifs -v ELROND:music /mnt/point -o username=USERNAME,password=PASSWORD,iocharset=utf8

Maggiori informazioni sono disponibili nella sezione montaggio manuale del wiki samba. Ora si è resa accessibile 1 cartella per clients NFS (in genere linux) e clients CIFS (in genere windows).

Auto-mount all'avvio

Se volete che le directory condivise siano montate automaticamente all'avvio del sistema, assicuratevi che network, rpcbind (portmap), nfs-common (nfslock) e netfs siano presenti nella stringa DAEMONS in /etc/rc.conf nell'esatto ordine qui specificato. E' preferibile non inserire nessuna '@' davanti ai demoni (anche se si potrebbe tranquillamente utilizzare @netfs); ad esempio:

DAEMONS=(... network rpcbind nfs-common @netfs ...)

oppure

DAEMONS=(... network portmap nfslock @netfs ...)

aggiungere le opportune righe al file /etc/fstab, ad esempio:

server:/files /files nfs defaults 0 0

È anche possibile specificare la dimensione dei pacchetti in lettura e scrittura, in tal caso le dimensioni vanno specificate in fstab. I valori riportati di seguito sono quelli default, qualora non ne venissero specificati altri:

server:/files /files nfs rsize=32768,wsize=32768 0 0

Per ulteriori informazioni fare riferimento alla pagina di man di nfs, che include tutte le opzioni di montaggio disponibili.

Risoluzione dei problemi

Performance scarse, bassa velocità di trasferimento e/o alto carico del sistema utilizzando NFS con collegamenti gigabit

Async

Verificare che il flag async sia utilizzato in /etc/exports Esempio:

/nfs4exports		192.168.0.0/24(ro,fsid=0,no_subtree_check,async)
/nfs4exports/data	192.168.0.0/24(rw,no_subtree_check,async,nohide)
/nfs4exports/backup	192.168.0.0/24(rw,no_subtree_check,async,nohide)

Packetsize

Questo è un risultato delle dimensioni di default dei pacchetti impostate in NFS, che causa una significante frammentazione su reti gigabit. E' possibile modificare questo comportamento cambiando l'rsize e la wsize nei parametri di mount. Utilizzare rsize=32768,wsize=32768 dovrebbe essere sufficiente. E' importante notare che questo problema non si verifica su reti a 100 Mb, a causa di una velocità di trasferimento più bassa.

La dimensione utilizzata di defualt da NFS4 è 32786. Il massimo è 65536. Aumentare dal valore di default, a blocchi di 1024 finchè non si raggiunge la velocità massima di trasferimento.

Il demone Portmap non si avvia correttamente durante il boot

Assicurarsi di aver inserito il demone portmap prima di netfs nell'array DAEMONS in /etc/rc.conf.

Nfsd non si avvia, restituendo "nfssvc: No such device"

Assicurarsi che i moduli nfs e nfsd siano caricati nel kernel.

rpcbind non si avvia e non mostra errori nell'avvio da terminale

Lanciare il demone da root o usando sudo.

sudo rc.d start rpcbind

Nfsd sembra funzionare, ma non ci si connette da clients MacOS X

Quando si prova a connettersi da client MacOS X, dai log risulterà tutto ok, ma MacOS X rifiuterà di montare la condivisione NFS. E' necessario aggiungere l'opzione insecure option alla propria condivisione e ri-eseguire exportfs -r.

mount.nfs: Operation not permitted

Dopo l'aggiornamento di nfs-utils alla versione 1.2.1-2, il montaggio della condivisione NFS smette di funzionare. D'ora in poi, nfs-utils utilizza NFSv4 di default al posto di NFSv3. Il problema può essere risolto utilizzando l'opzione di montaggio 'vers=3' oppure 'nfsvers=3' dalla linea di comando:

# mount.nfs <remote target> <directory> -o ...,vers=3,...
# mount.nfs <remote target> <directory> -o ...,nfsvers=3,...

oppure in /etc/fstab:

<remote target> <directory> nfs ...,vers=3,... 0 0
<remote target> <directory> nfs ...,nfsvers=3,... 0 0

L'ownership delle condivisioni montate è 4294967294:4294967294

E' necessario impostare in /etc/conf.d/nfs-common.conf (sul client) i due valori che seguono:

NEED_STATD="no"
NEED_IDMAPD="yes"

Trucchi e suggerimenti

Configurare fixed porte su NFS

Se si ha un firewall port-based, si potrebbero voler impostare delle porte. Per rpc.statd e rpc.mountd si dovrebbero impostare i seguenti settaggi in /etc/conf.d/nfs-common e /etc/conf.d/nfs-server (le porte possono essere differenti):

/etc/conf.d/nfs-common
STATD_OPTS="-p 4000 -o 4003"
/etc/conf.d/nfs-server
MOUNTD_OPTS="--no-nfs-version 2 -p 4002"
/etc/modprobe.d/lockd.conf
# Static ports for NFS lockd
options lockd nlm_udpport=4001 nlm_tcpport=4001

Quindi è necessario riavviare i demoni nfs e ricaricare il modulo lockd:

# modprobe -r lockd 
# modprobe lockd 
# rc.d restart nfs-common nfs-server

Dopo aver riavviato i demoni nfs e ricaricato il modulo, è possibile controllare le porte utilizzando il comando:

$ rpcinfo -p
rpcinfo -p
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper
    100024    1   udp   4000  status
    100024    1   tcp   4000  status
    100021    1   udp   4001  nlockmgr
    100021    3   udp   4001  nlockmgr
    100021    4   udp   4001  nlockmgr
    100021    1   tcp   4001  nlockmgr
    100021    3   tcp   4001  nlockmgr
    100021    4   tcp   4001  nlockmgr
    100003    2   tcp   2049  nfs
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100003    2   udp   2049  nfs
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100005    3   udp   4002  mountd
    100005    3   tcp   4002  mountd

Quindi, è necessario aprire le porte 111-2049-4000-4001-4002-4003 tcp ed udp.

Link utili