NFS (Italiano)
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
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
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
- Vedere anche Avahi, un'implementazione Zeroconf che consente il rilevamento automatico delle condivisioni NFS.
- HOWTO: Diskless network boot NFS root
- Veramente utile
- Se si sta impostando un server Archlinux NFS per utilizzarlo da clients Windows tramite Microsoft's SFU, si risparmierà molto tempo seguendo quanto riportato in questo post[link interrotto 2020-08-04]
- Microsoft Services for Unix NFS Client info[link interrotto 2020-08-04]
- Unix interoperability and Windows Vista[link interrotto 2020-08-04] Pre-requisiti per connettersi da Vista a NFS