Me había tropezado con este problema mientras seguía la guía Diskless Arch , y realmente me detuvo. Voy a compartir mis hallazgos aquí, ya que tengo curiosidad por saber si esto funcionará para alguien más.
Según la guía Diskless, tengo el sistema de archivos raíz del cliente sin disco (los datos reales que necesito exportar) en una imagen de bucle invertido, que se ha montado en /srv/des1:
/srv/des1.img on /srv/des1 type btrfs (rw,relatime,compress=lzo,discard,space_cache)
Luego creé un punto de montaje, /nfs/des1luego ejecuté el montaje y confirmo que puedo ver todo:
# mkdir -p /nfs/des1
# mount --bind /srv/des1 /nfs/des1
# ls -l /nfs/des1
bin boot dev usr #[SNIP]
Refiriéndome a la guía Arch NFS , pongo lo siguiente en /etc/exportsel servidor:
/nfs/ *(rw,no_root_squash,no_subtree_check,fsid=root)
/nfs/des1/ *{rw,no_root_squash,no_subtree_check,nohide)
Luego ejecuté un exportfs -raven el servidor para aplicar estos cambios.
Sin embargo, luego monté el recurso compartido en el cliente de prueba con: mount server:/des1 /mnt/tmpsolo para encontrar que es un directorio vacío, cuando esperaba que el sistema de archivos raíz sin disco estuviera allí.
En esta etapa, probé casi todo hasta que algo me llevó a esta opción en la exportspágina de manual:
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.
Entonces, después de haber intentado todo lo demás, cambié esto para que se /etc/exportsviera así:
/nfs/ *(rw,no_root_squash,no_subtree_check,fsid=root,crossmnt)
/nfs/des1/ *{rw,no_root_squash,no_subtree_check)
Después de leer la entrada de la página de manual, pensaría que esto tendría el mismo efecto que el código anterior, pero cuando corrí exportfs -ravnuevamente para registrar los cambios, ¡intenté volver a montarlo desde el cliente y funcionó!
/srv/foo --> /bar/foo?