Nfs-kernel-server: configurazione lato server

Da Guide@Debianizzati.Org.
Versione del 28 mar 2012 alle 08:08 di Wtf (discussione | contributi) (Creata pagina con '{{NFS}} = Installazione = Installare i pacchetti necessari: == Lenny == <pre># apt-get install nfs-kernel-server portmap</pre> == Squeeze e successive == <pre># apt-get insta...')
(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)
Vai alla navigazione Vai alla ricerca
NFS

Sommario

Spazio Kernel
  1. Lato server
  2. Lato client


Installazione

Installare i pacchetti necessari:

Lenny

# apt-get install nfs-kernel-server portmap

Squeeze e successive

# apt-get install nfs-kernel-server

Configurazione

Lenny

Info.png Convenzione
IP della macchina server: 192.168.1.10; directory da condividere: /media/storage


Ora editare col vostro editor preferito (gedit, kate, vim, ...) il file /etc/exports ed aggiungere la seguente riga:

/media/storage      192.168.1.0/24(rw,sync,no_subtree_check)

Nota:

  • 192.168.1.0/24 indica l'abilitazione a tutte le macchine della rete 192.168.1
    • se si vuole abilitare una o determinate macchine basta specificarne l'IP
  • rw indica che tutti hanno i permessi di lettura e scrittura
    • se si vogliono dare solo i permessi di lettura, sostituire rw con ro
  • /media/storage è la directory del nostro filesystem che vogliamo condividere

Completare dando ai vari client i permessi per l'accesso alla macchina server: editare il file /etc/hosts.allow ed inserire

portmap: 192.168.1

Come si capisce, in questo modo si da il permesso di accedere a tutta la LAN; se si vogliono delle restrizioni agire di conseguenza inserendo l'indirizzo specifico del/i client.

Ora lanciamo il demone e rendiamo disponibile la directory condivisa:

# /etc/init.d/nfs-kernel-server start 
# exportfs -a

Squeeze e successive

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

NEED_IDMAPD=yes
NEED_GSSD=no

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

NEED_SVCGSSD=no

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

  • rw: abilità la cartella in lettura e scrittura, ammesso comunque che l'utente abbia il permesso di scrivere su quella cartella; indicando ro si limita la possibilità di scrivere anche per quegli utenti che se non accedessero da remoto avrebbero di norma il permesso di scrivere.
  • fsid=0: identifica la cartella come radice per il filesystem da esportare. Una sola cartella può avere valore di fsid pari a 0.
  • no_subtree_check: velocizza l'accesso alle risorse a scapito di un minimo aumento del rischio sicurezza.
  • sync: impone sincronia tra client e server. L'alternativa è async, ma è meglio evitarla poiché in caso di crash o eventi imprevisti aumenta la probabilità di causare danni al filesystem.
  • crossmnt: questa opzione serve in teoria solo se si sono rimontate delle directory (si veda la successiva sottosezione dedicata al rimontaggio delle cartelle), tuttavia è possibile che omettendola si noti un crollo della velocità di trasferimento (per esempio fino a 150-200 kB/s) nel trasferire grossi file da un client al server.


Warning.png ATTENZIONE
Dalla versione 4 di NFS 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 al file /etc/exports eseguire:

# /etc/init.d/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.