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/des1
luego 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/exports
el 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 -rav
en el servidor para aplicar estos cambios.
Sin embargo, luego monté el recurso compartido en el cliente de prueba con: mount server:/des1 /mnt/tmp
solo 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 exports
pá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/exports
viera 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 -rav
nuevamente para registrar los cambios, ¡intenté volver a montarlo desde el cliente y funcionó!
/srv/foo --> /bar/foo
?