El servidor A
exporta directorio /srv
vía NFS con la opción nohide
. Un subdirectorio dentro de /srv
, /srv/foo
es un punto de montaje para otra ubicación en el servidor NFS usando --bind
una opción, como
server# mount --bind /bar/foo/ /srv/foo/
El cliente B
lo importa A:/srv
y lo monta /mnt/srv
usando NFS. Los contenidos de /mnt/srv
son los contenidos de A:/srv
.
El problema es que /mnt/srv/foo
está vacío, mientras espero ver el contenido de A:/bar/foo/
allí.
¿Cómo exportar e importar correctamente recursos compartidos NFS que también tienen subdirectorios como puntos de montaje?
Respuesta1
crossmnt
es tu amigo.
/srv *(rw,fsid=0,no_subtree_check,crossmnt)
Respuesta2
Me había topado con este problema mientras seguía elArco sin discoguía, y realmente me ralentizó. Voy a compartir mis hallazgos aquí, ya que tengo curiosidad por saber si esto funcionará para alguien más.
Según la guía sin disco, 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
ejecuté el montaje y confirmé que puedo ver todo:
# mkdir -p /nfs/des1
# mount --bind /srv/des1 /nfs/des1
# ls -l /nfs/des1
bin boot dev usr #[SNIP]
Refiriéndose alArco NFSguía, luego puse lo siguiente /etc/exports
en 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 probado todo lo demás, cambié esto para que /etc/exports
se 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, uno pensaría que esto tendría el mismo efecto que el código anterior, pero cuando ejecuté exportfs -rav
nuevamente para registrar los cambios, intenté volver a montar desde el cliente y ¡funcionó!
Respuesta3
Parece que el servidor NFS debe exportar cada subpunto de montaje para que sea visible para los clientes. En la situación anterior, el /etc/exports
archivo debería tener el siguiente aspecto:
/srv *(rw,fsid=0,nohide,no_subtree_check)
/srv/foo *(rw,nohide,no_subtree_check)
Luego, importar /srv
en el cliente con la opción -t nfs
hará que ambos /srv
estén /srv/foo
disponibles correctamente.
editado por OP
esta línea
/srv/foo *(rw,fsid=0,nohide,no_subtree_check)
ha funcionado en mi caso en lugar de
/srv/foo *(rw,nohide,no_subtree_check)
Respuesta4
NOTA:solo un usuario habilitado
Lo que agrega es un conjunto de ediciones en el lado del servidor y en el lado del cliente. Del lado del servidor /etc/exports
y /etc/fstab
del lado del cliente.
Lado del servidor
- Linux Mint 18.3 Sylvia de 32 bits
- Kernel Linux 4.4.0-138-genérico i686
asus eeepc
$ cat /etc/exports #insert shares (one for each mounted partition sub-folder): /nfsshare/ /192.168.1.155(rw,no_root_squash,no_subtree_check,fsid=root,crossmnt) /nfsshare/media/ 192.168.1.155(rw,no_root_squash,no_subtree_check) /nfsshare/extra/ /192.168.1.155(rw,no_root_squash,no_subtree_check) $ cat /etc/fstab #shared media files on /media/ed/ /media/ed/ /nfsshare/ nfs bind 0 0 /media/ed/media/ /nfsshare/media/ nfs bind 0 0 /media/ed//extra /nfsshare/extra/ nfs bind 0 0
Lado del cliente
- Linux Mint 19 Tara de 64 bits
Kernel Linux 4.15.0-38-genérico x86_64
$ cat /etc/fstab #NFS Shares line added 192.168.1.158:/nfsshare /mnt/share nfs rw,soft,intr,noatime,x-gvfs-show