Contexte

Les services NFS ne sont pas activées par défaut dans les containers NFS.

Il est nécessaire d’ajouter des options dans la configuration des containers. Mais selon les configurations, le service « apparmor » doit aussi être mis à jour.

En montant un serveur NFS ou un partage NFS, on a ce type d’erreur :


# /etc/init.d/nfs-kernel-server start
mount: nfsd is write-protected, mounting read-only
mount: cannot mount nfsd read-only
Exporting directories for NFS kernel daemon....
Starting NFS kernel daemon: nfsdrpc.nfsd: Unable to access /proc/fs/nfsd errno 2 (No such file or directory).
Please try, as root, 'mount -t nfsd nfsd /proc/fs/nfsd' and then restart rpc.nfsd to correct the problem
 failed!

# mount -t nfsd nfsd /proc/fs/nfsd
mount: nfsd is write-protected, mounting read-only
mount: cannot mount nfsd read-only


Configuration du Container

L’activation du NFS se fait à l’aide des commandes suivantes :


#Activation du support NFS CLIENT
vzctl set $CTID --features nfs:on --save

#Activation du support NFS SERVEUR
vzctl set $CTID --features nfsd:on --save

Dans le fichier de configuration du container ( /etc/pve/lxc/xxx.conf ), on trouvera les paramètres suivants ajoutés.


FEATURES="nfs:on nfsd:on"

Dans le fichier de configuration du container, il faut définir un profil « apparmor » à utiliser.


lxc.aa_profile: lxc-container-default-with-nfs

A priori, l’entrée suivante ne necessitepasdecrééerun profil spécifique pour apparmor. Jen’ai pas testé.


lxc.aa_profile: unconfined


Création du profil

Création du du nouveau profil apparmor.


touch /etc/apparmor.d/lxc/lxc-default-with-nfs

On édite le fichier avec les informations suivantes :


# Do not load this file.  Rather, load /etc/apparmor.d/lxc-containers, which
# will source all profiles under /etc/apparmor.d/lxc

profile lxc-container-default flags=(attach_disconnected,mediate_deleted) {
  #include 

  # the container may never be allowed to mount devpts.  If it does, it
  # will remount the host's devpts.  We could allow it to do it with
  # the newinstance option (but, right now, we don't).
  deny mount fstype=devpts,

mount fstype=nfsd,
mount fstype=rpc_pipefs,
}

Il reste à recharger apparmor avec l’une des commandes suivantes:


apparmor_parser -r /etc/apparmor.d/lxc-containers
/etc/init.d/apparmor reload


Sources

http://openvz.org/NFS_server_inside_container

https://forum.proxmox.com/threads/is-it-possible-to-run-a-nfs-server-within-a-lxc.24403/

http://xavtech.blogspot.fr/2016/02/nfs-server-in-lxc-container-proxmox-41.html


Présentation

De temps à autre, j’ai mon ordinateur qui freeze un peu. Je me doutais qu’il s’agissait d’un problème au niveau du NFS. J’ai fini par comprendre que lorsque je faisais un peu tout et n’importe quoi avec mon serveur ca pouvait parfois coincer avec les partages NFS actifs sur mon PC.


Résolution

Et puis impossible de démonter les partages sur mon PC. Je recevais des messages pas sympas, comme quoi le services NFS étaient busy. Et mon file manager qui ne répondait plus.

Je ne pouvais plus démonter un partage qui n’existait plus. Et lorsque j’ai voulu monter un nouveau partage, mon système m’a déclaré :

mount.nfs: Stale NFS file handle

Ce problème survient si des modifications ont été effectuées sur le serveur hôte et que le client considère toujours des fichiers ou une arborescence comme actifs sur le serveur.

Bob@Linux:/$sudo umount -f /mnt/local

Source : http://www.cyberciti.biz/tips/nfs-stale-file-handle-error-and-solution.html


Présentation

Mon lecteur multimédia a la capacité d’accéder à des partages NFS. J’ai donc voulu donner accès à mon serveur personnel. Il n’y a pas la possibilité de changer sur le lecteur Tvix l’arborescence à laquelle il veut accéder. Et sur mon serveur cela ne m’arrangeait pas de créer une nouvelle arbrecence car mes fichiers se trouvent sur un autre disque.

J’ai décidé de créer le dossier racine pour le partage NFS, mais de le lier au dossier existant sur l’autre disque. Plutôt qu’utiliser des liens symboliques (ou physiques), j’ai préféré utiliser l’option bind de mount, qui me parait plus élégante. C’est juste une ligne à activer ou désactiver dans un fichier de conf. Elle permet de monter l’intégralité du contenu, ou un répertoire seulement, d’un disque ou d’un dossier dans un autre répertoire. Il est ensuite possible de gérer les droits d’accès au niveau du répertoire lié, par exemple pour un accès FTP.


Configuration serveur : Bind de deux dossiers

Il faut d’abord créer le dossier pour le partage NFS.

Bob@Linux:/$ sudo mkdir -p /tvixhd4

La configuration se fait ensuite dans le fichier /etc/exports, où sont déclarés tous les partages NFS.

Bob@Linux:/$ sudo vi /etc/exports 

Le montage est déclaré de la façon suivante : ‘/media/disque/répertoire /PATH/répertoire-lié none bind 0 0′

Pour déclarer un partage pour mon serveur multimedia j’ai déclaré le montage suivant :

/mnt/raid1/share/ /tvixhd4 none bind 0 0

Il reste à recharger la conf à l’aide de la commande suivante :

Bob@Linux:/$ sudo mount -a 

Il est possible de créer un montage temporaire. Si le dossier existe déjà, une seule commande suffit :

Bob@Linux:/$ sudo mount --bind '/media/disque/répertoire /PATH/répertoire-lié 


Configuration Tvix : déclaration du partage NFS

Sur le serveur Tvix, il faut aller dans le menu pour accéder à la configuration des partages pour déclarer l’adresse du serveur. Dans mon cas, j’ai dponc saisi l’adresse IP de mons erveur sur le partage tvixhd4. Après avoir sauvegardé, j’ai bien accès à mes photos sur le partage.


Présentation

Ça a mis un peu de temps à rentrer, mais ca commence. :)

Il y a deux configurations. Sur le serveur hébergeant les ressources à partager, il faut déclarer quelles ressources sont à partager. Et avec qui. Sur le client, qui veux accéder aux ressources, il faut déclarer quelles ressources et sur quel serveur auxquelles on veut accéder.


Partie Serveur

Sur le serveur il faut éditer le fichier /etc/exports où seront déclarés tous les partages NFS.

ramon@mediaserver:/$ sudo vi /etc/exports 

Dans le fichier on saisi les partages et les adresses des clients, puis quelques paramètres de configuration. :

/mnt/raid1 192.168.0.10(rw,all_squash,anonuid=1000,anongid=1000,sync)

On recharge la configuration avec la commande suivante :

root@mediaserver:~$ sudo exportfs -a


Partie Client

Il faut déjà créer le dossier qui sera le point de montage.

Bob@Linux:/$ sudo mkdir -p /mnt/mediaserver2

Et on va ensuite déclarer le nouveau montage NFS

Bob@Linux:/$sudo vi /etc/fstab

Dans le fichier il faut déclarer le path de la ressource distante puis le point de montage local ou sera montée le partage NFS.

192.168.0.1:/mnt/raid1/ /mnt/mediaserver2 nfs user,noauto,rw    0       0

On recharge le fichier de configuration et on peut ensuite monter le partage.

Bob@Linux:/$sudo sudo mount -a
Bob@Linux:/$sudo sudo mount /mnt/mediaserver2/