J'étais tombé sur ce problème en suivant le guide Diskless Arch , et cela m'a vraiment ralenti. Je vais partager mes conclusions ici, car je suis curieux de savoir si cela fonctionnera pour quelqu'un d'autre.
Selon le guide sans disque, j'ai le système de fichiers racine du client sans disque (les données réelles que j'ai besoin d'exporter) dans une image de bouclage, qui a été montée sur /srv/des1:
/srv/des1.img on /srv/des1 type btrfs (rw,relatime,compress=lzo,discard,space_cache)
J'ai ensuite créé un point de /nfs/des1montage, puis exécuté le montage et confirmé que je peux tout voir:
# mkdir -p /nfs/des1
# mount --bind /srv/des1 /nfs/des1
# ls -l /nfs/des1
bin boot dev usr #[SNIP]
En me référant au guide Arch NFS , j'ai ensuite mis les éléments suivants /etc/exportssur le serveur:
/nfs/ *(rw,no_root_squash,no_subtree_check,fsid=root)
/nfs/des1/ *{rw,no_root_squash,no_subtree_check,nohide)
J'ai ensuite exécuté un exportfs -ravsur le serveur pour appliquer ces modifications.
Cependant, j'ai ensuite monté le partage sur le client de test avec: mount server:/des1 /mnt/tmpseulement pour trouver que c'est un répertoire vide, quand je m'attendais à ce que le système de fichiers root sans disque soit là.
À ce stade, j'ai tout essayé jusqu'à ce que quelque chose m'amène à cette option dans la exportspage de manuel:
crossmnt
This option is similar to nohide but it makes it possible for clients
to move from the filesystem marked with crossmnt to exported filesystems
mounted on it. Thus when a child filesystem "B" is mounted on a parent "A",
setting crossmnt on "A" has the same effect as setting "nohide" on B.
Donc, après avoir essayé tout le reste, j'ai échangé ceci pour que mon /etc/exportsapparence ressemble à ceci:
/nfs/ *(rw,no_root_squash,no_subtree_check,fsid=root,crossmnt)
/nfs/des1/ *{rw,no_root_squash,no_subtree_check)
Après avoir lu l'entrée de la page de manuel, vous penseriez que cela aurait le même effet que le code précédent, mais quand j'ai couru à exportfs -ravnouveau pour enregistrer les modifications, j'ai ensuite essayé de remonter à partir du client et cela a fonctionné!
/srv/foo --> /bar/foo?