Autore Topic: NFS - Rete locale con Linux  (Letto 2723 volte)

Offline whoami

  • *
  • Post: 1562
  • Reputazione: 64
  • Quando c'era init i log arrivavano in orario!
    • Mostra profilo
NFS - Rete locale con Linux
« il: 22 Novembre 2012 ore 02:23 »
Scopo: Creare una rete locale con Linux, per condividere file e cartelle tra due o più computer
Come: Installando e configurando il tool "NFS"
Prerequisiti: Connessione a internet, spazio su disco, nfs-utils>=1.3.0
Vantaggi: Facile condivisione dei file
Tempo necessario: 20-30 minuti

No, non Need For Speed!

Introduzione
Si può anche evitare di leggerla perchè sono per la maggior parte sproloqui

Avendo due computer, la legge di murphy prevede che inesorabilemente seduti davanti ad uno ci servirà il file salvato sull'altro. Quindi ci riempiremo di chiavette di ogni forma e dimensione da usare come traghetto dei dati da un pc all'altro che, senza considerare la spesa dell'hardware, avranno come denominatore comune la capacità di perdersi, rompersi, o giocare ad un gioco delle tre carte digitale per cui se non ti ricordi dove hai salvato un file questo si sposterà nell'ultima chiavetta che provi tramite onde elettromagnetiche indotte.

A questi inconvenienti che rendono impossibile la vita nel 2012 2013 si può ovviare in molti modi, dai più inefficaci - tipo dire tantissime parolacce - a quelli più comodi e semplici - primo fra tutti far dialogare direttamente i due pc in una rete locale.

NFS è appunto un modo per condividere file tra diversi computer semplicemente montando su un pc una cartella che risiede fisicamente su un altro pc, come si monterebbe un qualsiasi dispositivo all'albero delle cartelle di linux.


Come funziona

NFS si basa su un'architettura client-server1, per cui ci sarà un computer, il server appunto, che esporta alcune cartelle dal suo hard disk alla rete, e uno o più client che montano queste cartele nel loro albero.
Sul server si dovrà creare un albero delle esportazioni in locale, in cui monteremo tutte le cartelle che vogliamo esportare, e il client riconoscerà questo albero dalle cui cartelle potremo attingere montandole come se fossero dei dispositivi veri e propri.

¹ al contrario di Samba per cui ogni pc è uguale agli altri potendo condividere cartelle proprie e leggere quelle altrui


La pratica

Partiamo dal presupposto che vogliamo condividere una sola cartella, la home dell'utente del server, con il client.
Io consiglio di creare le configurazioni di rete dei due pc con ip statico, che rende più immediato il riconoscimento delle macchine sulla rete.

Su ognuno dei pc per prima cosa ci conviene loggarci come root

Server+Client
Codice: [Seleziona]
su
Su ogni computer va installato il pacchetto nfs-utils

Server+Client
Codice: [Seleziona]
sudo pacman -S nfs-utils
Diamo un nome alla nostra rete, passaggio opzionale perchè di default viene scelto lo stesso nome per client e server quindi funziona anche senza questo passaggio

Server+Client
Codice: [Seleziona]
nano /etc/idmapd.confe alla quinta riga inseriremo dopo Domain = il nome della nostra rete, sostituendo quello di default1


Poi ci dedichiamo al server, e creiamo la cartella che sarà la radice dell'albero delle esportazioni

Server
Codice: [Seleziona]
mkdir /srv/nfs4
Creiamo inoltre la sottocartella in cui monteremo la home

Server
Codice: [Seleziona]
mkdir /srv/nfs4/home
e ci montiamo la nostra home usando mount con l'opzione bind, che crea un equivalente di un hard link tra le due cartelle

Server
Codice: [Seleziona]
mount --bind /home/utente /srv/nfs4/homee se ora andiamo a controllare in /srv/nfs4/home ci saranno gli stessi file della vostra home
Codice: [Seleziona]
ls ~ && ls /srv/nfs4/home
ora apriamo il file /etc/exports, e andiamo ad indicare quali cartelle condividere e in che modo

Server
Codice: [Seleziona]
nano /etc/exportscreando al fondo del file due righe fatte così1
/srv/nfs4/ 192.168.1.10(rw,fsid=0,no_subtree_check,async,no_root_squash)
/srv/nfs4/home 192.168.1.10(rw,no_subtree_check,async,no_root_squash)

in cui andando per ordine ci sono:
  • La cartella da condividere nel nostro caso la radice /srv/nfs4 e la cartella che effettivamente ci interessa /srv/nfs4/home
  • Gli indirizzi ip autorizzati, che nel mio esempio è solo uno ma che può anche essere un intervallo di indirizzi, ad esempio quelli da 1 a 50 con 192.168.1.1/50
  • Le opzioni di condivisione di cui migliore documentazione si trova qui, l'unica cosa fondamentale è che alla riga della radice /srv/nfs4 venga messa l'opzione fsid=0
A questo punto le configurazioni sono abbastanza a posto, non rimane che avviare i servizi

Server
Codice: [Seleziona]
systemctl start nfs-server.service rpcbind.serviceClient
Codice: [Seleziona]
sudo systemctl start rpcbind.service nfs-client.target
Poi controllo da client se le cartelle sono esportate nel modo giusto

Client
Codice: [Seleziona]
showmount -e 192.168.1.3dove 192.168.1.3 è l'indirizzo ip del server
e dovrebbe uscire fuori una schermata così:
Export list for 192.168.1.3:
/srv/nfs4/home 192.168.1.10
/srv/nfs4      192.168.1.10


ora non ci rimane che creare la cartella dove troveremo i nostri file montati

Client
Codice: [Seleziona]
mkdir /media/home_server
e montarli

 Client
Codice: [Seleziona]
mount -t nfs4 192.168.1.3:/home /media/home_server
e con
Codice: [Seleziona]
ls /media/home_servervedremo che ci troviamo tutto il contenuto della home dell'utente del server come se fosse nell'hard disk del client.

Finiamo tutto con un bel

Server+Client
Codice: [Seleziona]
su nomeutente per perdere i privilegi di root e ritornare coi piedi per terra.


1 con nano, dopo aver modificato il file, bisogna dare control+O per salvare e control+X per chiudere


Guida aggiornata a Ottobre 2014, con il passaggio a nfs-utils 1.3.0
« Ultima modifica: 01 Ottobre 2014 ore 23:14 da whoami »
echo "VQF AHELME I BI CI WECPF"| tr "ETAOINSHRDLUBCFGJMQPVWZYXK" "A-Z"

Offline whoami

  • *
  • Post: 1562
  • Reputazione: 64
  • Quando c'era init i log arrivavano in orario!
    • Mostra profilo
Re:NFS - Rete locale con Linux
« Risposta #1 il: 22 Novembre 2012 ore 03:32 »
Rendere pemanente la condivisione

Fermi al punto del post precedente siamo ora in grado di guardare i film memorizzati nell'hard disk del server dal nostro client (figata!). Appena però spegnamo uno dei due pc il gioco si rompe ed è tutto da rifare.
Per fissare questa condivisione in modo di averla attiva all'avvio dovremo sicuramente abilitare i servizi di systemd all'avvio e scrivere in /etc/fstab i montaggi di cui abbiamo bisogno.

Server
scrivere in /etc/fstab, magari sempre usando nano, una riga fatta così
/home/nomeutente /srv/nfs4/home none bind 0 0
che equivale al mount --bind /home/utente /srv/nfs4/home che avevamo dato prima.
Poi rendiamo attivi all'avvio i servizi che avevamo solo fatto partire prima
Codice: [Seleziona]

sudo systemctl enable rpcbind
sudo systemctl enable nfs-server

Client
rendiamo permanente il montaggio della cartella condivisa (l'equivalente del mount -t nfs4 192.168.1.3:/home /media/home_server di prima)
sempre in /etc/fstab scriviamo
192.168.1.3:/home   /media/home_server   nfs4   rsize=8192,wsize=8192,timeo=14,intr,rw,user,noauto   0 0
queste opzioni sono commentate molto bene sul wiki di arch.
Ultima cosa, rendere attivo all'avvio il servizio che ci serve
Codice: [Seleziona]
sudo systemctl enable rpcbind
sudo systemctl enable nfs-client.target

Tips and Taps

Uso dei nomi degli host invece degli indirizzi ip
Scrivendo questa guida ho capito anche l'uso del file /etc/hosts, naturalmente troppo tardi visto che ormai avevo scritto tutto usando gli indirizzi ip e non i nomi, che sono nettamente più comodi da scrivere e ricordare.

Server+Client
Quindi mi è bastato editare i file /etc/hosts
Codice: [Seleziona]
sudo nano /etc/hostsed aggiungere:
per il Server: 192.168.1.10 portatile
per il Client: 192.168.1.3 fisso
associando in pratica il nome umano della macchina al suo ip, e su ogni pc naturalmente quello dell'altro.
E dopo tutto sono andato a cambiare, in tutti i file di conf citati prima, gli indirizzi ip con i nomi

Condivisione cache di pacman
Con questo metodo possiamo condividere qualsiasi cartella, creandoci delle comodità niente male.
Ad esempio, alla fine di questa guida, descrivo la mia configurazione che mi permette di avere la cache di pacman condivisa dai due sistemi, rendendo più snello il reperimento dei pacchetti per il client.

Server
ho montato nella cartella /srv/nfs4 la home e la cache di pacman, modificando /etc/fstab
Codice: [Seleziona]
/home/gt /srv/nfs4/home none bind 0 0
/var/cache/pacman/pkg /srv/nfs4/pacman_cache none bind 0 0
naturalmente dopo aver creato le cartelle apposite

poi ho condiviso le cartelle così create, da file /etc/exports:
Codice: [Seleziona]
/srv/nfs4/ portatile(rw,fsid=0,no_subtree_check,async,no_root_squash)
/srv/nfs4/home portatile(rw,no_subtree_check,async,no_root_squash)
/srv/nfs4/pacman_cache portatile(rw,no_subtree_check,async,no_root_squash)
(per ogni cambiamento di questo file bisogna poi riavviare il servizio nfsd con
Codice: [Seleziona]
sudo systemd restart nfsd)

Client
ho montato le cartelle condivise da /etc/fstab
Codice: [Seleziona]
fisso:/home/ /media/fisso nfs4 rsize=8192,wsize=8192,timeo=14,intr,noauto,user 0 0
fisso:/pacman_cache/ /media/pacman_cache nfs4 rsize=8192,wsize=8192,timeo=14,intr,noauto,user 0 0

ho modificato il file /etc/pacman.conf per indicargli la posizione della nuova cache, quindi alla riga che inizia con #CacheDir ho tolto il cancelletto iniziale e dopo l'uguale ho messo /media/pacman_cache

I vantaggi di questa soluzione sono che, essendo il fisso acceso sempre, e aggiornato ogni giorno, ha più probabilità di avere nella cache pacchetti che comunque installerei anche sul portatile, o nel caso di uno di quei mega-aggiornamenti da 500MB da scaricare da internet il portatile potrebbe prenderli direttamente dalla rete locale risparmiando tantissimo tempo e banda.
Gli svantaggi potrebbero essere che l'installazione dei pacchetti sul portatile potrebbe avvenire solo con i due computer connessi, perchè nel caso in cui i due non siano in rete la cartella /media/pacman_cache sarebbe vuota, pacman ci metterebbe sopra i suoi pacchetti in cache e al momento di ristabilire la connessione il montaggio di fisso:/pacman_cache non potrebbe avvenire.

Boh, io lo proverò per un po', ma è per dare un assaggio della flessibilità dello strumento.

Naturalmente si accettano consigli, azioni, integrazioni, disintegrazioni per migliorare questa guida!!!!!!   
« Ultima modifica: 01 Ottobre 2014 ore 23:15 da whoami »
echo "VQF AHELME I BI CI WECPF"| tr "ETAOINSHRDLUBCFGJMQPVWZYXK" "A-Z"

Offline AlmAck

  • *
  • Post: 360
  • Reputazione: 42
    • Mostra profilo
    • AlmAck.ch
Re:NFS - Rete locale con Linux
« Risposta #2 il: 22 Novembre 2012 ore 21:24 »
Io uso NFS da tanti anni e mi trovo molto bene, la velocità di trasferimento dei file è la più veloce che ho trovato rispetto ad altri protocolli come samba/CIFS. Cmq. io non uso fstab per i mount point, questo perchè ho diverse cartelle sul server che monto solo quando ho bisogno.
Cosa bisogna fare per avere le cartelle del server caricate su richiesta? semplice installare autofs

Codice: [Seleziona]
sudo pacman -S autofs
poi creare una cartella di mount (nel mio caso uso /mnt)
Nel file /etc/autofs/auto.master aggiungere questa riga (commentare tutte le altre con #)
Codice: [Seleziona]
/mnt -hosts --timeout=60
poi attivare il servizio
Codice: [Seleziona]
sudo systemctl enable autofs
sudo systemctl start autofs

per usare autofs occorre avere anche rpcbind installato e abilitato in systemd.
Codice: [Seleziona]
sudo pacman -S rpcbind
sudo systemctl enable rpcbind
sudo systemctl start rpcbind

Offline whoami

  • *
  • Post: 1562
  • Reputazione: 64
  • Quando c'era init i log arrivavano in orario!
    • Mostra profilo
Re:NFS - Rete locale con Linux
« Risposta #3 il: 22 Novembre 2012 ore 21:32 »
e poi? come li monti? io ho messo l'opzione noauto in fstab e anch'io li monto solo su richiesta, vedo le cartelle come dispositivi in dolphin e cliccandoci sopra le monto. quale è la differenza? ti chiedo perchè io invece uso nfs da 2 giorni...
echo "VQF AHELME I BI CI WECPF"| tr "ETAOINSHRDLUBCFGJMQPVWZYXK" "A-Z"

Offline AlmAck

  • *
  • Post: 360
  • Reputazione: 42
    • Mostra profilo
    • AlmAck.ch
Re:NFS - Rete locale con Linux
« Risposta #4 il: 22 Novembre 2012 ore 22:04 »
non li monto, lo fa lui.
Quello che può montare lo vedi con "showmount -e 192.168.1.3", faccio un'esempio.
Se tutto è configurato correttamente, basta che accedi alla cartella /mnt/nomeserver/home e automaticamente ti monta tutto. La cosa interessante di autofs è che non devi scrivere alcuna linea aggiuntiva in fstab. Questo va bene solo se devi accedere saltuariamente al server, se vuoi montare la /home allora il tuo metodo è perfetto.

Nota: accedendo allo stesso server con più utenti mi sono accorto che i file/cartelle create con un utente non possono essere modificate degli altri utenti, al momento non so come risolvere, modifico i permessi sul server.

Offline whoami

  • *
  • Post: 1562
  • Reputazione: 64
  • Quando c'era init i log arrivavano in orario!
    • Mostra profilo
Re:NFS - Rete locale con Linux
« Risposta #5 il: 02 Dicembre 2012 ore 22:51 »
Mi è capitato che dopo l'ultimo maxi aggiornamento a kde 4.9.3, nvidia 310 e kernel 3.6.6 ecc automount non funzionasse più.

C'è stato uno scambio di MP tra me e AlmAck (idolo!) che riporto qui per continuare la discussione in pubblico.

Io mi trovo con:

rpcbind
Codice: [Seleziona]
[whoami@portatile ~]$ sudo systemctl status rpcbind
rpcbind.service - RPC Bind                                                                                                                                             
          Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; enabled)                                                                                           
          Active: active (running) since Sun, 2012-12-02 13:22:12 CET; 7min ago                                                                                       
         Process: 290 ExecStart=/usr/bin/rpcbind (code=exited, status=0/SUCCESS)                                                                                       
        Main PID: 293 (rpcbind)                                                                                                                                       
          CGroup: name=systemd:/system/rpcbind.service                                                                                                                 
                  └ 293 /usr/bin/rpcbind                                                                                                                               
                                                                                                                                                                       
Dec 02 13:22:12 portatile systemd[1]: Started RPC Bind.

autofs
Codice: [Seleziona]
[whoami@portatile ~]$ sudo systemctl status autofs
autofs.service - Automounts filesystems on demand
          Loaded: loaded (/usr/lib/systemd/system/autofs.service; enabled)
          Active: active (running) since Sun, 2012-12-02 13:22:14 CET; 27min ago
         Process: 326 ExecStart=/usr/sbin/automount $OPTIONS --pid-file /run/autofs.pid (code=exited, status=0/SUCCESS)
        Main PID: 335 (automount)
          CGroup: name=systemd:/system/autofs.service
                  └ 335 /usr/sbin/automount --pid-file /run/autofs.pid

Dec 02 13:22:14 portatile automount[335]: syntax error in nsswitch config near [ syntax error ]
Dec 02 13:22:14 portatile systemd[1]: Started Automounts filesystems on demand.

e l'errore mi ha portato a controllare il file /etc/nsswitch.conf

Codice: [Seleziona]
[whoami@portatile ~]$ cat /etc/nsswitch.conf
# Begin /etc/nsswitch.conf

passwd: files
group: files
shadow: files

publickey: files

hosts: files dns
networks: files

protocols: files
services: files
ethers: files
rpc: files

netgroup: files

# End /etc/nsswitch.conf

e confrontandolo con quello di AlmAck abbiamo visto che nel mio rispetto al suo manca una riga:

/etc/nsswitch.conf di AlmAck

Codice: [Seleziona]
# Begin /etc/nsswitch.conf

passwd: files
group: files
shadow: files

publickey: files

hosts: files dns
networks: files

protocols: files
services: files
ethers: files
rpc: files

netgroup: files

automount: files

# End /etc/nsswitch.conf

cioè l'ultima automount: files

Comunque ho provato ad aggiungerla ma il risultato non cambia:

Codice: [Seleziona]
[whoami@portatile ~]$ cd /net/fisso/srv/nfs4/home
bash: cd: /net/fisso/srv/nfs4/home: Dispositivo o risorsa occupata

e lo status di autofs dà sempre lo stesso errore.

« Ultima modifica: 03 Dicembre 2012 ore 17:26 da whoami »
echo "VQF AHELME I BI CI WECPF"| tr "ETAOINSHRDLUBCFGJMQPVWZYXK" "A-Z"

Offline AlmAck

  • *
  • Post: 360
  • Reputazione: 42
    • Mostra profilo
    • AlmAck.ch
Re:NFS - Rete locale con Linux
« Risposta #6 il: 02 Dicembre 2012 ore 23:55 »
prova a controllare il tuo file di configurazione come indicato qui:
https://bbs.archlinux.org/viewtopic.php?pid=573272#p573272

In internet si trova un po' di tutto, ma principalmente sembra un problema del file di configurazione.
Cmq. questo non è un problema di questa guida, magari lo sposterei in un'altro topic...

 

Template by Homey | Sito ufficiale | Disclaimer