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

20

Servidor A exporta diretório /srv via 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 a opção --bind , como

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

O cliente B imports A:/srv monta em /mnt/srv usando NFS. Conteúdo de /mnt/srv é o conteúdo de A:/srv .

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

Como exportar e importar adequadamente compartilhamentos NFS que também têm subdiretórios como pontos de montagem?

    
por mbaitoff 02.07.2012 / 16:39

5 respostas

8

Parece que cada sub-ponto de montagem deve ser exportado pelo servidor NFS para ficar visível para os clientes. Na situação acima, o arquivo /etc/exports deve se parecer com o seguinte:

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

Em seguida, importar /srv no cliente com a opção -t nfs fará com que os /srv e /srv/foo estejam adequadamente disponíveis.

editar por OP

esta linha

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

trabalhou no meu caso em vez de

    /srv/foo    *(rw,nohide,no_subtree_check) 
    
por 09.07.2012 / 06:28
24

crossmnt é seu amigo.

/srv        *(rw,fsid=0,no_subtree_check,crossmnt)
    
por 04.09.2014 / 20:31
10

Eu encontrei este 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 qualquer outra pessoa.

De acordo com o guia Diskless, eu tenho o sistema de arquivos raiz do cliente sem disco (os dados reais que eu 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 , em seguida, executei a montagem e confirme que consigo 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 Arch NFS , coloco o seguinte em /etc/exports no 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 -rav no servidor para aplicar essas alterações.

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

Nesta fase, experimentei quase tudo até que algo me levasse a essa opção na página exports man:

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 ter tentado todo o resto, eu troquei isso, então meu /etc/exports ficou assim:

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

Após ler a entrada da página de manual, você poderia pensar que isso teria o mesmo efeito que o código anterior, mas quando eu executei exportfs -rav novamente para registrar as alterações, tentei remontar do cliente e funcionou!

    
por 25.12.2013 / 06:57
2

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

Os problemas estão detalhados neste post (não por mim): link

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

    
por 14.05.2014 / 23:17
0

NOTA: somente usuário único ativado

O que ele adiciona é um conjunto de edições para o lado do servidor e do lado do cliente. No lado do servidor, /etc/exports e /etc/fstab no lado do cliente.

Lado do 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 do 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
    
por 01.11.2018 / 17:59

Tags