J'ai trois machines en production -
machineA 10.66.136.129
machineB 10.66.138.181
machineC 10.66.138.183
et toutes ces machines ont Ubuntu 12.04 installé et j'ai un accès root à ces trois machines.
Maintenant, je suis censé faire des choses ci-dessous dans mes machines ci-dessus -
Create mount point /opt/exhibitor/conf
Mount the directory in all servers.
Sudo mount <NFS-SERVER>:/opt/exhibitor/conf /opt/exhibitor/conf/
J'ai déjà créé /opt/exhibitor/conf
répertoire dans ces trois machines comme mentionné ci-dessus.
Maintenant, j'essaie de créer un point de montage. J'ai donc suivi le processus ci-dessous -
Installer les fichiers de support NFS et le serveur du noyau NFS sur les trois machines ci-dessus
$ Sudo apt-get install nfs-common nfs-kernel-server
Créez le répertoire partagé dans les trois machines ci-dessus
$ mkdir /opt/exhibitor/conf/
Modifié le /etc/exports
et a ajouté l'entrée comme celle-ci dans les trois machines ci-dessus -
# /etc/exports: the access control list for filesystems which may be exported
# to NFS clients. See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes gss/krb5i(rw,sync,no_subtree_check)
#
/opt/exhibitor/conf/ 10.66.136.129(rw)
/opt/exhibitor/conf/ 10.66.138.181(rw)
/opt/exhibitor/conf/ 10.66.138.183(rw)
J'ai essayé de monter sur machineA comme ci-dessous à partir de machineB et machineC et cela me donne cette erreur-
root@machineB:/# Sudo mount -t nfs 10.66.136.129:/opt/exhibitor/conf /opt/exhibitor/conf/
mount.nfs: access denied by server while mounting 10.66.136.129:/opt/exhibitor/conf
root@machineC:/# Sudo mount -t nfs 10.66.136.129:/opt/exhibitor/conf /opt/exhibitor/conf/
mount.nfs: access denied by server while mounting 10.66.136.129:/opt/exhibitor/conf
Est-ce que mon /etc/exports
le fichier a l'air bien? Je suis presque sûr, j'ai foiré mon fichier exports
. Comme j'ai le même contenu dans les trois machines dans le fichier d'exportation.
Une idée du mal que je fais ici? Et quelle sera la bonne /exports
déposer ici?
Lorsque vous créez un /etc/exports
fichier sur un serveur, vous devez vous assurer que vous l'exportez. En règle générale, vous souhaiterez exécuter cette commande:
$ exportfs -a
Cela exportera toutes les entrées du fichier d'exportation.
L'autre chose que je fais souvent, c'est à partir d'autres machines que je vérifierai toute machine qui exporte des partages NFS vers le réseau à l'aide de la commande showmount
.
$ showmount -e <NFS server name>
Disons par exemple que je suis connecté à scully.
$ showmount -e mulder
Export list for mulder:
/export/raid1/isos 192.168.1.0/24
/export/raid1/proj 192.168.1.0/24
/export/raid1/data 192.168.1.0/24
/export/raid1/home 192.168.1.0/24
/export/raid1/packages 192.168.1.0/24
Pour les monter au démarrage, vous devez ajouter cette ligne à vos machines clientes qui souhaitent utiliser les montages NFS.
server:/shared/dir /opt/mounted/dir nfs rsize=8192,wsize=8192,timeo=14,intr
Si vous comptez redémarrer ces serveurs, je vous suggère fortement de rechercher la configuration du montage automatique (autofs
) au lieu d'ajouter ces entrées à /etc/fstab
. C'est un peu plus de travail mais ça vaut bien l'effort.
Cela vous permettra de redémarrer les serveurs plus indépendamment les uns des autres et ne créera également le montage NFS que lorsqu'il est réellement nécessaire et/ou utilisé. Quand il devient inactif, il sera démonté.
J'ai vu la même erreur (mount.nfs: access denied by server while mounting...
) et le problème a été résolu par -o v3
option comme suit:
$ Sudo mount -o v3 a-nfs-server:/path/to/export /path/to/mount
Dans mon cas, fonctionne en utilisant nfs4 en faisant:
$ Sudo mount -t nfs4 nom-serveur:// chemin/vers/montage
Dans le /etc/export
fichier sur le serveur
/Path/to/export 192.168.1.0/24(rw,sync,fsid=0,no_root_squash,crossmnt,no_subtree_check,no_acl)
fsid=0
fait le /Path/to/export
le répertoire racine lorsque vous montez le partage.
crossmnt
, car j'ai d'autres lecteurs dans le système de fichiers exportés auxquels je veux également accéder.
no_root_squash
, car je veux accéder en tant qu'utilisateur root (su) du côté client. Je suis à peu près sûr que je suis le seul à pouvoir le faire dans mon réseau local.
Le serveur et les clients sont Ubuntu 14.04 64bit.
Si vous souhaitez utiliser nfs3, la réponse de @ fumisky-wells fonctionne également pour moi.
J'obtenais le même message d'erreur et mon problème s'est avéré être dû au fait que la machine cliente avait deux interfaces réseau connectées au même LAN. Le serveur avait été configuré pour attendre une adresse IP spécifique et le trafic sortait sur la deuxième interface qui a une adresse IP DHCP. J'ai donc simplement configuré la deuxième interface pour avoir une adresse IP statique et j'ai également ajouté la deuxième adresse IP statique à la configuration du serveur.
/etc/exports
doit être modifié sur la machine NFS serveur, pas sur les clients, comme vous le dites, car elle est vérifiée par le serveur NFS lorsqu'un client demande l'accès à un partage.
Si vous mettez ce qui suit dans /etc/exports
sur le serveur NFS, cela devrait fonctionner:
/opt/exhibitor/conf 10.66.136.129(rw)
/opt/exhibitor/conf 10.66.138.181(rw)
/opt/exhibitor/conf 10.66.138.183(rw)
Après avoir lutté avec ce même message d'erreur pendant des heures, mon problème s'est avéré être rien de plus compliqué que de bonnes autorisations de fichiers Linux à l'ancienne sur l'hôte NFS.
Le dossier que j'essayais de partager (/home/foo/app/share
) avait les autorisations appropriées, mais parce que le répertoire personnel de l'utilisateur (/home/foo
) eu 0750
mode dessus, NFS n'a pas pu traverser pour accéder au répertoire partagé.
Dès que j'ai mis le répertoire personnel de l'utilisateur en mode 0751
, le service NFS a pu y accéder et j'ai pu monter le partage depuis ma machine cliente.
Pour moi, le problème était que j'utilisais l'adresse IP du serveur dans /etc/exports/
au lieu de client un.
Le truc, c'est que vous devez mettre toutes les ips auxquelles vous accordez l'accès sur le serveur /etc/exports/
Si nfs-client essaie de monter le partage exporté à l'intérieur du conteneur Linux, le conteneur doit s'exécuter en mode privilégié.
En cas de docker;
$ docker run -it --rm --privileged ubuntu:14.04
La même chose pourrait se produire si vous essayez de monter un partage NFS sur une instance de Virtual Box avec une carte réseau configurée comme NAT
.
Choisir Bridged Adapter
dans les paramètres réseau de la machine virtuelle résout ce problème.
La seule solution qui a fonctionné pour moi était d'exporter des systèmes de fichiers commençant par /srv
. Il semble que ce soit une limitation (ou une option par défaut, au moins) de NFSv4.
Puisque j'essayais d'exporter une clé USB qui se monte automatiquement sur /media
, J'avais besoin d'un moyen pour obtenir ce "monté" sous /srv
. Pour y parvenir:
Sudo mkdir /srv/videos
Sudo mount --bind /media/jim/wdportable/videos /srv/videos
Et en /etc/exports
:
/srv/videos 192.168.0.200(ro)
Quand j'ai exporté /media/jim/wdportable/videos
directement, la tentative de montage sur le client entraînait toujours mount.nfs: access denied by server
.
Le -o v3
la solution a fonctionné, mais je ne voulais pas forcer la v3.
Il convient de noter qu'une page liée qui m'a conduit ici avait ma bonne réponse, à savoir que vous ne pouvez PAS utiliser * le caractère générique dans l'adresse IP lors de l'exportation. Il est soit * (toutes les IP), soit utilisé comme caractère générique dans les noms de domaine IE: * .domain.com.
Par exemple: c'est correct
/Path/to/export 192.168.1.0/24(flags)
Cela ne fonctionnera pas (ou est incorrect du moins), mais a fonctionné pour moi pendant des années jusqu'à ce que j'essaie de monter l'exportation depuis une machine virtuelle Fedora.
/Path/to/export 192.168.1.*(flags)
Évidemment, cette erreur peut être déclenchée par de nombreuses causes. Dans mon cas, la solution a consisté à ajouter l'option insecure
dans /etc/exports
sur le serveur:
/path/to/be/exported authorized_client(rw,root_squash,sync,no_subtree_check,insecure)
Cela est dû au fait que certains clients NFS ne respectent pas la règle établie selon laquelle les demandes de montage ne doivent pas provenir de ports TCP (numéro de port supérieur à la plage 0-1023)).
La raison de la règle est que les ports bas TCP ne peuvent être utilisés que par des utilisateurs privilégiés (c'est-à-dire root) sur les systèmes UNIX. Et l'importation de partages NFS sur un système en est un exemple.
Cette erreur peut également être provoquée en essayant de monter un chemin chiffré. (Par exemple dans votre répertoire personnel, si vous avez choisi de le crypter)
Pour moi, le problème était que mon routeur a changé l'adresse IP utilisée du client, de sorte que l'entrée dans /etc/exports
sur la machine serveur n'autorisait l'accès qu'à une adresse IP qui n'était plus utilisée.
Je sais que c'est un vieux fil, mais mon problème était lié à LXC et AppArmor.
Tuer AppArmor, ou ajouter un profil d'exception, l'a corrigé.