Nfs-kernel-server: configurazione lato server

Da Guide@Debianizzati.Org.

NFS

Sommario

Spazio Kernel
  1. Lato server
  2. Lato client

Indice

Installazione

Installare i pacchetti necessari:

# apt-get install nfs-kernel-server

Configurazione

nfs-common

Editare il file /etc/default/nfs-common ed assicurarsi che le righe contenenti le variabili NEED_IDMAPD= e NEED_GSSD= appaiano così:

NEED_IDMAPD=yes
NEED_GSSD=no

nfs-kernel-server

Editare il file /etc/default/nfs-kernel-server ed assicurarsi che la riga contenente la variabile NEED_SVCGSSD= appaia così:

NEED_SVCGSSD="no"

Questa è comunque l'opzione di default se non viene specificato nulla.

Da notare che attraverso questo file di configurazione è possibile definire tutte le opzioni di rpc.mountd attraverso il parametro RPCMOUNTDOPTS, come ad esempio restringere il numero delle versioni di protocollo utilizzabili.

idmapd.conf

Editare il file /etc/idmapd.conf, che di default dovrebbe apparire così:

[General]

Verbosity = 0
Pipefs-Directory = /run/nfs/rpc_pipefs
# set your own domain here, if id differs from FQDN minus hostname
#Domain = localdomain

[Mapping]

Nobody-User = nobody
Nobody-Group = nogroup

Il parametro da controllare è Domain, che in maniera automatica debian si ricava come FQDN meno nome host. Se quindi non avete configurato un dominio di rete è assai probabile che rpc.idmapd sbagli ad associare proprietà e regole ACL dei file, ma non i permessi unix che vengono gestiti tramite gli UID (citazione). Per la maggior parte degli utenti home e soho questo non sarà un grosso problema, visto che l'unico effetto visibile sarà un'errata visualizzazione dei proprietari dei file lato client (tutti associati a nobody:nogroup).
Premesso questo è necessario valutare come avviene la risoluzione dei nomi all'interno della propria LAN. Se non si è configurato ne un servizio DNS per la propria LAN ne si sono editati i file /etc/hosts dei vari PC specificando un dominio fittizio, allora è possibile che valga la pena di lasciare semplicemente commentato il parametro Domain; in caso contrario vale assolutamente la pena di indicare correttamente il dominio (anche solo fittizio) della LAN, per esempio small.lan (evidentemente fittizio):

[General]

Verbosity = 0
Pipefs-Directory = /var/lib/nfs/rpc_pipefs
# set your own domain here, if id differs from FQDN minus hostname
Domain = small.lan

[Mapping]

Nobody-User = nobody
Nobody-Group = nogroup

Una volta salvate le modifiche riavviare nfs-common:

# service nfs-common restart
Info.png Nota
In generale ricordare che nel caso del server è necessario riavviare anche nfs-kernel-server dopo aver riavviato nfs-common


exports

A questo punto è possibile definire le condivisioni editando il file /etc/exports, ogni riga del quale descrive una directory. Ad esempio inserendo le seguenti righe:

/home       192.168.1.0/24(rw,fsid=0,no_subtree_check,crossmnt,sync)
/home/altro 192.168.1.0/24(rw,no_subtree_check,sync)

Si condivide la cartella /home e la sua sottocartella /home/altro. La dicitura 192.168.1.0/24 serve a restringere l'accesso alla risorsa /home alle sole richieste provenienti dagli indirizzi IP che vanno da 192.168.1.1 a 192.168.1.254. Una richiesta che per esempio dovesse provenire da 192.168.2.15 sarebbe rifiutata. Tra ( ) si indicano le opzioni:

Warning.png ATTENZIONE
Se si usa la versione 4 di NFS (quella di default) tutte le risorse da esportare devono essere contenute dentro una medesima directory cui dovrà essere attribuito fsid=0, in caso contrario è necessario rimontarle tutte prima in un'altra cartella e poi esportare questa, si veda più avanti.


Per rendere operative le modifiche ai file di configurazione eseguire:

# service nfs-kernel-server restart

In caso di ulteriori problemi a visualizzare il contenuto delle cartelle provare a riavviare server e client.

RIMONTARE LE DIRECTORY

È possibile rimontare una o più cartelle in una seconda posizione col risultato che il contenuto delle cartelle risulta accessibile da due differenti posizioni (quella originale e quella dove si rimonta). Per far ciò è prima necessario creare il punto di mount, per esempio:

# mkdir -p /export/utente
# mkdir -p /export/altro

Supponendo di voler rimontare le cartelle /home/utente e /altro rispettivamente in /export/utente e /export/altro:

# mount --bind /home/utente /export/utente
# mount --bind /altro       /export/altro

Per evitare di dover ridigitare ad ogni riavvio i precedenti comandi basta aggiungere le seguenti due righe al file /etc/fstab:

/home/utente /export/utente none bind 0 0
/altro       /export/altro none bind 0 0

A questo punto per esportare la cartella /export non rimane che editare il file etc/exports

/export        192.168.1.0/24(rw,fsid=0,no_subtree_check,sync,crossmnt)
/export/utente 192.168.1.0/24(rw,no_subtree_check,sync)
/export/altro  192.168.1.0/24(rw,no_subtree_check,sync)

Da notare l'aggiunta dell'opzione crossmnt, che non deve essere omessa pena l'impossibilità di vedere il contenuto delle sottocartelle di export sulle macchine client. Quest'opzione DEVE ESSERE assegnata solo alla cartella cui viene attribuito fsid=0.
Stando al manuale l'opzione nohide ha un effetto molto simile a quello di crossmnt, con la differenza che quest'opzione NON DEVE ESSERE assegnata alla cartella cui viene attribuito fsid=0, ma solo alle sotto directory (in caso contrario l'export delle risorse fallisce), ovvero restando al soprastante esempio:

/export        192.168.1.0/24(rw,fsid=0,no_subtree_check,sync)
/export/utente 192.168.1.0/24(rw,no_subtree_check,sync,nohide)
/export/altro  192.168.1.0/24(rw,no_subtree_check,sync,nohide)

Sottolineo che per quanto riguarda la mia personale esperienza questo secondo metodo è risultato inadeguato, poiché nel caso di trasferimento di grossi file (>1GB) da client a server ho notato un sistematico crollo della velocità di trasferimento (170 kB/s circa, tipicamente dopo aver superato la soglia di 1,1-2,5 GB trasferiti). Nel trasferimento da server a client le due soluzioni mi risultano invece equivalenti.

Strumenti personali
Namespace
Varianti
Azioni
Navigazione
Risorse
Strumenti