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

21

ADiretório de exportação de servidor /srvvia NFS com opção nohide. Um subdiretório dentro /srv, /srv/fooé um ponto de montagem para outro local no servidor NFS usando --bindopção, como

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

O cliente Bimporta A:/srve monta /mnt/srvusando o NFS. Conteúdo de /mnt/srvsão os conteúdos de A:/srv.

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

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

mbaitoff
fonte
Talvez seja mais fácil usar apenas o link simbólico em A de /srv/foo --> /bar/foo?
Ckhan 6/07
1
Eu tentei isso. Isso tentaria acessar a /bar/foomáquina cliente B, não o servidor A.
mbaitoff

Respostas:

27

crossmnt é seu amigo.

/srv        *(rw,fsid=0,no_subtree_check,crossmnt)
anatoly techtonik
fonte
10

Eu me deparei com esse problema enquanto seguia o guia Diskless Arch , 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, eu 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)

Criei um ponto de montagem /nfs/des1, execute o mount e confirmo que posso ver tudo:

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

Referindo-me ao guia NFS do Arch , coloco o seguinte no /etc/exportsservidor:

/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 encontrar um diretório vazio, quando esperava que o sistema de arquivos raiz sem disco estivesse lá.

Nesta fase, tentei quase tudo até que algo me levasse a essa opção na exportspágina do 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, tendo tentado tudo o resto, troquei isso para /etc/exportsficar 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 que o código anterior, mas quando eu corri exportfs -ravnovamente para registrar as alterações, tentei remontar do cliente e funcionou!

v25
fonte
8

Parece que todos os subpontos de montagem devem ser exportados pelo servidor NFS para ficarem visíveis para os clientes. Na situação acima, o /etc/exportsarquivo deve se parecer com o seguinte:

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

Em seguida, a importação /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)

trabalhou no meu caso em vez de

    /srv/foo    *(rw,nohide,no_subtree_check) 
mbaitoff
fonte
1
crossmnt na raiz?
Meffect
2

Eu realmente queria fazer isso também, mas parece que há problemas com essa idéia porque os clientes NFS esperam que o número de inode dos arquivos seja único dentro do cliente. visão de uma única montagem.

Os problemas estão detalhados nesta postagem do blog (não por mim): http://utcc.utoronto.ca/~cks/space/blog/unix/MultiFilesystemNFSIssue

Decidi montar os sistemas de arquivos separadamente e vinculá-los juntos, o que deve funcionar para todos os clientes NFS.

Bluby
fonte
1
Embora isso possa teoricamente responder à pergunta, seria preferível incluir aqui as partes essenciais da resposta e fornecer o link para referência.
slm
0

NOTA: apenas um usuário habilitado

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

Lado do servidor

  • Linux Mint 18.3 Sylvia de 32 bits
  • Kernel Linux 4.4.0-138-generic 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 de 64 bits
  • Kernel Linux 4.15.0-38-generic x86_64

    $ cat /etc/fstab
    #NFS Shares line added
    192.168.1.158:/nfsshare /mnt/share nfs rw,soft,intr,noatime,x-gvfs-show
    
Ed Iglehart
fonte
1
O que é isso? Esse é um arquivo? Muitos arquivos? Use as ferramentas de formatação para formatar sua resposta para maior clareza. Você pode editar e explicar como sua resposta responde à pergunta?
terdon
(1) Use suas palavras. (2) O que essa oferta ainda não foi apresentada?
G-Man diz 'Reinstate Monica'
desculpas por isso.
Ed Iglehart 1/11