====== - Partage réseau sous Linux : NFS ======

{{ informatique:linux:cfp:nfs-network-file-system:pasted:20210131-231703.png?75x75|Network File System est le système de fichiers pour réseau Linux.}}

NFS est un système de partage de fichiers, respectant les protocoles d'accès aux fichiers Linux.

Il est nécessaire d'avoir deux ordinateurs, au moins, pour mettre en œuvre un partage NFS. Par exemple :
  * Serveur NFS : rpinas001.acegrp.lan - 192.168.100.1
  * Client NFS : dskcdc001.acegrp.lan - 192.168.100.155

Il est possible d'avoir plusieurs **Serveur NFS** et plusieurs **Clients**.

Il est nécessaire d'autoriser le dialogue réseau entre le **Serveur** et le **Client**. L'utilisation de la commande **ping** pour confirmer la communication entre les deux systèmes.

===== Table des matières =====

  * [[index|Sommaire]]
  * Créer un partage NFS sous Linux
    * Installer NFS
      * [[..:nfs-network-file-system:installer-nfs-fedora-28]]
      * [[..:nfs-network-file-system:installer-nfs-raspbian-os-10]]
    * [[..:nfs-network-file-system:verifier-la-version-nfs-installee]]
    * [[..:nfs-network-file-system:creer-et-exporter-un-partage]]
    * [[..:nfs-network-file-system:modifier-la-parefeu]]
  * Monter un partage NFS sous Linux
    * [[..:nfs-network-file-system:installer-pilotes-nfs]]
    * [[..:nfs-network-file-system:decouvrir-les-exports]]
    * [[..:nfs-network-file-system:monter-un-partage-nfs]]
    * [[..:nfs-network-file-system:monter-un-partage-nfs-permanent]]


===== - Éditer la configuration =====

Modifier le fichier ''/etc/idmapd.conf ''  en admin pour intégrer le domaine dans la configuration :

Décommenter la ligne et indiquer le nom du domaine :

<code>
Domain = acegrp.lan

</code>

Vérifier la configuration du mapping :

<code>
Nobody-User = nobody
Nobody-Group = nogroup

</code>

==== - Indiquer les dossiers à partager ====

L'idée est de centraliser les dossiers à partager dans le dossier ''/export''. Pour exemple, on partage dans ce dossier ''export'', le dossier ''/mnt''.

---

Créer le dossier ''/export/media''  :

<code bash>
$ sudo mkdir -p /export/media

</code>

---

Créer un point de montage de ''/mnt''  vers ''/export/media''. Ajouter une entrée dans le fichier ''/etc/fstab''  :

<code>
/mnt    /export/media   none    bind  0  0
</code>

---

Monter le dossier ''/export/media'' :

<code bash>
$ sudo  mount /export/media

</code>

---

Modifier le fichier **/etc/exports**  :

<code>
/export       192.168.1.0/24(rw,fsid=0,insecure,no_subtree_check,async)
/export/media 192.168.1.0/24(rw,nohide,insecure,no_subtree_check,async)

</code>

---

Mettre à jour les exports :

<code bash>
$ sudo exportfs -ra

</code>

==== - Gérer les services ====

> Fedora 28  Sous **Fedora 28**, deux services doivent être activé et démarrés : **RPCbind**  et **nfs**  :

<code bash>
$ sudo systemctl start rpcbind nfs-server

</code>

<code bash>
$ sudo systemctl enable rpcbind nfs-server

</code>

> Raspbian 10

Sous **Raspbian 10**, il faut activer le service **nfs-kernel-server**  :

<code bash>
$ sudo systemctl enable nfs-kernel-server

</code>

Puis démarrer le service **nfs-kernel-server**  :

<code bash>
$ sudo systemctl start nfs-kernel-server

</code>

===== - Ajouter une exception dans Firewalld =====

On rajoute 4 exceptions exactement :

  * 2049 en udp et tcp
  * 111 en udp et tcp

<code bash>
sudo firewall-cmd --add-port=2049/udp
sudo firewall-cmd --add-port=2049/tcp
sudo firewall-cmd --add-port=111/udp
sudo firewall-cmd --add-port=111/tcp

</code>

ou encore plus rapidement

<code bash>
sudo firewall-cmd --add-service=nfs --permanent
sudo firewall-cmd --reload

</code>




====== - FAQ ======

===== - Connaître les services RPC d'un host =====

<code bash>
rpcinfo -p 192.168.100.5

</code>

Résultat

<code>
   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  40258  status
    100024    1   tcp  41279  status
    100005    1   udp  20048  mountd
    100005    1   tcp  20048  mountd
    100005    2   udp  20048  mountd
    100005    2   tcp  20048  mountd
    100005    3   udp  20048  mountd
    100005    3   tcp  20048  mountd
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    3   tcp   2049  nfs_acl
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100227    3   udp   2049  nfs_acl
    100021    1   udp  60788  nlockmgr
    100021    3   udp  60788  nlockmgr
    100021    4   udp  60788  nlockmgr
    100021    1   tcp  35701  nlockmgr
    100021    3   tcp  35701  nlockmgr
    100021    4   tcp  35701  nlockmgr

</code>



===== - clnt_create: RPC: Unable to receive =====

Le message ''clnt_create: RPC: Unable to receive''  apparaît après l'utilisation de la commande ''showmount''. Que faire ?

<code>
# showmount -e 192.168.100.6

clnt_create: RPC: Unable to receive

</code>

1. Vérifier la connectivité au serveur avec la commande ''ping''

<code>
# ping 192.168.100.6

PING 192.168.100.6 (192.168.100.6) 56(84) bytes of data.
64 bytes from 192.168.100.6: icmp_seq=1 ttl=64 time=0.224 ms
64 bytes from 192.168.100.6: icmp_seq=2 ttl=64 time=0.209 ms
^C
--- 192.168.100.6 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1009ms
rtt min/avg/max/mdev = 0.209/0.216/0.224/0.016 ms

</code>

Si la commande ''ping''  ne répond pas, vérifier par une connexion ''ssh''

<code>
# ssh cedric@192.168.100.6

cedric@192.168.100.6's password:
Last login: Sat May  5 07:03:20 2018 from 192.168.100.29
[cedric@srv06 ~]$

</code>

2. Lister les informations RPC avec la commande ''rpcinfo''

<code>
# rpcinfo -p 192.168.100.6

192.168.100.6: RPC: Remote system error - Connection refused

</code>

