O 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 --bind
a opção, como
server# mount --bind /bar/foo/ /srv/foo/
O cliente B
importa A:/srv
e monta /mnt/srv
usando NFS. O 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 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/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 lá.
Nesta fase, tentei de tudo até que algo me levou a esta opção na 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.
Então, depois de tentar de tudo, troquei isso e /etc/exports
ficou 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 -rav
novamente 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/exports
arquivo deverá ficar assim:
/srv *(rw,fsid=0,nohide,no_subtree_check)
/srv/foo *(rw,nohide,no_subtree_check)
Então, importar /srv
no cliente com a opção -t nfs
disponibilizará ambos /srv
e /srv/foo
adequadamente.
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/exports
e /etc/fstab
no 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