Como exportar e importar corretamente compartilhamentos NFS que também possuem subdiretórios como pontos de montagem?

Como exportar e importar corretamente compartilhamentos NFS que também possuem subdiretórios como pontos de montagem?

O servidor Aexporta diretório /srvvia NFS com a opção nohide. Um subdiretório dentro de /srv, /srv/fooé um ponto de montagem para outro local no servidor NFS usando --binda opção, como

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

O cliente Bimporta A:/srve monta /mnt/srvusando NFS. O conteúdo de /mnt/srvé o conteúdo de A:/srv.

O problema é que /mnt/srv/fooestá vazio, enquanto espero ver o conteúdo dele A:/bar/foo/.

Como exportar e importar corretamente compartilhamentos NFS que também possuem subdiretórios como pontos de montagem?

Responder1

crossmnté seu amigo.

/srv        *(rw,fsid=0,no_subtree_check,crossmnt)

Responder2

Eu me deparei com esse problema enquanto seguia oArco sem discoguia, e isso realmente me atrasou. Vou compartilhar minhas descobertas aqui, pois estou curioso para saber se isso funcionará para mais alguém.

De acordo com o guia Diskless, tenho o sistema de arquivos raiz do cliente sem disco (os dados reais que preciso exportar) em uma imagem de loopback, que foi montada em /srv/des1:

/srv/des1.img on /srv/des1 type btrfs (rw,relatime,compress=lzo,discard,space_cache)

Em seguida, criei um ponto de montagem /nfs/des1, executei a montagem e confirmei que consigo ver tudo:

# mkdir -p /nfs/des1 
# mount --bind /srv/des1 /nfs/des1
# ls -l /nfs/des1
bin  boot  dev  usr  #[SNIP]

Referindo-se aoArco NFSguia, coloquei o seguinte /etc/exportsno servidor:

/nfs/      *(rw,no_root_squash,no_subtree_check,fsid=root)
/nfs/des1/ *{rw,no_root_squash,no_subtree_check,nohide)

Em seguida, executei um exportfs -ravno servidor para aplicar essas alterações.

No entanto, montei o compartilhamento no cliente de teste com: mount server:/des1 /mnt/tmpapenas para descobrir que é um diretório vazio, quando esperava que o sistema de arquivos raiz sem disco estivesse lá.

Nesta fase, tentei de tudo até que algo me levou a esta opção na 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. 

Então, depois de tentar de tudo, troquei isso e /etc/exportsficou assim:

/nfs/      *(rw,no_root_squash,no_subtree_check,fsid=root,crossmnt)
/nfs/des1/ *{rw,no_root_squash,no_subtree_check)

Depois de ler a entrada da página de manual, você pensaria que isso teria o mesmo efeito do código anterior, mas quando executei exportfs -ravnovamente para registrar as alterações, tentei remontar a partir do cliente e funcionou!

Responder3

Parece que cada subponto de montagem deve ser exportado pelo servidor NFS para ficar visível para os clientes. Na situação acima o /etc/exportsarquivo deverá ficar assim:

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

Então, importar /srvno cliente com a opção -t nfsdisponibilizará ambos /srve /srv/fooadequadamente.

editar por OP

está linha

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

funcionou no meu caso em vez de

    /srv/foo    *(rw,nohide,no_subtree_check) 

Responder4

OBSERVAÇÃO:apenas usuário único habilitado

O que ele adiciona é um conjunto de edições no lado do servidor e no lado do cliente. No lado do servidor /etc/exportse /etc/fstabno lado do cliente.

Lado do servidor

  • Linux Mint 18.3 Sylvia 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 do cliente

  • Linux Mint 19 Tara 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
    

informação relacionada