¿Cómo exportar e importar correctamente recursos compartidos NFS que también tienen subdirectorios como puntos de montaje?

¿Cómo exportar e importar correctamente recursos compartidos NFS que también tienen subdirectorios como puntos de montaje?

El servidor Aexporta directorio /srvvía NFS con la opción nohide. Un subdirectorio dentro de /srv, /srv/fooes un punto de montaje para otra ubicación en el servidor NFS usando --binduna opción, como

server# mount --bind /bar/foo/ /srv/foo/

El cliente Blo importa A:/srvy lo monta /mnt/srvusando NFS. Los contenidos de /mnt/srvson los contenidos de A:/srv.

El problema es que /mnt/srv/fooestá 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

crossmntes 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/des1ejecuté 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/exportsen 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 -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 probado todo lo demás, cambié esto para que /etc/exportsse 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 -ravnuevamente 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/exportsarchivo debería tener el siguiente aspecto:

/srv        *(rw,fsid=0,nohide,no_subtree_check)
/srv/foo    *(rw,nohide,no_subtree_check)

Luego, importar /srven el cliente con la opción -t nfshará que ambos /srvestén /srv/foodisponibles 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/exportsy /etc/fstabdel 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
    

información relacionada