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/des1
montage, 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/exports
sur 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 -rav
sur le serveur pour appliquer ces modifications.
Cependant, j'ai ensuite monté le partage sur le client de test avec: mount server:/des1 /mnt/tmp
seulement 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 exports
page 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/exports
apparence 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 -rav
nouveau pour enregistrer les modifications, j'ai ensuite essayé de remonter à partir du client et cela a fonctionné!
/srv/foo --> /bar/foo
?